从Excel添加记录到Access - 记录集是ReadOnly

时间:2016-10-11 15:29:18

标签: excel-vba access-vba vba excel

我将Excel前端与Access数据库放在一起,以便我的一些同事可以整理以前项目中的数据(无需学习自己使用Access!)

所以我有一个"数据" Excel工作簿中的工作表偶尔会从数据库刷新,然后是" Dashboard"允许过滤该数据的工作表。

我遇到麻烦的地方是关闭循环 - 允许将新数据输入数据库。相关代码如下:

Private Sub btnDBImport_Click()

Dim rst As ADODB.Recordset
Dim errorList As String 

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
    .Provider = "Microsoft.ACE.OLEDB.16.0"
    .ConnectionString = "\\FileAddress\DB.accdb"
    .Open
End With

Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open Source:="TableName", _
         ActiveConnection:=cn, _
         CursorType:=adOpenDynamic, _
         LockType:=adLockOptimistic, _
         Options:=adCmdTableDirect


    If validationTest = False Then
        errorList = errorList & "Data at row " & i & " was not added to the database due to missing information." & vbCrLf
    Else
        rst.AddNew
        With rst
            .Fields(1) = Value1
            .Fields(2) = Value2
        End With
        rst.Update
    End If

Next i

If errorList <> "" Then
    MsgBox errorList, vbOKOnly, "Data error"
End If

rst.Close
Set rst = Nothing
cn.Close
Set cn = Nothing

End Sub

以上是定义,打开和处理记录集所涉及的所有内容;我在rst.AddNew收到错误,因为&#34;无法更新,数据库或对象是ReadOnly&#34;。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

所以,感谢Jimmy Smith的评论,我已经深究了这一点,或者至少解决了我眼前的问题。

当通过MS Access直接访问并使用VBA加载为Recordset时,表被视为ReadOnly,因为在同一个Excel工作簿中有一个指向该表的链接。

现在我已经删除了指向表的链接,而是通过代码更新其中的记录,我始终获得对相关表的请求访问级别,一切都按预期工作。是时候提交到Rubberduck并将其显示给用户群。