MS ACCESS VBA:将记录集名称中的不匹配错误输入到SQL语句中字符串
问题描述:
应该如何正确写入记录集的名称? & rsg &在“sq3 = ...”行处出现类型不匹配错误。提前致谢。MS ACCESS VBA:将记录集名称中的不匹配错误输入到SQL语句中字符串
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)
答
你在混合使用完全不同的方法来更新数据 - 更新SQL和VBA记录集。
如果您想通过行更新记录行,你这样做
Do While Not rsG.EOF
If rsG!foo = "bar" Then
rsG.Edit
rsG!gsede = "AA"
rsG.Update
End If
rsG.MoveNext
Loop
+0
谢谢,我知道。就像你说的,我原来的代码是循环的。所有的代码都是用vba recordset写的。但是我有这个想法:为什么不用sql update更改所有循环行? ... – Spiromer
答
不能混搭SQL和Recordset对象。您可以构建完整的更新语句,其中包含第一个选择的逻辑(如其他答案所示),或者可以打开动态记录集并以编程方式遍历记录以进行更新。这就是说,以编程方式循环执行大型记录集以进行更新通常可以通过批量SQL语句更好地处理,除非在代码中单独考虑每行是必不可少的 - 在基本示例中这不会是这种情况。
MS在DAO.Recordset object上有一篇很好的文章。有一个关于中途的动态类型的Recordset示例。
看起来您对问题有三个非常有用的答案。因为你对我来说还是个新手,所以我想我会指出,如果你向他们提供反馈,这对他人非常有用。通过点击向上箭头可以完成答案,并告诉他们他们的答案对你有用。我们都欣赏生活中的小事。如果你可以选择一个答案作为最好的检查它。更多的反馈意见,它有助于关闭问题。享受你的留下来... – dbmitch