【问题标题】:SQL query with restricted keyword in it causing query to not work带有受限关键字的 SQL 查询导致查询不起作用
【发布时间】:2017-04-19 18:58:18
【问题描述】:

我正在尝试通过 VBA 连接到 mdb 数据库。代码非常好。如果我在任何其他表上运行查询,它工作得非常好。但是当我使用表名“SpeedRestriction”时,查询不会返回任何行。我试过方括号,但它不起作用。我对数据库只有只读访问权限,因此无法更改预先存在的表名。该代码没有给出任何错误/异常。

有什么解决方法吗?以下是代码。

sPath = <Valid path>

Set conn = New ADODB.Connection
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & sPath


conn.Open strConnection

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient

sSql = "Select * from SpeedRestriction"

rs.Open sSql, conn, adOpenForwardOnly, adLockPessimistic, adCmdText

Debug.Print rs.EOF
Debug.Print rs.BOF

'XL_Ws_SpeedData.Range("A1").CopyFromRecordset rs
ThisWorkbook.Worksheets("Speed Data").Range("A1").CopyFromRecordset rs

Set rs = Nothing
conn.Close
Set conn = Nothing

【问题讨论】:

  • SpeedRestriction 不是关键字。 support.office.com/en-us/article/… 那么您确定要连接到具有 speedRestriction 数据的数据库实例吗?或者该表存在并且您没有收到错误?
  • 速度限制不是。但限制是。 sql可以区分吗?表中有 950 条记录。连接很好。当我在访问中运行查询时,它可以工作。但是在 VBA 中我没有得到记录,也没有得到任何错误。我尝试在查询中使用不同的表名运行相同的代码。它工作得很好。
  • 不,它无法区分。表名是 SpeedRestriction。所以其他事情正在发生。使用 debug.print 或复制/粘贴来获取并粘贴 sSQL,然后尝试运行它并且它可以工作?确保 SpeedRestriction 上没有拼写错误/错字
  • 也许您的表实际上命名为SpeedRestrictions?还是哪里有错别字?如果从 VBA 代码中复制查询并将其粘贴到 Access 中,它是否返回行? 你有什么错误吗?
  • 如果对表名有任何疑问,不要使用SQL打开(adCmdText),而是尝试按名称打开表(adCmdTable)。

标签: excel vba keyword reserved


【解决方案1】:

我解决了这个问题。 mdb 文件放置在与 vba 脚本不同的文件夹中(但它是本地笔记本电脑上的有效路径)。我将 .mdb 文件放在与 vba 脚本相同的文件夹中,并在脚本中相应地更改了路径。它运行得非常好。但我仍然无法理解如何获取其他表行,并且只有一个表出现问题。对我来说没有意义

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2017-05-09
    • 2016-11-30
    • 2013-10-10
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多