我在Access中创建了一个pass through查询。
它只是说。 sp_Submit''
如果我直接点击它,它会运行SSMS存储过程,它只会更改一些测试表。
但是,如果我在VBA中运行它不起作用。它没有错误或任何东西,它只是不起作用。
我试过了
sSQL = "sp_Submit '" & Me.cboNumber & "'"
和
sSQL = "sp_Submit '"
请不要存储过程此时没有做任何事情。我测试了一些东西。它只删除一个表中的所有内容并将其插入另一个表中。
我做错了什么?我过去曾经使用过它并且它已经工作了,所以我不确定为什么它这次没有用。存储过程本身被设置为接受一个变量,但它实际上并没有对它做任何事情(然而。)。
谢谢。
答案 0 :(得分:0)
鉴于你所拥有的东西,你应该能够用
编辑保存的通过查询Sp_Submit 'test'
假设1个参数是文本。如果参数是一个数字,那么
Sp_Submit 123
此时,您必须保存该查询。现在点击它,它是否正确运行?
而不是点击查询,你当然可以
CurrentDB.execute "name of saved query goes here"
但是,请记住,PT查询是原始T-SQL。执行的内容在服务器上100%运行。这意味着此类查询不能包含对任何表单或其他任何内容的引用。因此,您必须“预处理”或创建您希望传递的值并修改PT查询。因此,您创建SQL的代码看起来是正确的,但您必须使用该sql字符串并“设置”PT查询。
最简单的方法是使用以下代码:
With CurrentDb.QueryDefs("MyPass")
.SQL = "sp_Submit '" & Me.cboNumber & "'"
.Execute
End With
当然,如果PT查询返回记录,那么你会去:
Dim rstRecords As DAO.Recordset
With CurrentDb.QueryDefs("MyPass")
.SQL = "sp_Submit '" & Me.cboNumber & "'"
.ReturnsRecords = True
Set rstRecords = .OpenRecordset
End With
公平地说,你可能应该在第一个例子中设置“returns”records = false。您可以在保存查询的属性表中执行此操作,也可以使用以下代码执行此操作:
With CurrentDb.QueryDefs("MyPass")
.SQL = "sp_Submit '" & Me.cboNumber & "'"
.ReturnsRecords = False
.Execute
End With
请注意,您可以在代码中反复使用一个PT查询。因此,一旦您停止了一个PT查询,那么您可以使用它来传递您希望的任何新sql,例如:
Dim rstRecords As DAO.Recordset
With CurrentDb.QueryDefs("MyPass")
.SQL = "select * from tblHotels"
.ReturnsRecords = True
Set rstRecords = .OpenRecordset
End With
所以你可以在任何你想要的sql中查询“填充” - 并在整个应用程序中使用它。