Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Builder C++] Базы данных, ADO-технология, курсовой проект, нужна помощь 
:(
    Опции темы
Varyen
Дата 20.12.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Всем здравствуйте! smile 
В-общем задание такое, составить программу на Билдер С++ которая будет работать с 4-мя таблицами (Приходный кассовый ордер, Информация о плательщиках, Информация о предприятиях, Бухгалтерские счета). Использовать необходимо dBase, желательно по ADO-технологии. При построении соединения через ADOConnection выбираю Microsoft OLE DB Provider for ODBC Drivers как поставщика, далее когда делаю connection string выбираю Microsoft dBase Driver, кажется так называется.
  И тут вот проблема возникла (причем боюсь возникнет ещё немеряно, при необходимости в этой же теме буду спрашивать совета) - 
Код

ADOTable1->Delete();

Не работает корректно - строка удаляется, но при повторном запуске программы все становится как было до удаления! Открывал таблицу через Database Desktop - строки удалены, но! В режиме редактирования в Десктопе порядковый номер строки ставится неправильно - если вся таблица пуста, он может например поставить №11, в зависимости от того сколько строк было до удаления в программном режиме. Помогает только Empty. 

Ещё одна проблема - при запуске проекта вылетает несколько ошибок с указанием на 
Код

Form3->ADOTable1->First();

Код

Form3->ADOTable12->First();


сама ошибка собственно: Could not convert variant of type (Null) into type (String).

с чем может быть связано? в таблице есть пустые ячейки, но это так и должно быть, что можно сделать чтобы ошибок этих не было?

Очень прошу помочь, сроки сильно поджимают. Заранее благодарен за любую помощь.


PM MAIL   Вверх
Данкинг
Дата 20.12.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Таким образом ты из .dbf строку не удалишь. Как именно удалять - не знаю, но .Delete просто помечает строку на удаление.

Цитата(Varyen @  20.12.2009,  19:09 Найти цитируемый пост)
сама ошибка собственно: Could not convert variant of type (Null) into type (String).

Может быть, таблица не открыта или пустая?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Varyen
Дата 20.12.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Спасибо за подсказку, только вот узнать бы у кого-нить как всетаки удалять... 
Открыта имеете ввиду ADOTable->Active = true? это имеется... Но есть пустые ячейки. При запуске ехе-шника этих ошибок нет.

Это сообщение отредактировал(а) Varyen - 20.12.2009, 21:39
PM MAIL   Вверх
Данкинг
Дата 20.12.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Varyen @  20.12.2009,  21:38 Найти цитируемый пост)
Спасибо за подсказку, только вот узнать бы у кого-нить как всетаки удалять... 

Есть компонент TDbf, но, насколько я знаю, на Билдер он встаёт криво, если вообще встаёт (т.е. он для Дельфи предназначен). У меня на Билдере в BDS 2006 он глючит, т.е. работать невозможно.

Цитата(Varyen @  20.12.2009,  21:38 Найти цитируемый пост)
Но есть пустые ячейки.

Просто ->First не может выдавать подобной ошибки. Это же просто переход в начало.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Varyen
Дата 20.12.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Просто дело в том, что из-за этой неполадки с удалением сплошные ошибки идут в ходе редактирования строк, добавления новых...
Но спасибо и на этом smile Буду очень благодарен если кто-нибудь ещё сможет помочь.
PM MAIL   Вверх
Varyen
Дата 23.12.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Так и не нашел пока нигде как же в Билдере удалить строку из dBase.... Очень надеюсь что тут кто-нибудь знает smile
И по поводу ошибки этой, если у кого было отпишите пожалуйста, как можно избавиться.
PM MAIL   Вверх
djamshud
Дата 23.12.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Когда-то в пыхе использовал DBase. Там после удаления записи нужно было делать что-то вроде sync'а, т.е. синхронизировать текущее программное представление таблицы с файлом. Тут вероятно то же самое. Посмотрите по списку API этой БД что-нибудь похожее.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Varyen
Дата 25.12.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Перевел все под BDE, стало лучше smile 

