我将前端用作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访问的限制,并且多个用户无法更新我直接创建的表。但是,可以通过使用查询来实现。 我已经在Access中创建了一个插入查询,但是无法执行它。 `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”。
答案 0 :(得分:0)
从VBA中执行SQL查询很容易,只需要执行以下操作...
strSQL = "Insert into table(col1, col2,
col3) values (" & Cells(X,X).Value & ", " & Cells(X1,X1) 'etc
Debug.Print strSQL
CurrentDb.Execute strSQL
请务必在执行之前清除所有要添加的变量
编辑:在我的一端进行复制,我一点都没有问题,所以我不确定在没有实际看到表定义的情况下还能得到多少帮助。我唯一能想到的就是表没有主键可能会引发一些奇怪的错误。