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

Вниз

Помогите! Какие-то проблемы с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
7-28323
brestmarket
2002-09-28 13:08
2002.12.09
Киньте пожалуйста таблицу возвращаемых кодов клавиатуры.


4-28349
kaif
2002-10-26 01:23
2002.12.09
Как закрыть процесс под NT


14-28291
Jeer
2002-11-18 23:10
2002.12.09
Програмитсты -кто они ?


1-28097
Senator
2002-11-28 11:19
2002.12.09
WinXp


3-27891
BorisUK
2002-11-21 13:36
2002.12.09
MIDAS RemoteDataModule