|
ishu DAO CommitTrans, Rollback code
|
|||
---|---|---|---|
#18+
Zdrasti, Y menya takaya problema: kogda ya insert dannie iz odnoi tablizi v druguyu, ya hochu esli chto-to v prozesses sluchaetsya, chto bila vozmoghnost' otmenit' INSERT i DELETE, tak chto bi ya ne ostalas' s pustoi tablizei v sluchae chego. Ya znayu chto dlya etogo ispolzuyut CommitTranst, Rollback Pomogite mne s kodom poghaluista. U menya est' code dlay ADO, no ya hochu ego ispolzovat' Mne nughno toghe samoe, tolko s DAO: Dim cnn As ADODB.Connection Dim lngAffected As Long Dim bolBeginTrans As Boolean On Error GoTo ErrHandler bolBeginTrans = False Set cnn = CurrentProject.Connection cnn.BeginTrans bolBeginTrans = True cnn.Execute "Select * into TEST from Configuration", lngAffected, adExecuteNoRecords cnn.Execute "DELETE * FROM tblABC..." cnn.CommitTrans bolBeginTrans = False Set cnn = Nothing '******************** '* Exit Procedure * '******************** ExitProcedure: Exit Sub '**************************** '* Error Recovery Section * '**************************** ErrHandler: MsgBox Err.Description, vbExclamation If (bolBeginTrans) Then cnn.RollbackTrans bolBeginTrans = False End If Resume ExitProcedure End Sub Spasibo-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 22:57 |
|
ishu DAO CommitTrans, Rollback code
|
|||
---|---|---|---|
#18+
Следующая программа изменяет в таблице "Сотрудники" название должности всех коммерческих представителей. После запуска с помощью метода BeginTrans транзакции, в которой выделяются все изменения, вносимые в таблицу "Сотрудники", метод CommitTrans вызывается для сохранения изменений. Отметим, что метод Rollback позволяет отменить все изменения, занесенные с помощью метода Update. Более того, главная транзакция является вложенной в другую транзакцию, которая автоматически отменяет любые изменения, внесенные пользователем при работе с данным примером. Пока пользователь решает, стоит или нет сохранять изменения, одна или несколько страниц таблицы остаются заблокированными. Поэтому данный прием не может быть рекомендован для использования и приводится только для иллюстрации. Sub BeginTransX() Dim strName As String Dim strMessage As String Dim wrkDefault As Workspace Dim dbsNorthwind As Database Dim rstEmployees As Recordset ' Определяет стандартный объект Workspace. Set wrkDefault = DBEngine.Workspaces(0) Set dbsNorthwind = OpenDatabase("Борей.mdb") Set rstEmployees = _ dbsNorthwind.OpenRecordset("Сотрудники") ' Запускает внешнюю транзакцию. wrkDefault.BeginTrans ' Запускает главную транзакцию. wrkDefault.BeginTrans With rstEmployees ' Выполняет цикл по набору записей и спрашивает пользователя, ' следует ли изменять должность конкретного сотрудника. Do Until .EOF If !Должность = "Коммерческий представитель" Then strName = !Фамилия & ", " & !Имя strMessage = "Сотрудник: " & strName & vbCr & _ "Изменение должности" ' Изменяет должность указанного сотрудника. If MsgBox(strMessage, vbYesNo) = vbYes Then .Edit !Должность = "Счетовод" .Update End If End If .MoveNext Loop ' Запрашивает пользователя, следует ли занести ' все ранее сделанные изменения. If MsgBox("Сохранить все изменения?", vbYesNo) = vbYes Then wrkDefault.CommitTrans Else wrkDefault.Rollback End If ' Печатает текущие данные из набора записей. .MoveFirst Do While Not .EOF Debug.Print !Фамилия & ", " & !Имя & _ " - " & !Должность .MoveNext Loop ' Отменяет все изменения, внесенные пользователем, ' поскольку программа предназначена только для демонстрации. wrkDefault.Rollback .Close End With dbsNorthwind.Close End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2002, 00:11 |
|
|
start [/forum/topic.php?fid=45&fpage=1845&tid=1683202]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 134ms |
0 / 0 |