Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试从excel2016向access2016表添加记录时出错_Excel_Vba_Ms Access - Fatal编程技术网

尝试从excel2016向access2016表添加记录时出错

尝试从excel2016向access2016表添加记录时出错,excel,vba,ms-access,Excel,Vba,Ms Access,我使用的前端是Excel2016,后端是Access2016。这是供多个用户用于数据输入的共享文件 当我尝试添加一条记录时,它被添加得很好,但是当另一个用户尝试添加一条记录时,会遇到错误(当前记录集不支持更新。这可能是提供程序或所选锁类型的限制) 每次读/写代码后,我都会打开和关闭连接,以便多个用户可以输入数据 以下是我目前的代码: strPath = ActiveWorkbook.Path strDBName = "Test Excel Access.accdb" strDB = strPat

我使用的前端是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中创建了一个insert查询,但无法执行它。 `开放式连接

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”。

从VBA执行SQL查询很容易,只需执行如下操作

    strSQL = "Insert into table(col1, col2, 
    col3) values (" & Cells(X,X).Value & ", " & Cells(X1,X1) 'etc
    Debug.Print strSQL
    CurrentDb.Execute strSQL
只需确保在执行之前清除所有要添加的变量


编辑:在我这方面复制它我一点问题都没有,所以我不确定在没有实际查看表定义等的情况下我还能提供多少帮助。我唯一能想到的是,如果表没有主键,它可能会抛出一些奇怪的错误。

从VBA执行SQL查询很容易,只需要做类似的事情

    strSQL = "Insert into table(col1, col2, 
    col3) values (" & Cells(X,X).Value & ", " & Cells(X1,X1) 'etc
    Debug.Print strSQL
    CurrentDb.Execute strSQL
只需确保在执行之前清除所有要添加的变量


编辑:在我这方面复制这一点我没有任何问题,所以我不确定在没有实际查看表定义等的情况下我还能提供多少帮助。我唯一能想到的是,如果表没有主键,它可能会抛出一些奇怪的错误。

欢迎使用。您是否尝试过在sql语句中插入而不是使用Recordset.AddNew?@FoxfireAndBurnsAndBurns我尝试过,但失败了。。用EDIT1更新了原始帖子,请看一看,如果你能找到错误的原因,请告诉我…欢迎访问SO。您是否尝试过在sql语句中插入而不是使用Recordset.AddNew?@FoxfireAndBurnsAndBurns我尝试过,但失败了。。用EDIT1更新了原始帖子,请看一看,让我知道你是否能找到错误的原因…嗨,我试过了,但再次对我运行良好,但对其他用户失败,说明查询应该是可更新的。嗨,我试过了,但再次对我运行良好,但对其他用户失败,说明查询应该是可更新的。