2016-06-27 67 views
1

VBAで作成され、MS Accessの内部で実行されている既存のプログラムがあります。さまざまな理由から、私たちはAccessから取り出して独立したプログラムを作りたいと考えています。ADO Jet SQLで「FROM句の構文エラー」が発生する

私は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]多分それが唯一のアクセス環境に展開されるマクロのいくつかの種類だったこと、問題だったことsupsiciousました。だから私は他のいくつかのSQL文をテストのように試してみましたが、FROM節には常に同じ構文エラーがあります。

私はMSysObjects FROM table_nameのAS

SELECT MSysObjects.Nameを試してみました。

SELECT * FROM MSysObjects WHEREタイプ= 1 ANDフラグ= 0;

SELECT 'ASDF' AS TEST FROM DUAL;

これらのすべてで同じエラーが発生しました。

アイデア? ありがとう!

+0

データソース 'test.aaf'とは何ですか? Accessデータベースは.mdbまたは.accdbで終わり、データソース参照ではフルパスが必要です。これが別のデータソースである場合は、SQL構文がそれに準拠していることを確認してください。 – Parfait

答えて

0

問題を解決するには、SELECTクエリを実行するCommandオブジェクトを追加します。次のコードが動作します。

_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); 

これと前に行っていたこととは基本的に違いはありません。彼らはどちらも同じようにうまく働くべきであり、ほんのわずかに異なるセマンティクスである必要があります。しかし、実際にはこれは機能し、前者は機能しません。だから私はジェットOBDCドライバのバグだと思います。

関連する問題