【发布时间】: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