![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вложенные транзакции в ADO [D6, MSSQL]
Best Before 2024 © (2002-09-12 12:23:00)Скажите, разве нельзя сделать такое
ADOConnection1.BeginTrans;
...
ADOConnection1.BeginTrans; //ругается, что транзакция уже открыта
...
ADOConnection1.CommitTrans;
...
ADOConnection1.CommitTrans;
sniknik (2002-09-12 16:30:00) [1]с этой строкой? странно у меня работает, так.
ADOCommand1.CammandText:= "BEGIN TRANSACTION";
ADOCommand1.Execute;
.....
ADOCommand1.CammandText:= "BEGIN TRANSACTION";
ADOCommand1.Execute;
...
ADOCommand1.CammandText:= "COMMIT TRANSACTION";
ADOCommand1.Execute;
...
ADOCommand1.CammandText:= "COMMIT TRANSACTION";
ADOCommand1.Execute;
только что попробовал для данной строки.
хм... проверил соеденение OLE DB тоже работает. ??? когда первый пост положил проверял не работало. только в Access. странно.
Best Before 2024 (2002-09-12 16:17:00) [2]Project Project1.exe raised exception class EOleException with message "Cannot start more transactions on this session".
sniknik (2002-09-12 16:06:00) [3]повторять не надо. привыкай к тому что сейчас есть. :-))
sniknik (2002-09-12 16:04:00) [4]ну с той поры вся идеология могла поменятся.
вот попробуй
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DRIVER={SQL Server};SERVER=NIKS;UID=sa;DATABASE=tempdb"
строка с которой у тебя должно сработать, только базы и сервер свой подставь.
Best Before 2024 (2002-09-12 15:58:00) [5]Нет!
ADO->OLE DB Provider for MSSQL.
и работало. я там NestedLevel анализировал!
До самой смерти буду повторять это!!!!
sniknik (2002-09-12 15:56:00) [6]Работало подключение к MSSQL? или всетаки к чему другому?
А может потому работало что подключение было ADO -> ODBC -> MSSQL, так сделай также и у тебя в дельфях будет работать.
Best Before 2024 (2002-09-12 15:40:00) [7]ADO не виновато.
Меня удивляет, что в VB все работало. У VB поддержка ADO 2.6, а вот Delphi что делает - непонятно
sniknik (2002-09-12 15:36:00) [8]вряд ли тут ADO виновато
т.к описанная ситуация срабатывает при подключении к ACCESS а вот если MSSQL то почему то только в одном блоке работает
BEGIN TRANSACTION
BEGIN TRANSACTION
COMMIT TRANSACTION
COMMIT TRANSACTION
разрывать не позволяет.
я правда SQL -ем пользовался а не через ADOConnection1.BeginTrans; хотя это одно и то же.
Best Before 2024 (2002-09-12 14:38:00) [9]2 Shaman_Naydak © (12.09.02 14:24)
Да ради бога, пусть откатываются все!
Я не могу начатьвложенную транзакцию
Shaman_Naydak (2002-09-12 14:24:00) [10]Ну что я могу сказать..
ADO - универсальная оболочка для доступа к данным..
А вложенные транзакции - то, какая будет реакция зависит от используемого провайдера..
Например, для провайдера MS SQL сервера реакция будет такая:
Вложенные транзакции разрешены, но их нет :). То есть если у тебя произошел Rollback где-нибудь внутри 5-й транзакции, откатятся все
Best Before 2024 (2002-09-12 14:10:00) [11]?
Best Before 2024 (2002-09-12 13:56:00) [12]Где все знатоки?
Best Before 2024 (2002-09-12 13:03:00) [13]Нигде не написано, что этого делать нельзя.
Более того, на VB у меня все это проходило нормально.
Что-то Delphi не очень дружит c ADO. Сделали какую-то обертку и все.
Best Before 2024 (2002-09-12 12:43:00) [14]Зачем тогда BeginTrans возвращает Level ???
ЮЮ (2002-09-12 12:42:00) [15]Нельзя, раз ругается? А смысл вложенной транзакции?
Если устроят внешние изменения при откате внутренних, то сделать внутренние в сторонке, после выполнения внешних.
Johnmen (2002-09-12 12:41:00) [16]И что же здесь удивительного ? Одно соединение - одна тр-ция.
Best Before 2024 (2002-09-12 12:37:00) [17]???