только теперь вот с чем проблема, в ADOQuery сделал запрос

Код


SELECT IncCashOrder.PKO_NUMBER AS НомерПКО, IncCashOrder.DATE AS Дата, IncCashOrder.ACCOUNT AS Счёт, IncCashOrder.SUBACCOUNT AS Субсчёт, IIf(IsNull([INN]),[PAYER_NAME],[COMP_NAME]) AS Плательщик,  IncCashOrder.SUM AS Сумма
FROM Payer INNER JOIN IncCashOrder ON Payer.PAYER_CODE = IncCashOrder.PAYER_CODE;



в простом Query жалуется на все что не лень, даже букву "ч" воспринимать не хочет... 
Код

IIf(IsNull([INN]),[PAYER_NAME],[COMP_NAME]) AS Плательщик


и вот на эту самую важну строчку в запросе жалуется... может кто подсказать, что не так?)

смысл в том, что есть таблица по приходно-кассовым ордерам и плательщикам, причем плательщики как юр. так и физ. лица, т.е. у кого-то заполнено поле TABEL и  PAYER_NAME, у кого-то INN и COMP_NAME, а в запросе надо PAYER_NAME и COMP_NAME вписать в одно поле.

Это сообщение отредактировал(а) Varyen - 25.12.2009, 17:52
PM MAIL   Вверх
Varyen
Дата 27.12.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



вобщем если в эту тему ещё кто-то заглядывает...проект подходит к концу, но тут такая проблема неизвестно из-за чего: запрос по фильтрации по дате не обрабатывается, пишет parameter d_from not found.


Код

if (CheckBox1->Checked == true)
{
Query1->SQL->Add("AND (DATE Between :d_from And :d_to)");
Query1->ParamByName("d_from")->DataType==ftDate;
Query1->ParamByName("d_to")->DataType==ftDate;
Query1->ParamByName("d_from")->AsDate=StrToDate(MaskEdit1->Text);
Query1->ParamByName("d_to")->AsDate=StrToDate(MaskEdit2->Text);
}



извиняюсь если вопрос тупой, но мне как новичку не видно причины неработоспособности smile

Это сообщение отредактировал(а) Varyen - 27.12.2009, 00:55
PM MAIL   Вверх
Varyen
Дата 27.12.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Попробовал на дату по-другому написать текст запроса:

Код

Query1->SQL->Add("AND (Inccashorder.'DATE' Between "+StrToDate(MaskEdit1->Text)+" And "+StrToDate(MaskEdit2->Text)+" )");


пишет что не распознает .09 , в этом роде
PM MAIL   Вверх
Данкинг
Дата 28.12.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Какой StrToDate может быть в строке? Query1->SQL-> - это строка, а не дата.

Добавлено через 2 минуты и 35 секунд
К тому же в .dbf дата обозначается так: 
{^2009-12-25}


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Varyen
Дата 28.12.2009, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Спасибо! Посоветуйте тогда пожалуйста, как можно сделать в моем случае запрос по дате, чтобы выбирать строки от ... и до...?
Без StrToDate тоже не работало, потому и решил попробовать дописать...

Это сообщение отредактировал(а) Varyen - 28.12.2009, 00:25
PM MAIL   Вверх
Данкинг
Дата 28.12.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Конечно, пробовать я такую страсть не буду, пишу здесь:  smile 
Код

Query1->SQL->Add("AND (Between (Inccashorder.'DATE',CTOD('"+MaskEdit1->Text+"'),CTOD('"+MaskEdit2->Text+"'))");





--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Varyen
Дата 28.12.2009, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Неа, на слово Between жалуется :(
PM MAIL   Вверх
Данкинг
Дата 28.12.2009, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Может, перед (Between скобку убрать всё же?

Вообще в общем случае на самом фоксе вот такой запрос работает:
Код

SELECT * from DBF() WHERE BETWEEN(ddd,CTOD('25.12.2009'),CTOD('30.12.2009'))

(ddd - это поле типа DATA)



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.