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

Вниз

Транзакции осуществляются в соединении или как? ADO   Найти похожие ветки 

 
Vlad Oshin ©   (2008-05-27 14:48) [0]

не может ли так получится, что разные потоки/соединения/ будут друг другу мешать?
Т.е. если установить у
ADOConnection1: TADOConnection
cв-во     KeepConnection = False

не получится ли так, что например такой код

try  //finally
er:=1;
if cbError.Checked
  then begin
    q2.SQL.Text:="begin transaction;";
    q2.ExecSQL;
  end;
//----------

     q2.SQL.Text:="insert into Table_1 (q) values(30);";
     q2.ExecSQL;

     q2.SQL.Text:="insert into NonExistNameObject values(30);";
     q2.ExecSQL;

//----------
er:=0;
finally //finally
if cbError.Checked
 then begin
   if er=0 then q2.SQL.Text:="commit transaction;"
           else q2.SQL.Text:="rollback transaction;";
   q2.ExecSQL;
 end;
end;    //finally


как нибудь потеряет кто начал транзакцию, а кому ее надо закончить?

не знаю, понятно ли объяснил..


 
Stas ©   (2008-05-27 15:02) [1]

нет конечно, транзакция ведь роходит на сервере.


 
Stas ©   (2008-05-27 15:07) [2]

А, недосмотрел... несколько раз execSQL. Только несовсем понятно зачем именно такая конструкция, почему все не описать на TSQL?
Дело в том что если не завершиш по какой-либо причине транзакцию, то доступа к этим данным у остальных небудет, до снятия этой блокировки.


 
Vlad Oshin ©   (2008-05-27 15:07) [3]

хорошо, как сервер узнает, что я

начал транзакцию1
отключился
снова подключился через секунду начал транзакцию2
отключился
снова подключился через секунду закончил транзакцию2
закончил транзакцию1

откуда он знает, где какую транзакцию я собираюсь закончить?


 
Vlad Oshin ©   (2008-05-27 15:08) [4]

хорошо, как сервер узнает, что я

начал транзакцию1
отключился
снова подключился через секунду начал транзакцию2
отключился
снова подключился через секунду закончил транзакцию2
закончил транзакцию1

откуда он знает, где какую транзакцию я собираюсь закончить?


 
Vlad Oshin ©   (2008-05-27 15:08) [5]

хорошо, как сервер узнает, что я

начал транзакцию1
отключился
снова подключился через секунду начал транзакцию2
отключился
снова подключился через секунду закончил транзакцию2
закончил транзакцию1

откуда он знает, где какую транзакцию я собираюсь закончить?


 
Vlad Oshin ©   (2008-05-27 15:14) [6]


> Дело в том что если не завершиш по какой-либо причине транзакцию,
>  то доступа к этим данным у остальных небудет, до снятия
> этой блокировки.

это понятно,


> почему все не описать на TSQL?

это тоже понятно, что лучше на TSQL.

Ну а в приведенном примере, может так случится, что потеряется "кто на ком стоял"?


 
Stas ©   (2008-05-27 15:14) [7]

Vlad Oshin ©   (27.05.08 15:07) [3]
Извеняюсь см.2


 
Stas ©   (2008-05-27 15:20) [8]

в приделах 1-го подключения возможно эта конструкция и пройдет, но если изменится @@SPID, то навряд ли. А так как KeepConnection = False, то вполне возможно что начатая транзакция небудет завершена...
Но разные не попутаются. т.е. не завершиться какая-то другая.


 
MsGuns ©   (2008-05-27 15:54) [9]

TADOCommand.BeginTrans - CommitTrans/RollBackTrans - явно управляет транзакцией на стороне клиента, т.е все, что было между (в цикле или просто последовательный запуск нескольких модифицирующих запросов) либо подтведится либо откатится.

KeepConnect - см. Help - вполне нормально описан

Для управления транзакциями на стороне сервера предпочтительнее использовать хранимки, запускаемые с клиента "за один раз". При критичной ситуации блокировки также перед запуском и после стартовать и коммитить транзакцию

В мсскл действует вложенный механизм транзакций (т.е. верхняя подтверждает-отменяет нижнюю), что несколько затрудняет понимание после, например, ИБ.
Другими словами, если внутри ХП, запускаемой с клиента, есть старт и подтверждение транзакции, но клиент сам стартует и подтвердает, то в конце концов клиент последнее слово остается за клиентом ;)


 
MsGuns ©   (2008-05-27 15:54) [10]

Прошу прощения, все, что написано в [9] относится, конечно, к TADOConnection


 
DiamondShark ©   (2008-05-28 14:21) [11]


> хорошо, как сервер узнает, что я

Никак не узнает.
Поэтому первая транзакция будет откатана, а последний commit/rollback завершится с ошибкой "Нет открытой транзакции"



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

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

Наверх





Память: 0.48 MB
Время: 0.048 c
2-1226422654
Res
2008-11-11 19:57
2008.12.21
TBitmap


2-1226701334
istok2
2008-11-15 01:22
2008.12.21
аналог Longword в TFieldType


13-1122809509
vicheslav
2005-07-31 15:31
2008.12.21
Переход от FibPlus на Ado.Net


2-1226476773
leonidus
2008-11-12 10:59
2008.12.21
Непонятки с TStringGrid


3-1212023408
Yus
2008-05-29 05:10
2008.12.21
Изменить формат файла .qrp





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