Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вложенные транзакции / 10 сообщений из 10, страница 1 из 1
19.07.2004, 20:56
    #32611496
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Можно ли в ADO использовать вложенные транзакции? и как?.
Как узнать была ли начати транзакция в ADO.Connection ?
...
Рейтинг: 0 / 0
20.07.2004, 00:35
    #32611600
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Спросим у F1 "BeginTrans method"

BeginTrans begins a new transaction.


CommitTrans saves any changes and ends the current transaction. It may also start a new transaction.


RollbackTrans cancels any changes made during the current transaction and ends the transaction. It may also start a new transaction.
Syntax

level = object.BeginTrans()

object.BeginTrans

object.CommitTrans

object.RollbackTrans

Return Value

BeginTrans can be called as a function that returns a Long variable indicating the nesting level of the transaction.

Parameters

object A Connection object.

Connection

Use these methods with a Connection object when you want to save or cancel a series of changes made to the source data as a single unit. For example, to transfer money between accounts, you subtract an amount from one and add the same amount to the other. If either update fails, the accounts no longer balance. Making these changes within an open transaction ensures that either all or none of the changes go through.

Note Not all providers support transactions. Verify that the provider-defined property "Transaction DDL" appears in the Connection object's Properties collection, indicating that the provider supports transactions. If the provider does not support transactions, calling one of these methods will return an error.

Once you call the BeginTrans method, the provider will no longer instantaneously commit any changes you make until you call CommitTrans or RollbackTrans to end the transaction.

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. Calling CommitTrans or RollbackTrans affects only the most recently opened transaction; you must close or roll back the current transaction before you can resolve any higher-level transactions.





Magnus
...
Рейтинг: 0 / 0
20.07.2004, 11:46
    #32612094
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Пишу

1 conn.BeginTrans

2 conn.BeginTrans

3 conn.CommitTrans

4 conn.CommitTrans


В строке 2 возникает ошибка: "В данном сеансе невозможно запуск дополнительных транзакций".

БД - SQL-Server. Может кто знает почему нельзя вложенную транзакцию открыть?
...
Рейтинг: 0 / 0
20.07.2004, 14:36
    #32612760
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Так там же английским по серому написано что не все провайдеры поддерживают вложенные транзакции.

Это не весь текст. Ну загляни ж в хелп-то. Или мне его сюда весь копировать?

Код в студию. Строку соеденения желательно увидеть.

Magnus
...
Рейтинг: 0 / 0
20.07.2004, 16:49
    #32613223
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Magnus23
Код в студию. Строку соеденения желательно увидеть.




провайдер SQLOLEDB.
Строка соединения:
PROVIDER=SQLOLEDB;SERVER=local);DATABASE=UmsMed;TRUSTED_CONNECTION=YES
...
Рейтинг: 0 / 0
20.07.2004, 18:10
    #32613435
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
PROVIDER=SQLOLEDB.1;SERVER=local);DATABASE=UmsMed;TRUSTED_CONNECTION=YES
попробуй так
Magnus
...
Рейтинг: 0 / 0
21.07.2004, 10:56
    #32614153
SergeyKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Не даст он вам выполнить вложенную транзакцию ((
Пройденный этап ... обощёл его следующим образом:

cnn.execute "BEGIN TRANS"
....
cnn.execute "BEGIN TRANS"
.....
cnn.execute "COMMIT TRANS"
....
cnn.execute "COMMIT TRANS"

короче до 7 уровней вложенностию это работает 100%.
...
Рейтинг: 0 / 0
21.07.2004, 13:52
    #32614696
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
В таком случае нужно использовать хранимки и в них катать транзакции.
Я так всегда делаю, чего и вам советую. Разве что запрос динамический, тогда - вешеприведенный метод.

Magnus
...
Рейтинг: 0 / 0
21.07.2004, 16:46
    #32615306
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Всем большое спасибо за помощь.
...
Рейтинг: 0 / 0
22.07.2004, 09:17
    #32616059
Kloin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции
Но помните - Rollback из вложенной транзакции для MS SQL Server откатит все транзакции, сколько бы их открыто не было!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вложенные транзакции / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]