У меня проблема при загрузке данных из файла Excel (VBA) в бэкэнд Access.Я пытаюсь загрузить 2 записи в одной транзакции.Это делается с помощью цикла.
Соответствующая часть кода.
cnn.BeginTrans
'(some test data)
SomeNumber = 2
NewText = "new text"
For i = 0 To 1
Set cmd = New ADODB.Command
'(increase [counter] field in database)
With cmd
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = "UPDATE [tbltest] " & _
"SET [counter] = [counter] + 1 " & _
"WHERE [counter] > ?"
.Parameters.Append .CreateParameter(, adInteger, adParamInput, , SomeNumber)
.Execute
End With
Set cmd = New ADODB.Command
'(insert new row in gap)
With cmd
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = "INSERT INTO [tbltest] ([counter], [txtfield]) " & _
"VALUES (?, ?)"
.Parameters.Append .CreateParameter(, adInteger, adParamInput, , SomeNumber + 1)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput, 50, NewText & i)
.Execute
End With
Next i
cnn.CommitTrans
tblПроверка в начале
Counter, txtfield
1 , Sometext1
2 , Sometext2
3 , Sometext3
4 , Sometext4
Ожидаемый результат
Counter, txtfield
1 , Sometext1
2 , Sometext2
5 , Sometext3
6 , Sometext4
3 , Sometext1
4 , Sometext0
но я получаю
Counter, txtfield
1 , Sometext1
2 , Sometext2
5 , Sometext3
6 , Sometext4
3 , Sometext1
3 , Sometext0
Так что, похоже, counter
вставленный в первый цикл не обновляется во втором.
Я тестировал тот же код, используя SQL Server в качестве бэкэнда, и он работает как задумано.
Но по какой-то причине он работает по-другому с бэкэндом Access.
Я что-то упустил или это невозможно сделать, используя Access в качестве бэкэнда?
EDIT
Строка Set cmd = New ADODB.Command
должна находиться внутри for
цикла перед командой обновления, а не снаружи.