如何正确编写记录集的名称?我在 &上遇到类型不匹配错误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)
答案 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示例。