Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2011.11.06;
Скачать: [xml.tar.bz2];

Вниз

Транзакция в ZConnection (ZeoS)   Найти похожие ветки 

 
lamer6666 ©   (2010-02-01 20:38) [0]

Доброго времени суток уважаемые.
Использую компоненты ZeoS:

Table1 (Table1_Id,Table1_date_start)
Table2 (Table2_Id,Table2_Table1_Id,Table2_Sum)


 try
   if not Form1.ZConnection1.InTransaction then    
   ZConnection1.StartTransaction;

Добавляю в таблицу Table1 новую запись

Тут мне необходимо в Table2_Table1_Id вписать значение индекса которое было получено в операции добавления выше
   
   ZConnection1.Commit;
 except
   if Form1.ZConnection1.InTransaction then  
   ZConnection1.Rollback;
 end;


Прошу помощи, уважаемые.


 
Виталий Панасенко(дом)   (2010-02-01 21:01) [1]

и при чем тут транзакция? я давно смотрел на зеосы, возможно, там уже автоматом подстановка идет в мастер-детали...а так - onnewrecord тебе в помощь


 
Виталий Панасенко(дом)   (2010-02-01 21:03) [2]

и, если тип таблиц MyISAM, то транзакции им не поддерживаются.. InnoDB знаю точно поддерживает


 
lamer6666 ©   (2010-02-01 21:25) [3]


> Виталий Панасенко(дом)   (01.02.10 21:03) [2]

Спасибо )


 
lamer6666 ©   (2010-02-06 15:57) [4]

В общем порылся интернет ничего нового не нашел.
Делаю так:

 ZQ1:=TZQuery.Create(self);
 ZQ1.Connection:=Form1.ZConnection1;
 ZQ1.SQL.Text:=" INSERT INTO .... "+
   "VALUES (NULL ,..."""+
 ZQ2:=TZQuery.Create(self);
 ZQ2.Connection:=Form1.ZConnection1;
 ZQ2.SQL.Text:="UPDATE ....ТУТ ДЕЛАЮ УМЫШЛЕННУЮ ОШИБКУ"+

 try
if not Form1.ZConnection1.InTransaction then Form1.ZConnection1.StartTransaction;

{-------Äîáàâëÿåì------}
ZQ1.ExecSQL;
ZQ2.ExecSQL;
{-------Äîáàâëÿåì------}
Form1.ZConnection1.Commit;

 except
   if Form1.ZConnection1.InTransaction then  Form1.ZConnection1.Rollback;
   ShowMessage("Не удается");
 end;

После выполнения кода получаю сообщение Не удается но ZQ1.ExecSQL добавляет данные в таблицу
Что делаю не правильно уважаемые?


 
Виталий Панасенко(дом)   (2010-02-06 21:11) [5]

с дуру можно и ...й поломать.. не смотря на то, что это - гидравлика...:-)


 
sniknik ©   (2010-02-07 10:12) [6]

попробуй явно, запросами выполнить, без компонент
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION

а то и вообще не в проге на дельфи, а какой нибудь сторонней утилитой.

>> Виталий Панасенко(дом)   (01.02.10 21:03) [2]
> Спасибо )
спасибо это конечно хорошо, но не адекватно... по нему совершенно не ясен используемый тобой тип таблиц про которые был пост, и от которых многое зависит.
или думаешь тут все телепаты?


 
lamer6666 ©   (2010-02-07 10:31) [7]

Ну в плане типа, конечно InnoDB


 
lamer6666 ©   (2010-02-07 12:05) [8]

Экспериментировал вчера с кодом.
Выяснилось следующее, если я исключаю из кода:

 //Rollback;

то все успешно работает.

В чем тут может быть дело?


 
sniknik ©   (2010-02-07 14:52) [9]

наверное в том что при отсутствии коммита, транзакция тоже откатывается.


 
lamer6666 ©   (2010-02-08 21:54) [10]


> наверное в том что при отсутствии коммита, транзакция тоже
> откатывается.

Не понятно.

Суть как раз в "откате". То есть, если нет ошибки в try то все работает успешно, а если возникает исключение, то при Rollback; первый запрос (который без ошибок) выполняется, а второй с ошибками не выполняется, получается что транзакция не работает, ведь должно быть ЛИБО ВСЕ (и ZQ1 и ZQ2), ЛИБО НИЧЕГО (не ZQ1 и не ZQ2).
А вот если я исключаю //Rollback; то при возникновении исключения ни первый (правильно работающий), ни второй запрос (содержащий ошибку) не срабатывает, то что надо.

Читал форумы, выяснил что ZConnection имеет свойство AutoCommit, значение которого по умолчанию True;
Так вот когда я вызываю ZConnection1.StartTransaction; значение AutoCommit меняется на False; (как и ожидал) и как результат, все работает успешно.
Но вот Rollback меняет значение AutoCommit на True; и как следствие (мне кажется) транзакция и срабатывает, не понимаю почему (ведь должен просиходит откат а не подтверждени транзакции). Заметил, что когда я "ремарю"  //Rollback; после выполнения конструкции Try значение AutoCommit остаеться False.

Можеть есть какие идеи?  (((


 
sniknik ©   (2010-02-08 22:37) [11]

> Не понятно.
что тут непонятного? транзакция откатится сервером, если клиент не пришлет коммит (прога рухнула/коннект отвалился/и т.д. ) это как бы основное в транзакциях.

> Можеть есть какие идеи?  (((
sniknik ©   (07.02.10 10:12) [6]

> попробуй явно, запросами выполнить, без компонент
> BEGIN TRANSACTION
> COMMIT TRANSACTION
> ROLLBACK TRANSACTION
>
> а то и вообще не в проге на дельфи, а какой нибудь сторонней утилитой.


 
lamer6666 ©   (2010-02-08 23:07) [12]


> попробуй явно, запросами выполнить, без компонент

я конечно прощу прощения, уважаемый sniknik, но что значит явно запросами, одним запросом?


> сторонней утилитой.

был бы признателен за рекомендацию УТИЛИТЫ.

Заранее благодарю.



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

Форум: "Базы";
Текущий архив: 2011.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
15-1310139238
Weei
2011-07-08 19:33
2011.11.06
Ротация бит


3-1265045910
lamer6666
2010-02-01 20:38
2011.11.06
Транзакция в ZConnection (ZeoS)


15-1309797717
Кто б сомневался
2011-07-04 20:41
2011.11.06
Как циф. данные передаються физически по проводу?


6-1245575935
depode
2009-06-21 13:18
2011.11.06
Программное управление uTorrent ом.


1-1271765959
opolo2000
2010-04-20 16:19
2011.11.06
WorkSheet.Activate в Office2007





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский