且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

“无效的SQL语句"尝试从Access执行SQL Server存储过程时发生错误

更新时间:2023-02-07 09:53:48

如果QueryDef没有有效的"ODBC;..."连接字符串作为其.Connect属性,您将收到该错误消息.这就是Access将QueryDef识别为传递查询的方式.

You will receive that error message if the QueryDef does not have a valid "ODBC;..." connection string as its .Connect property. That is how Access identifies the QueryDef as a pass-through query.

如果已经定义了ODBC链接表,则可以将其.Connect属性值用作QueryDef的.Connect属性,如下所示:

If you already have an ODBC linked table defined, you can use its .Connect property value for the .Connect property of the QueryDef, like so:

Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.CreateQueryDef("")
qdf.Connect = cdb.TableDefs("dbo_table1").Connect  ' grab .Connect string from linked table
qdf.sql = "exec [HS].[spGetXMLExtract]"
qdf.ReturnsRecords = False
qdf.Execute

...,或者,如果存储过程确实返回了结果集:

... or, if the stored procedure does in fact return a result set:

Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.CreateQueryDef("")
qdf.Connect = cdb.TableDefs("dbo_table1").Connect  ' grab .Connect string from linked table
qdf.sql = "exec [HS].[spGetXMLExtract]"
qdf.ReturnsRecords = True
Dim rst As DAO.Recordset
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
Do Until rst.EOF
    ' do stuff
    rst.MoveNext
Loop
rst.Close