Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO & ADO Transaction / 10 сообщений из 10, страница 1 из 1
28.08.2007, 16:27
    #34758798
Ciget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
Уважаемые гуру. Прошу если не сложно кинуть два исходника для работы с транзакциями под АДО и ДАО.
Если можно то полных включая создание и инициализация переменных... например редактирование записей простой таблички
Заранее благодарен. Просто у меня проблема делаю как в офф доках - не пашет.. не пишет в БД ничего.
...
Рейтинг: 0 / 0
28.08.2007, 16:35
    #34758848
mcgrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
АДО:
Код: 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
28.08.2007, 16:41
    #34758886
Ciget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
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
28.08.2007, 16:47
    #34758908
Ciget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
Неужели прийдеться все через команд делать ? и поможет ли это если мне нужно выбрать данные а потом на основе их вставлять новые/редактировать
...
Рейтинг: 0 / 0
28.08.2007, 16:49
    #34758918
mcgrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
CigetНеужели прийдеться все через команд делать ? и поможет ли это если мне нужно выбрать данные а потом на основе их вставлять новые/редактировать
комманд не обязательно, можете через рекордсет, но запросами быстрее при массовых изменениях.
...
Рейтинг: 0 / 0
28.08.2007, 16:53
    #34758934
Ciget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
Я просто реально понимаю что у меня схожая ситуация с http://sql.ru/forum/actualthread.aspx?tid=195796&hl=dao+%f2%f0%e0%ed%e7%e0%ea%f6%e8%e8
Открываю таблицу а записать не удаеться .. транзакция вроде начата а данные не вносяться ... В чем проблема ?
...
Рейтинг: 0 / 0
28.08.2007, 17:03
    #34758978
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
CigetЯ просто реально понимаю что у меня схожая ситуация с http://sql.ru/forum/actualthread.aspx?tid=195796&hl=dao+%f2%f0%e0%ed%e7%e0%ea%f6%e8%e8
Открываю таблицу а записать не удаеться .. транзакция вроде начата а данные не вносяться ... В чем проблема ?думаецо мне (навскидку, могу врать) что рекодсет надо открывать (по крайней мере в дао) опосля объявления транзакции.
...
Рейтинг: 0 / 0
28.08.2007, 17:06
    #34758993
mcgrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
в АДО точно можно и до начала транзакции открывать рекордсет. проверял - откаты работают.
...
Рейтинг: 0 / 0
28.08.2007, 17:07
    #34758997
mcgrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
главное в одном коннекшне открывать рекордсеты.
...
Рейтинг: 0 / 0
29.08.2007, 13:10
    #34761158
Ciget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAO & ADO Transaction
Всем огромное пасибо, особенно mcgrow
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DAO & ADO Transaction / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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