ADO Jet SQL 总是抛出"Syntax Error in FROM Clause"

ADO Jet SQL Throws "Syntax Error in FROM Clause" Always

本文关键字:Syntax Error FROM Clause in SQL Jet ADO      更新时间:2023-10-16

我有一个现有的程序写在VBA和MS Access内运行。出于各种原因,我们希望将其从Access中取出并制作一个独立的程序。

因此,我将VBA移植到c++。下面的代码在VBA

中工作
Dim DataFile As New ADODB.Connection
Dim rstSrc As New ADODB.Recordset
DataFile.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.aaf;"
rstSrc.Open "SELECT * FROM [Headr];", DataFile, adOpenStatic, adLockReadOnly

我的代码移植到c++下面不工作。每次都给出"FROM子句语法错误"的错误。

_RecordsetPtr RS("ADODB.Recordset");
_ConnectionPtr CON("ADODB.Connection");
CON->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.aaf;","","",adConnectUnspecified);
RS->PutRefActiveConnection( CON );
RS->Open("SELECT * FROM [Headr];",vtMissing,adOpenStatic,adLockReadOnly,adCmdTable);

我怀疑[header]是问题所在,也许这是某种宏,只能在Access环境中展开。所以我尝试了一些其他的SQL语句,只是作为一个测试,总是得到相同的语法错误在FROM子句。

我试着

选择MSysObjects。

FROM MSysObjects

SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0;

SELECT 'ASDF' AS TEST FROM DUAL;

所有这些都给出了相同的错误。

任何想法?谢谢!

我通过添加一个Command对象来执行SELECT查询来解决这个问题。下面的代码可以工作:

_RecordsetPtr RS("ADODB.Recordset");
_ConnectionPtr CON("ADODB.Connection");
_CommandPtr CMD("ADODB.Command");
CON->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.aaf;","","",adConnectUnspecified);
CMD->ActiveConnection = CON;
CMD->CommandText = "SELECT * FROM [Headr];";
RS = CMD->Execute(NULL,NULL,0);

这和我之前所做的没有本质上的区别。它们应该都能很好地工作,只是语义略有不同。但在现实中,这是有效的,而前者不起作用。所以我认为这是Jet OBDC驱动程序中的错误。