我将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;。 任何帮助表示赞赏。
答案 0 :(得分:1)
所以,感谢Jimmy Smith的评论,我已经深究了这一点,或者至少解决了我眼前的问题。
当通过MS Access直接访问并使用VBA加载为Recordset时,表被视为ReadOnly,因为在同一个Excel工作簿中有一个指向该表的链接。
现在我已经删除了指向表的链接,而是通过代码更新其中的记录,我始终获得对相关表的请求访问级别,一切都按预期工作。是时候提交到Rubberduck并将其显示给用户群。