Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизПри закрытии приложения появляется двойная запись в БД Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c