gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:27 25 4
gpt4 key购买 nike

我有一个用 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);

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

我试过了

SELECT MSysObjects.Name AS table_name FROM MSysObjects;

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

从 DUAL 中选择“ASDF”作为测试;

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

有什么想法吗?谢谢!

最佳答案

我通过添加一个 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 驱动程序中的错误。

关于c++ - ADO Jet SQL 总是抛出 "Syntax Error in FROM Clause",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com