MS ACCESS VBA:将记录集名称中的不匹配错误输入到SQL语句字符串中

时间:2016-08-06 12:46:58

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

如何正确编写记录集的名称?我在 &上遇到类型不匹配错误rsg& at" sq3 = ..."线。提前谢谢。

Dim rsG As DAO.Recordset
Dim sq2, sq3 As String

sq2 = "SELECT * from GeneralTable "
sq2 = sq2 & "where gsede='LION' and (gExclu is null) and (gAda is  null) "
sq2 = sq2 & "order by gnomb,gnif;"

Set rsG = CurrentDb.OpenRecordset(sq2)

sq3 = "UPDATE " & rsG & " SET gsede ='AA' WHERE gsede='LION'"

DoCmd.RunSQL (sq3)

3 个答案:

答案 0 :(得分:3)

您正在以完全不同的方式混合更新数据 - UPDATE SQL和VBA记录集。

如果要逐行更新记录集,可以执行类似

的操作
Do While Not rsG.EOF
    If rsG!foo = "bar" Then
        rsG.Edit
        rsG!gsede = "AA"
        rsG.Update
    End If
    rsG.MoveNext
Loop

答案 1 :(得分:2)

使用单个查询进行更新:

update generaltable
    set gsede = 'AA'
    where gsede ='LION' and (gExclu is null) and (gAda is  null);

如果您从rsG开始更新,那么您可能会为每一行单独执行update,这样效率很低。

答案 2 :(得分:2)

您无法混合和匹配SQL和记录集对象。您可以构建包含第一个选择逻辑的完整更新语句(如其他答案所示),也可以打开动态记录集并以编程方式循环记录以进行更新。

话虽这么说,以编程方式循环遍历大型记录集以进行更新通常可以通过批量SQL语句更好地处理,除非必须在代码中单独考虑每一行 - 在基本示例中不是这种情况。

MS在DAO.Recordset object上有一篇很好的文章。有一个关于中途的动态类型Recordset示例。