Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Не обновляется БД


Автор: 1122 22.6.2010, 06:48
Есть приложение написанное на делфи в дизайн-тайме.
Пользуюсь компонентами библиотеки EhLib (DBGridEh, DBEditEh, IBXDataDriverEh, MemTableEh, DataSource и MemTableEh).
Сервер FireBird 2.0
На форму кинул IBDatabase и IBTransaction, подключил их к базе, отображение в гриде есть.
Для работы с базой использую DBNovigator.
Пытаюсь изменить информацию в базе или добавить... в гриде все добавляет и изменяет, а в базе нет, и соответственно после перезапуска приложения грид тоже сбрасывается.
Только начал изучать БД.
Подскажите плиз в чем может быть ошибка!
Спасибо! 

Автор: Frees 22.6.2010, 07:10
IBTransaction.Commit делал? 

Автор: Akella 22.6.2010, 09:37
1122, ты только не спрашивай, что такое транзакции и с чем их готовят  smile 

Автор: Данкинг 22.6.2010, 09:49
Цитата(1122 @  22.6.2010,  07:48 Найти цитируемый пост)
Подскажите плиз в чем может быть ошибка!

В неподтверждённой транзакции. smile 

Автор: 1122 22.6.2010, 14:12
Добавил в обработчик события кнопки добавления:
Form3.IBtransaction1.commit
Все равно не работает.
Да и так пробовал:
Код

Form3.IBtransaction1.active:=false; // Если true то пишет ошибку "transaction is activ"
Form3.IBtransaction1.startTransaction;
..... // SQL запрос на добавление 
Form4.IBTransaction.commit;


Еще примечательно то, что на это же форме есть еще один грид, куда выводится отсортированная информация из таблице, куда я пытаюсь добавить. Выводится в этот грид инфа с помощью IBQuery, который обращается к базе. Из чего можно сделать вывод, что информация все же до базы дошла, но как только приложение закрывается все исчезает.

Коммит не помог :(
Или я что-то не так делаю?

Я создал для всех форм с гридами одну IBDatabase и IBTransaction на отдельной форме и везде в uses'ах подключил модуль этой формы. Эти компоненты всегда активны и связь с базой есть.
Хелп! :(

Автор: Keeper89 22.6.2010, 15:21
Цитата

// Если true то пишет ошибку "transaction is activ"

Вот и зачем новую начинать? Подтвердите уже имеющуюся.

Автор: 1122 22.6.2010, 16:24
"Подтвердите уже имеющуюся"

Так и сделал.

Код

procedure TForm4.Button2Click(Sender: TObject);
begin
IBXDataDriverEh1.UpdateSQL.Clear;
IBXDataDriverEh1.UpdateSQL.Add('update KATALOG_TOVAROV set NAZVANIE = :NAZVANIE, CENA_ZA_EDINICU =:CENA_ZA_EDINICU, ID_PROIZVODITELIA =:ID_PROIZVODITELIA, HARAKTERISTIKA =:HARAKTERISTIKA, UPAKOVKA =:UPAKOVKA where ID =:ID');
Form3.IBTransaction1.Commit;
MemTableEh1.Refresh;
end;


Из 4-5 экспериментальных добавлений 1 (один) раз все же добавление произошло, с таким кодом!!! Не могу понять почему! Теперь я совсем в замешательстве.
Что не так в коде?

И еще... в Transaction properties надо выбрать Read commited ? У пробовал и с Read commited  и вообще без ничего. Эффект один.

Автор: Keeper89 22.6.2010, 19:56
А через что происходит апдейт? Я просто не вижу выполнения запроса или связки Edit/Post.

Автор: Данкинг 22.6.2010, 20:43
А если не извращаться со всякими .UpdateSQL, а использовать обычный IBQuery?

Автор: Akella 23.6.2010, 14:42
Советую прочитать о работе транзакций, о принципе программирования клиент-серверных приложений и как вообще работать с транзакциями. Посмотреть примеры.

Добавлено через 17 секунд
Иначе так и будет тыкаться, как слепой котёнок.

Добавлено через 49 секунд
Извини за равнение. Не ради того, чтобы обидеть или оскорбить, просто пример удачный smile

Автор: Моряк007 24.6.2010, 20:50
Таже проблема. Обновляется только insert, а delet и edit нет(((
Буду рад если кто подскажет. Транзакцию завершал.

Автор: Akella 25.6.2010, 08:46
Цитата(Моряк007 @  24.6.2010,  20:50 Найти цитируемый пост)
Обновляется только insert, а delet и edit нет

Ты сам-то понял, что написал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)