Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

При закрытии приложения появляется двойная запись в БД   Найти похожие ветки 

 
ProgC   (2004-09-22 06:44) [0]

Когда добавляю запись в БД, делаю коммит, то все прекрасно. Но стоит мне закрыть приложение, и если в IBTransaction действие по умолчанию стоит "Commit", то в базе появляется еще одна (такая же) запись. Что это и как избавиться?


 
Johnmen ©   (2004-09-22 09:11) [1]

1. Разобраться с понятиями "база данных" и "таблица".
2. Разобраться с добавлением. Двойным добавлением !
3. Разобраться с транзакциями и их применением.


 
ProgC   (2004-09-22 10:05) [2]

Во всем уже разобрался. Это мое не первое приложение с использованием БД. До этого было написанно полноценное приложение документооборота. Но на этот раз, что то не так. Можно ли указать конкретное место моей ошибки или не разобраное понятие?

З.Ы.


> Johnmen ©   (22.09.04 09:11) [1]
> 2. Разобраться с добавлением. Двойным добавлением !


Для этого я и обратился в форум


 
Anatoly Podgoretsky ©   (2004-09-22 10:09) [3]

ProgC   (22.09.04 10:05) [2]
конкретное место - 17 строка.


 
Johnmen ©   (2004-09-22 10:31) [4]

>ProgC   (22.09.04 10:05) [2]
>Для этого я и обратился в форум

Ну так программа твоя 2 (два) раза добавляет. Других вариантов нет. Чудес не бывает.


 
ProgC   (2004-09-22 10:31) [5]

Ладно:

 DataModule1.IBQuery_FieldInfo.Insert;
 DataModule1.IBQuery_FieldInfo.Fields[1].Value:=Tab.Fields[index].Name;
 DataModule1.IBQuery_FieldInfo.Fields[2].Value:=Tab.Fields[index].Caption;
 DataModule1.IBQuery_FieldInfo.Fields[3].Value:=Tab.Fields[index].FieldType;
 DataModule1.IBQuery_FieldInfo.Fields[4].Value:=Tab.Fields[index].FieldLength;
 DataModule1.IBQuery_FieldInfo.Fields[5].Value:=Tab.Fields[index].ValueType;
 DataModule1.IBQuery_FieldInfo.Fields[6].Value:=Tab.Fields[index].Dicsr;
 DataModule1.IBQuery_TableInfo.Locate("name", Tab.Name, []);
 DataModule1.IBQuery_FieldInfo.Fields[7].Value:=
 DataModule1.IBQuery_TableInfo.FieldValues["ID"];
 DataModule1.IBQuery_FieldInfo.Post;
 DataModule1.IBQuery_FieldInfo.Transaction.Commit;

где Tab - мой собственный класс

При выполнении этого кода добаляется запись в БД. Закрываем приложение, в БД, появляется еще одна идентичная запись.


 
ProgC   (2004-09-22 10:36) [6]


> Ну так программа твоя 2 (два) раза добавляет. Других вариантов
> нет. Чудес не бывает.


Запись появляется только если в IBTransaction действие по умолчанию Commit. Не должен он так себя вести, ведь транзакцию я уже подтвердил.


 
Johnmen ©   (2004-09-22 11:08) [7]

И всё-таки чудес не бывает...:)
Попутно возникают вопросы.
Почему бы не сделать просто запрос INSERT INTO вместо вставки записи в набор данных ?
Если уж НД необходим, то почему бы не использовать IBDataSet, для этого предназначенный ? Ведь IBQuery несколько для др. целей.
А что делается после выполнения Commit"а ? Ведь НД после него будет закрыт.


 
ProgC   (2004-09-22 11:20) [8]

Ладно, учту советы. После добавления вызывается

procedure TDataModule1.ActiveConnectBD();
var
 i: integer;
begin
 For i:=0 to IBDatabase_Main.DataSetCount-1 Do
   Begin
     IBDatabase_Main.DataSets[i].Active:=true;
   end;
end;

после этого выполнение программы пожно заканчивать.


 
Johnmen ©   (2004-09-22 11:26) [9]

Чтобы не откравыть заново НД после коммита, делай CommitRetaining.


 
Rule ©   (2004-09-22 11:35) [10]

а ты поставь в событие автерпост showmessage и узнаешь сколько раз у тебя пост происходит


 
Rule ©   (2004-09-22 11:36) [11]

Rule ©   (22.09.04 11:35) [10]
а главное узнаешь когда он происходит ... и кто его вызвал


 
ProgC   (2004-09-22 11:54) [12]

Ладно вечером проверю, потом напешу.



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.058 c
1-1096618595
Skywalker
2004-10-01 12:16
2004.10.17
Синхронизация доступа в нитях


1-1096611788
Artem123
2004-10-01 10:23
2004.10.17
как узнать координату ячейки в DBGrid?


1-1097052892
Lord de Mon
2004-10-06 12:54
2004.10.17
Массив EDITов


4-1094845471
Зяц
2004-09-10 23:44
2004.10.17
Консоль и GUI двойной удар


6-1092032219
Wolfram
2004-08-09 10:16
2004.10.17
Проблема с ICS