Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизПомогите! Какие-то проблемы с IBTransaction. Найти похожие ветки
← →
NeyroSpace (2002-11-19 17:41) [0]Нужно вставить 1-ну запись в главную таблицу и n-записей в подчиненную.
Если я не глючу, то делается это так:
DataModule1.IBTransaction1.StartTransaction;
try
Pquery1.execsql(вставляем в главную)
...
Fquery1.execsql(вставляем в подчин)
...
FqueryN.execsql(вставляем в подчин)
DataModule1.IBTransaction1.Rollback;
except
DataModule1.IBTransaction1.Rollback;
end
У всех Fquery1 и Pquery1 указана IBTransaction1.
Но при выполнении DataModule1.IBTransaction1.StartTransaction;
Выдает ошибку: Transaction is active
Почему?
← →
Prooksius (2002-11-19 20:08) [1]Потому, что ты уже стартовал ее когда-то.
Для изменений в базе лучше пользоваться отдельными транзакциями.
Тогда тебе не придется постоянно беспокоиться насчет этого.
← →
oss (2002-11-20 00:33) [2]try
Pquery1.execsql(вставляем в главную)
...
Fquery1.execsql(вставляем в подчин)
...
FqueryN.execsql(вставляем в подчин)
DataModule1.IBTransaction1. Rollback; // может commit ?
except
DataModule1.IBTransaction1.Rollback;
end
← →
oss (2002-11-20 00:35) [3]и стартует она сама
← →
Олеся (2002-11-20 05:01) [4]Всегда проверяю активновсть транзакции
if not IBTransaction1.active then IBTransaction1.StartTransaction
if IBTransaction1.active then IBTransaction1.Commit
if IBTransaction1.active then IBTransaction1.Rollback
← →
Victor_Cr (2002-11-20 08:48) [5]2 Олеся © (20.11.02 05:01)
Это совсем не обызательно если транзакция у тебя выполняеться отдельной процедурой, и точка входа в StartTransaction...Commit(Rollback) единственная. За тебя все сделает блок try..except.
2 NeyroSpace © (19.11.02 17:41)
А ты действительно глючишь :-).
DataModule1.IBTransaction1.StartTransaction;
try
Pquery1.execsql(вставляем в главную)
...
Fquery1.execsql(вставляем в подчин)
...
FqueryN.execsql(вставляем в подчин)
DataModule1.IBTransaction1.Commit;
except
DataModule1.IBTransaction1.Rollback;
end
каким типом являються у тебя Pquery1,Fquery1,FqueryN. Если это обычные TQuery, то ты делаешь что-то дикое. Даже если в SQL тексте у них запросы на удаление, изменение, вставку...
← →
Dizzy (2002-11-20 10:39) [6]Я обычно делаю так:
if DataModule1.IBTransaction1.Active then
try
DataModule1.IBTransaction1.Commit;
except
DataModule1.IBTransaction1.Rollback;
end;
DataModule1.IBTransaction1.StartTransaction;
try
Pquery1.execsql(вставляем в главную)
...
Fquery1.execsql(вставляем в подчин)
...
FqueryN.execsql(вставляем в подчин)
DataModule1.IBTransaction1.Commit;
except
DataModule1.IBTransaction1.Rollback;
end
DataModule1.IBTransaction1.StartTransaction;
При этом TIBTransaction одна на весь проект.
← →
NeyroSpace (2002-11-20 10:40) [7]1.
DataModule1.IBTransaction1.Commit; //Rollback <- опечатка :-\
except
DataModule1.IBTransaction1.Rollback;
end
2. Pquery1,Fquery1:TIBQuery
С Transaction is active разобрался...
>Олеся © (20.11.02 05:01) спасибо.
Тогда еще один вопросик.
В IBUpdateSQLdocuments есть список параметров. Как до них добраться?
Делаю так, но не уверен, что правильно...
//Устанавливаем значение внешнего ключа из главной таблицы
DataModule1.IBQueryDocuments.ParamByName("ID").AsInteger := iPARENT;
DataModule1.IBUpdateSQLdocuments.SetParams(ukInsert);
DataModule1.IBUpdateSQLdocuments.ExecSQL(ukInsert);
//IBQueryDocuments <-связан-> IBUpdateSQLdocuments
← →
Alex-xxc (2002-11-20 11:22) [8]Я делаю следующим образом: в обработчике события OnSQLChanging у Query прописываю:
try
Query.CheckClosed;
except
Query.Close;
end;
if Query.Transaction.Active=False then Query.Transaction.StartTransaction;
при условии, что пользуештся TIBSQL. Единственное, за чем остается следить - это делать commit/rollback
← →
Олеся (2002-11-21 05:37) [9]>NeyroSpace
Если этот вопрос ко мне
>В IBUpdateSQLdocuments есть список параметров. Как до них >добраться?
>Делаю так, но не уверен, что правильно...
то лучше напиши, что тебе надо сделать, может здесь параметры совсем и не нужны (честно говоря мне ни разу не пришлось делать что-то подобное, хотя IBUpdateSQL использую довольно часто)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c