Про транзакции

SergeyKa
Дата: 01.06.2004 10:56:40
Народ !!!
Вот какой вопрос ..
Как средствами ADO сделать вложенную транзакцию? Что то типа

cnn.begintrans
cnn.execute "UPDATE .... "
cnn.begintrans
cnn.execute "UPDATE ... "
cnn.committrans
cnn.committrans


ну так это не прокатывает (((
Senin Viktor
Дата: 01.06.2004 11:05:12
ну так это не прокатывает (((

И что, прямо так и пишет "Транзакция не прокатывает!" ? :)
Давай весь кусок кода и подробное сообщение об ошибке, если она была и почему ты решил, что она не прокатывает?
Заодно версии акеса, мдака
SergeyKa
Дата: 01.06.2004 11:14:06
Весь код таков ..
With cnn
.BeginTrans
.Execute "UPDATE TestTable SET Name=Name+1"
.BeginTrans
.Execute "UPDATE TestTable SET Fam=Fam+1"
.CommitTrans
.CommitTrans
Exit Sub
End With
Exit_h:
cnn.RollbackTrans

Версия Акса: XP SP2
Версия MDAC: 2.6
paparome
Дата: 01.06.2004 11:18:54
Где ошибка?

И чем вам такой вариант не угодил?

UPDATE TestTable SET Name=Name+1, Fam = Fam + 1
Senin Viktor
Дата: 01.06.2004 11:20:08
Весь код таков ..

прямо таки весь?
А Set cnn = CurrentProject.Connection. Да?

и так и не написал: ошибка какая?

а пока по читай: ACC2000: Error Using CurrentProject.Connection in Transactions
АлексейК
Дата: 01.06.2004 11:24:49
кажись так надо

cnn.open CurrentProject.Connection.connectionstring
SergeyKa
Дата: 01.06.2004 11:30:37
Тьфу ты ... про ошибку то и забыл
Cannot atart more transaction on this session
2paparome
а вот та мне именно захотелось - разбить на две транзакции

да и вообще. Вопрос принципиальный может ADO выполнить вложеннкю транзакцию своими средствами или надо делать так
Dim cnn as New Connection
cnn.Open "Provider=SQLOLEDB;Data Source=YOU;Initial Catalog=Test","sa"
With cnn
.Execute "BEGIN TRAN"
.Execute "UPDATE TestTable SET Name=Name+1"
.Execute "BEGIN TRAN"
.Execute "UPDATE TestTable SET Fam=Fam+1"
.Execute "COMMIT TRAN"
.Execute "COMMIT TRAN"
Exit Sub
End With
Exit_h:
cnn.Execute "ROLLBACK TRAN"
paparome
Дата: 01.06.2004 11:31:10
автор
или надо делать так

А вот так делать не надо :)
У серера нет вложенных транзакций

Уж лучше ХП написать :)
SergeyKa
Дата: 01.06.2004 11:36:31
2paparome
кстати говоря, вариант с BEGIN TRAN-COMMIT TRAN работат безупречно и
вообще как это так у MSSQL сервера нет вложенных транзакций их там до восьми штук вообщето если мне память не изменяет (((

ХП - это конечно хорошо, но всё таки - допускает ADO это или нет ?
Senin Viktor
Дата: 01.06.2004 11:38:14
Вопрос принципиальный может ADO выполнить вложеннкю транзакцию своими средствами

и что это значит - собственными средствами? Это как?

а средствами адо
For providers that support nested transactions, calling the BeginTrans 
method within an open transaction starts a new, nested transaction. The return 
value indicates the level of nesting: a return value of "1" indicates you have 
opened a top-level transaction (that is, the transaction is not nested within 
another transaction), "2" indicates that you have opened a second-level 
transaction (a transaction nested within a top-level transaction), and so forth. 
2paparome
У серера нет вложенных транзакций

ну да?
mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\acdata.chm::/ac_8_md_06_66nq.htm