2011-11-14 3 views
1

これは私が解決策を持っていると奇妙な疑問に思えるかもしれません。単一のADOクエリを使用してテキストファイルのデータを別のODBCソースにコピーする

私は様々なソースからSQLにデータをコピーしており、C++ Builder XE2でADO接続を使用しています。

データは、コードは次のようになりMSACCESSのかMSExcelからである:

// SetupADO ..

ADOConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/temp/testdb.mdb"; 

//その後..

ADOConn->Connected = true; 

それを開きます// SQLを構築

UnicodeString sSQL = "SELECT * INTO [ODBC;DSN=PostgreSQL30;DATABASE=admin_db;SERVER=192.168.1.10;PORT=5432;UID=user1;PWD=pass1;SSLmode=disable;ReadOnly=0;Protocol=7.4;].[table1] FROM [accesstb]"; 

//そして最後に、私はADO接続

ADOConn->Execute(sSQL, iRA, TExecuteOptions() << TExecuteOption::eoExecuteNoRecords); 

これは、CSVファイルでは、あまりにもではなく、Excelの罰金作品のEXCEUTE()関数を使用します。私は同じドライバを使用しているにすぎないが、構文を変更することによってそれを動作させることができなければならない。

// SetupADO ..

ADOConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\temp;Extended Properties=\"Text;HDR=Yes;\";Persist Security Info=False"; 

//次に、それを開く。..

ADOConn->Connected = true; 

// INキーワードでSQLを構築し、2つの引用符で内部ODBC接続を開始

UnicodeString sSQL = "SELECT * INTO [table1] IN '' [ODBC;DSN=PostgreSQL30;DATABASE=admin_db;SERVER=192.168.1.10;PORT=5432;UID=user1;PWD=pass1;SSLmode=disable;ReadOnly=0;Protocol=7.4;] FROM [test.csv]"; 

//最後にEXCEUTE()もう一度

ADOConn->Execute(sSQL, iRA, TExecuteOptions() << TExecuteOption::eoExecuteNoRecords); 

Accessクエリと同じSQLを使用する場合、「クエリ入力には少なくとも1つのテーブルまたはクエリが含まれている必要があります」というエラーが返されます。 intrestingly、1つのエスケープされた見積もり、つまり\ 'は2つの単一のものの代わりに使用されると失敗します。 PGで問題があった場合に備えて、別のAccessデータベースに書き込むことも試みましたが、同じ結果が出ました。

誰かがINのキーワーキングが必要な理由とシングルクォートの動作を教えてもらえますか?

答えて

0

Extended Properties=\"Text;HDR=Yes;\"は、データソースとしてテキストを指定するため、接続文字列は異なります。 IN ''は、CSVにリレーショナルモデルがないため、table1をCSVファイルの最初の列にマップするようにデータベースに指示します。

参照

関連する問題