sql - 为什么 ms-access sql 传递在 VBA 中不起作用

标签 sql vba ms-access pass-through

我目前正在尝试在 Access 2016 中使用 VBA 编写选择传递查询。如果我通过“传递”按钮使用手动选项并手动分配 dsn,则以下语句有效。
manual pass through

从 dat_Kunden 中选择前 1 个 dat_Kunden.Kunden_Status

我想要传递的sql正在改变,所以我想创建一个VBA函数来执行它。

这是我当前执行给定sql语句的函数

Function CreateSPT(strSQL As String)

Dim qdf As DAO.QueryDef, rs As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;SERVER=xxx;DATABASE=yyy;UID=zzz"    'in the code this is the real data
qdf.SQL = strSQL
qdf.ReturnsRecords = True

Set rs = qdf.OpenRecordset()
If Not (rs.BOF And rs.EOF) Then rs.MoveFirst
    Do Until rs.EOF
        Debug.Print rs.Fields(0)
        rs.MoveNext
    Loop


rs.Close
Set rs = Nothing
Set qdf = Nothing

End Function

这确实有效。

Sub test_sql()
SQL = "SELECT CONVERT( date, GETDATE() ) AS qryTest"
CreateSPT (SQL)
End Sub

这条通过手动传递起作用的语句不起作用

Sub test_sql2()
SQL =  "SELECT top 1 dat_Kunden.Kunden_Status FROM dat_Kunden  AS qryTest"
CreateSPT (SQL)
End Sub

错误代码是运行时错误“3146”:ODBC -- 在此行调用失败:

Set rs = qdf.OpenRecordset()

我希望你知道我的错误在哪里......谢谢大家,从你们身上学到了很多东西!

最佳答案

如果您提供别名,请使用它:

SQL = "SELECT Top 1 qryTest.Kunden_Status FROM dat_Kunden AS qryTest"

或者忽略它:

SQL = "SELECT Top 1 Kunden_Status FROM dat_Kunden AS qryTest"

关于sql - 为什么 ms-access sql 传递在 VBA 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65664618/

相关文章:

vba - 有条件地检查 VBA 中的 XPath 是否正确

excel - 在VBA中获取表范围(动态)

ms-access - 微软 Access 2007 : Find Where a Form/Query/Report is Used

c++ - 如何使用 SQL 更新数据库 (MS Access .mdb) 中的数据

mysql - MySQL指定目标表错误

sql - 更改 MonetDB 中列的数据类型

vba - 宏未按预期循环工作簿

ms-access - MS Access : How to bypass/suppress an error?

sql - 从传递闭包表中寻找最不常见的祖先

sql - 选择所有至少具有带通​​配符支持功能的列表的行