【问题标题】:Why does an ms-access sql Pass Through not work in VBA为什么 ms-access sql Pass Through 在 VBA 中不起作用
【发布时间】:2021-04-16 06:19:20
【问题描述】:

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

SELECT top 1 dat_Kunden.Kunden_Status FROM dat_Kunden

我要传递的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 -- call failed at this line:

Set rs = qdf.OpenRecordset()

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

【问题讨论】:

  • 为什么图片的字段名表前缀有000402,而你叙述的SQL语句没有?而且 VBA 构造的字符串在任何地方都没有。
  • 这是我忽略的误导性错误。带有和不带有数字的表都存在并且具有相同的结构。我会编辑它。谢谢!

标签: sql vba ms-access pass-through


【解决方案1】:

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

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

或忽略它:

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

【讨论】:

  • 两者都没有工作,但省略了 AS qryTest 工作。谢谢!
猜你喜欢
  • 2018-02-13
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2012-12-12
  • 2012-08-05
  • 1970-01-01
相关资源
最近更新 更多