首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用access传递查询来访问sql sp?

如何使用access传递查询来访问sql sp?
EN

Stack Overflow用户
提问于 2013-04-25 23:34:01
回答 1查看 2K关注 0票数 1

我在SQL中有一个有4个参数的存储过程,想在access中建立一个应用程序来执行这个SP。

我有一个access表单,它有四个文本框,只需简单地键入传递参数和一个按钮来单击,它的代码如下

代码语言:javascript
复制
  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查询?请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 00:00:02

这是否意味着我的SP中不能有select查询?

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

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

  • 将QueryDef的.Connect属性至少设置为ODBC;,如果
  • 未返回行集.ReturnsRecords

,则将该属性设置为False

下面是创建PTQ的基本代码:

代码语言:javascript
复制
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

此外,在您的代码中,您将用表单控件的名称替换占位符,例如...

代码语言:javascript
复制
strSQL = Replace(c_strSQL, "{P1}", "Forms!CopyVendor!CurCo")

...when您应该用控件的值替换这些占位符...

代码语言:javascript
复制
strSQL = Replace(c_strSQL, "{P1}", Forms!CopyVendor!CurCo)

...and请记住,如果有任何参数是字符串,则需要在EXEC语句中用引号将它们引起来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16218953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档