尝试从excel2016向access2016表添加记录时发生错误

时间:2019-04-25 06:31:42

标签: excel vba ms-access

我将前端用作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”。

1 个答案:

答案 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

请务必在执行之前清除所有要添加的变量

编辑:在我的一端进行复制,我一点都没有问题,所以我不确定在没有实际看到表定义的情况下还能得到多少帮助。我唯一能想到的就是表没有主键可能会引发一些奇怪的错误。