操作必须使用可更新的查询/ SQL - VBA

时间:2013-08-05 12:04:20

标签: sql vba ms-access excel-vba access-vba

我正在尝试创建一个非常动态的宏,它将根据用户选择的内容更新数据库中的不同表。每个表当然都有不同的标题和信息。我遇到了更新问题(当用户将新记录添加到旧表时)。这是代码的一部分,问题是当它到达“.update”时,我得到“操作必须使用可更新查询”错误。

Dim DBCnn As ADODB.Connection
Dim RecSet As ADODB.Recordset
Dim sQRY As String
Dim FilePath, Titulo, Tabla As String
Dim LastRow, LastColumn, TotalRecords, Id As Long

Set DBCnn = New ADODB.Connection
Set RecSet = New ADODB.Recordset
DBCnn.Mode = adModeReadWrite
DBCnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FilePath & ";"

sQRY = "SELECT * FROM Customers" & Tabla ' & " WHERE PopID = " & lngid

RecSet.CursorLocation = adUseClient
RecSet.Open _
    Source:=sQRY, _
    ActiveConnection:=DBCnn, _
    CursorType:=adOpenDynaset, _
    LockType:=adLockOptimistic


Do While Range("A" & LastRow).Value <> ""
' repeat until first empty cell in column A
With RecSet
    .AddNew
    .Fields("Id") = Range("A" & LastRow).Value
    .Fields("Name") = Range("B" & LastRow).Text
    .Fields("Age") = Range("C" & LastRow).Value
    .Update '(Here's my error)
End With
LastRow = LastRow + 1
Loop

2 个答案:

答案 0 :(得分:1)

弃掉这一行:

RecSet.CursorLocation = adUseClient

或者尝试这样:

RecSet.CursorLocation = adUseServer

请参阅MSDN上CursorLocation Property (ADO)处的备注部分:

“如果 CursorLocation 属性设置为 adUseClient ,则记录集将以只读方式访问,并且无法对主机进行记录集更新。 “

答案 1 :(得分:0)

你在这里连接一个字符串 - “SELECT * FROM Customers”&amp; Tabla,但我没看到Tabla在哪里提供。

您是否尝试直接在Access中运行查询?
另外,你尝试过更改cursortype吗?        http://www.w3schools.com/ado/prop_rs_cursortype.asp