我在SQL中有一个有4个参数的存储过程,想在access中建立一个应用程序来执行这个SP。
我有一个access表单,它有四个文本框,只需简单地键入传递参数和一个按钮来单击,它的代码如下
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”无法执行select查询
这是否意味着我的SP中不能有select查询?请帮帮忙。
发布于 2013-04-26 00:00:02
这是否意味着我的SP中不能有select查询?
不,错误消息告诉您,Access认为您的查询是SELECT查询(或返回记录的某种类型的查询),而您正在尝试对其执行.Execute操作。Access不喜欢这样,因为它认为您应该将返回的记录分配给一个Recordset。
要在DAO中创建传递查询(PTQ),您必须
.Connect属性至少设置为ODBC;,如果.ReturnsRecords ,则将该属性设置为False
下面是创建PTQ的基本代码:
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此外,在您的代码中,您将用表单控件的名称替换占位符,例如...
strSQL = Replace(c_strSQL, "{P1}", "Forms!CopyVendor!CurCo")...when您应该用控件的值替换这些占位符...
strSQL = Replace(c_strSQL, "{P1}", Forms!CopyVendor!CurCo)...and请记住,如果有任何参数是字符串,则需要在EXEC语句中用引号将它们引起来。
https://stackoverflow.com/questions/16218953
复制相似问题