powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO & ADO Transaction
10 сообщений из 10, страница 1 из 1
DAO & ADO Transaction
    #34758798
Ciget
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые гуру. Прошу если не сложно кинуть два исходника для работы с транзакциями под АДО и ДАО.
Если можно то полных включая создание и инициализация переменных... например редактирование записей простой таблички
Заранее благодарен. Просто у меня проблема делаю как в офф доках - не пашет.. не пишет в БД ничего.
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758848
mcgrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АДО:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
Private Function Save(Optional ByRef varErrNo As Variant) As Integer
    Dim blnInTrans As Boolean
    Dim strCmd1 As String
    Dim strCmd2 As String
    Dim rst As ADODB.Recordset
    Dim cmd As ADODB.Command
    Dim cnn As ADODB.Connection
    Dim lngWait As Long
    Dim lngW As Long
    Dim intRetryCount As Integer
On Error GoTo  999 

    blnInTrans = False
       strCmd1 = "INSERT INTO ..."
       strCmd2 = "UPDATE tbl ..."
 
    Set cnn = CurrentProject.Connection
    Set cmd = New ADODB.Command
    With cmd
       Set .ActiveConnection = cnn
       .Properties("Jet OLEDB:Partial Bulk Ops") =  2 
       .CommandType = adCmdText

    cnn.BeginTrans
       blnInTrans = True

       .CommandText = strCmd1
       .Execute , , adExecuteNoRecords

       .CommandText = strCmd2
       .Execute , , adExecuteNoRecords

    cnn.CommitTrans
       blnInTrans = False
    End With
    Set cmd = Nothing

    Save =  0 

ExitHere:
    Set cmd = Nothing
    cnn.Close
    Set cnn = Nothing
    Exit Function

 999 :
    Save = - 4 
    If cnn.Errors.Count =  0  Then
       varErrNo = Err.Number
       If blnInTrans = True Then cnn.RollbackTrans
       MsgBox 
       GoTo ExitHere
    End If
    varErrNo = cnn.Errors( 0 ).SQLState
    Select Case varErrNo
    Case acnncLockErrCantSave1, acnncLockErrCantSave2, _
         acnncLockErrCantRead, _
         acnncLockErrCantUpdate1, acnncLockErrCantUpdate2, _
         acnncLockErrCantUpdate3, _
         acnncLockErrExclusive
 
       intRetryCount = intRetryCount +  1 
       If intRetryCount <=  5  Then
          DoEvents
          lngWait = intRetryCount ^  2  * _
                    Int((adhcLockUBound - adhcLockLBound +  1 ) _
                    * Rnd() + adhcLockLBound)
          For lngW =  1  To lngWait
              DoEvents
           Next lngW
          Resume
       Else
Cancelled:
          If blnInTrans = True Then
              cnn.RollbackTrans
          End If
       End If
    Case acnncErrRelativeIndex, acnncErrDublicateIndex
       If blnInTrans = True Then
          cnn.RollbackTrans
       End If
    Case acnncLockErrDatChngd, acnncErrDataBaseLocked
       If blnInTrans = True Then
          cnn.RollbackTrans
       End If
       MsgBox cnn.Errors( 0 ).SQLState & ": " & cnn.Errors( 0 ).Description
    Case acnncErrFileNotFound, acnncErrDataBaseFormat, acnncErrDataBaseLocked
       If blnInTrans = True Then
          cnn.RollbackTrans
       End If
    Case Else
       If blnInTrans = True Then
          cnn.RollbackTrans
       Else
       End If
    End Select
    GoTo ExitHere
End Function
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758886
Ciget
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim ws As Workspace
Dim database As database
Dim data As Recordset

Set ws = DBEngine.Workspaces(0)
Set database = OpenDatabase("C:\Project.mdb")
Set data = database.OpenRecordset("Company_Budget")
ws.BeginTrans

Dim NonCash As Double
Dim Cash As Double
Dim nCash As String
Dim nNonCash As String

For i = 1 To Attr_Company_Count
...
With data
.AddNew
!ID_Budget = ID_Budget + 1
!ID_Company = 1
!ID_CA = i
!Cash_Budget = Cash
!NonCash_Budget = NonCash
!Date_Budget = Budget_Month
.Update
End With
Next i
ws.CommitTrans

Почему не пашет такой вариант ? Я просто уже и черед АДО писал ... я наверное полный .. не выходит и все (((
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758908
Ciget
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели прийдеться все через команд делать ? и поможет ли это если мне нужно выбрать данные а потом на основе их вставлять новые/редактировать
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758918
mcgrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CigetНеужели прийдеться все через команд делать ? и поможет ли это если мне нужно выбрать данные а потом на основе их вставлять новые/редактировать
комманд не обязательно, можете через рекордсет, но запросами быстрее при массовых изменениях.
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758934
Ciget
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я просто реально понимаю что у меня схожая ситуация с http://sql.ru/forum/actualthread.aspx?tid=195796&hl=dao+%f2%f0%e0%ed%e7%e0%ea%f6%e8%e8
Открываю таблицу а записать не удаеться .. транзакция вроде начата а данные не вносяться ... В чем проблема ?
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758978
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CigetЯ просто реально понимаю что у меня схожая ситуация с http://sql.ru/forum/actualthread.aspx?tid=195796&hl=dao+%f2%f0%e0%ed%e7%e0%ea%f6%e8%e8
Открываю таблицу а записать не удаеться .. транзакция вроде начата а данные не вносяться ... В чем проблема ?думаецо мне (навскидку, могу врать) что рекодсет надо открывать (по крайней мере в дао) опосля объявления транзакции.
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758993
mcgrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в АДО точно можно и до начала транзакции открывать рекордсет. проверял - откаты работают.
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34758997
mcgrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
главное в одном коннекшне открывать рекордсеты.
...
Рейтинг: 0 / 0
DAO & ADO Transaction
    #34761158
Ciget
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное пасибо, особенно mcgrow
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO & ADO Transaction
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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