Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ADO Jet SQL抛出;FROM子句中的语法错误;总是_C++_Vba_Ado_Porting - Fatal编程技术网

C++ ADO Jet SQL抛出;FROM子句中的语法错误;总是

C++ ADO Jet SQL抛出;FROM子句中的语法错误;总是,c++,vba,ado,porting,C++,Vba,Ado,Porting,我有一个用VBA编写并在MS 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

我有一个用VBA编写并在MS 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子句中总是得到相同的语法错误

我试过了

从MSysObjects中选择MSysObjects.Name作为表_名称

从MSysObjects中选择*,其中Type=1,Flags=0

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

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

有什么想法吗?
谢谢

我通过添加一个命令对象来执行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驱动程序中的一个错误。

我通过添加一个命令对象来执行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驱动程序中的一个bug。

什么是数据源
test.aaf
?Access数据库以.mdb或.accdb结尾,需要数据源引用中的完整路径。如果这是另一个数据源,请确保您的SQL语法符合它。什么是数据源
test.aaf
?Access数据库以.mdb或.accdb结尾,需要数据源引用中的完整路径。如果这是另一个数据源,请确保SQL语法符合它。