Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.038 c
1-1096369568
Yura
2004-09-28 15:06
2004.10.17
Несколько экземпляров одной и той же формы???


6-1091863418
Ivolg
2004-08-07 11:23
2004.10.17
Про сокеты


9-1086894437
Огромное Кулясище
2004-06-10 23:07
2004.10.17
Странная видеокарта....


14-1096051536
GanibalLector
2004-09-24 22:45
2004.10.17
Из космоса получен первый искусственный сигнал


1-1096668687
denkop
2004-10-02 02:11
2004.10.17
Работа с памятью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский