我如何使用访问传递查询来访问sql sp

时间:2013-04-25 15:34:01

标签: ms-access

我有一个商店程序在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中无法选择查询?求助。

1 个答案:

答案 0 :(得分:3)

  

这是否意味着我无法在我的SP中选择查询?

不,错误消息告诉您Access认为您的查询是SELECT查询(或某种类型的返回记录的查询),并且您正在尝试.Execute它。 Access不喜欢这样,因为它认为您应该将返回的记录分配给Recordset

要在DAO中创建传递查询(PTQ),您必须

  • 将QueryDef的.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}}语句中添加引号。