我有一个商店程序在SQL中有4个参数,并希望在访问exec这个SP时建立一个applcation。
我有一个访问表单,其中有四个文本框,只需键入pass pass paramater和一个单击按钮,其代码如下
Private Sub Command13_Click()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Const c_strSQL As String = "EXEC sp_xCopy @CurCo={P1}, @CurNumber={P2}, @NewCo={P3}, @NewNumver={P4}"
Set dbs = CurrentDb Set qdf = dbs.QueryDefs("QueryCopyVendor")
strSQL = Replace(c_strSQL, "{P1}", "Forms!CopyVendor!CurCo")
strSQL = Replace(strSQL, "{P2}", "Forms!CopyVendor!CurNumber")
strSQL = Replace(strSQL, "{P3}", "Forms!CopyVendor!NewCo")
strSQL = Replace(strSQL, "{P4}", "Forms!CopyVendor!NewNumber")
qdf.SQL = strSQL
qdf.Execute
Set qdf = Nothing
Set dbs = Nothing
End Sub
但是当我提交时,我得到了同样的错误:
run_time错误'3065' 无法执行选择查询
这是否意味着我的SP中无法选择查询?求助。
答案 0 :(得分:3)
这是否意味着我无法在我的SP中选择查询?
不,错误消息告诉您Access认为您的查询是SELECT查询(或某种类型的返回记录的查询),并且您正在尝试.Execute
它。 Access不喜欢这样,因为它认为您应该将返回的记录分配给Recordset
。
要在DAO中创建传递查询(PTQ),您必须
.Connect
属性设置为至少ODBC;
和.ReturnsRecords
属性未返回行集,则将False
属性设置为Sub CreatePTQ()
Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("ptq")
qdf.Connect = "ODBC;"
qdf.ReturnsRecords = False
qdf.SQL = "EXEC foo"
qdf.Close
Set qdf = Nothing
Set cdb = Nothing
End Sub
以下是创建PTQ的简单代码:
strSQL = Replace(c_strSQL, "{P1}", "Forms!CopyVendor!CurCo")
此外,在您的代码中,您将使用表单控件的名称替换占位符,例如......
strSQL = Replace(c_strSQL, "{P1}", Forms!CopyVendor!CurCo)
...当您应该使用控件'值 ...
替换这些占位符时EXEC
...并且请记住,如果任何参数是字符串,那么您需要在{{1}}语句中添加引号。