我试图从表中删除记录,当我们在MS Access中有本地表但当我将其转换为链接表(通过SQL Server)时它会工作,那么它将通过一些错误。我到处寻找解决方案,但我最终发现如果我将此查询用作传递查询,我不会收到任何错误。
现在我的问题是如何在不首先创建传递查询的情况下执行此查询?
Dim db As DAO.Database
Set db = CurrentDb
Dim rsRUDelete As DAO.Recordset
Set rsRUDelete = db.OpenRecordset("SELECT * FROM table")
If rsRUDelete.AbsolutePosition > -1 Then
With rsRUDelete
.MoveFirst
Do Until .EOF
.Delete
.MoveNext
Loop
End With
End If
答案 0 :(得分:1)
您只需将查询保存为pass-though即可。因此,您可以构建如下的查询:
从faxbook3删除
因此,如果将上述内容保存为名为“MyPass”的传递查询
然后在VBA代码中,你去了:
Currentdb.querydefs("MyPass").Execute
如果你想动态创建SQL,或者说只删除一条记录,那么一旦你保存了上面的pass-though查询,你就可以像在运行中一样创建pass-though(t-sql)命令这样:
With currentdb.querydefs("MyPass")
.SQL = "delete from faxBook3 where ID = " & myVBAVairable
.EXECUTE
End with
因此不需要记录集,更糟糕的是,从pass-though查询创建的任何reocrdset都是只读的,因此不允许编辑或删除数据。
然而,没有必要编写所有代码并创建世界贫困,因为简单的删除查询在这里就足够了。