通过查询不会从命令行运行

时间:2017-12-13 19:21:32

标签: vba ms-access

我在Access中创建了一个pass through查询。

它只是说。     sp_Submit''

如果我直接点击它,它会运行SSMS存储过程,它只会更改一些测试表。

但是,如果我在VBA中运行它不起作用。它没有错误或任何东西,它只是不起作用。

我试过了

sSQL = "sp_Submit '" & Me.cboNumber & "'"

 sSQL = "sp_Submit '"

请不要存储过程此时没有做任何事情。我测试了一些东西。它只删除一个表中的所有内容并将其插入另一个表中。

我做错了什么?我过去曾经使用过它并且它已经工作了,所以我不确定为什么它这次没有用。存储过程本身被设置为接受一个变量,但它实际上并没有对它做任何事情(然而。)。

谢谢。

1 个答案:

答案 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中查询“填充” - 并在整个应用程序中使用它。