Я использую внешний интерфейс как Excel2016, а внутренний - Access2016. Это общий файл, который будет использоваться несколькими пользователями для ввода данных.
Когда я пытаюсь добавить запись, она добавляется нормально, но возникает ошибка (текущий набор записей не поддерживает обновление. Это может быть ограничением поставщика или выбранного типа блокировки), когда другой пользователь пытается добавить запись.
Я открываю и закрываю соединение после каждого чтения / записи в моем коде, чтобы несколько пользователей могли выполнять ввод данных.
Ниже приведен мой текущий код:
strPath = ActiveWorkbook.Path
strDBName = "Test Excel Access.accdb"
strDB = strPath & "\" & strDBName
ConnDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDB
strTable = "Table01"
adoRecSet.Open Source:=strTable, ActiveConnection:=ConnDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic
With adoRecSet
.AddNew
.Fields(1) = TextBox1.Text
.Fields(2) = TextBox2.Text
.Fields(3) = TextBox3.Text
.Fields(4) = TextBox4.Text
.Fields(5) = TextBox5.Text
End With
adoRecSet.Close
Set adoRecSet = Nothing
ConnDB.Close
Set ConnDB = Nothing
Я проверил несколько форумов и вопросов в Интернете, но все они связаны с типом курсора или типом блокировки, которые я правильно использовал в соответствии с этими решениями.
Кроме того, я нахожу странным, что он работает нормально для меня, но выдает ошибку, когда другой пользователь пытается вызвать тот же код.
EDIT1:
После дальнейшего анализа я думаю, что это ограничение доступа ms, и несколько пользователей не могут обновить таблицу, которую я создал напрямую. Однако это может быть возможно при использовании запросов.
Я создал запрос на вставку в доступе, но я не могу его выполнить.
`open_connection
cmd.ActiveConnection = ConnDB
Set fn = cmd.CreateParameter("FirstName", adVarWChar, adParamInput, 30, TextBox1.Text)
Set ln = cmd.CreateParameter("LastName", adVarChar, adParamInput, 30, TextBox2.Text)
Set age = cmd.CreateParameter("Age", adUnsignedTinyInt, adParamInput, , TextBox3.Text)
Set exp = cmd.CreateParameter("Experience", adUnsignedTinyInt, adParamInput, , TextBox4.Text)
Set tech = cmd.CreateParameter("Technology", adVarChar, adParamInput, 50, TextBox5.Text)
cmd.Parameters.Append fn
cmd.Parameters.Append ln
cmd.Parameters.Append age
cmd.Parameters.Append exp
cmd.Parameters.Append tech
strQuery = "InsertQuery"
adoRecSet.Open strQuery, ActiveConnection:=ConnDB, CursorType:=adOpenDynamic, LockType:=adLockOptimistic`
Выдает ошибку в операторе open, заявляя, что ожидает «INSERT», «UPDATE» и т. Д., Но не вызывает «InsertQuery», который я пытаюсь передать в качестве аргумента.