0
我正在把一个Excel前端与Access数据库放在一起,以便我的一些同事可以整理来自以前项目的数据(无需学习使用Access自己!)添加记录到Excel中的访问 - 记录集是只读
因此,我有一个Excel工作簿中的“数据”表,偶尔从数据库刷新,然后是一个“仪表板”表,允许过滤该数据。
我遇到麻烦的地方在于关闭循环 - 允许将新数据输入到数据库中。相关代码如下:
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得到一个错误,因为“无法更新,数据库或对象是ReadOnly”。 任何帮助表示赞赏。
您是否验证过您是否可以通过Access将记录添加到表中,或者数据库是否可能在其他位置设置为ReadOnly?另外,请尝试'rst.CursorLocation = adUseClient',因为Access始终在客户端上运行。这是我偶然发现的,因为我认为adUseServer可能会让你的RecordCount属性 –
哼。数据库目前在Access中以只读方式打开,因此我必须查看是否可以深入了解底层。谢谢吉米 –