2011-11-14 27 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; 

// Build 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); 

這爲Excel工作也沒關係但不適用於CSV文件的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; 

//生成SQL與IN關鍵字,並開始與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時,將返回錯誤「查詢輸入必須包含至少一個表或查詢」。 有趣的是,一個逃脫的引號,即'用於代替2個單引號時失敗。我也嘗試寫入另一個Access數據庫,以防PG出現問題,但我得到了相同的結果。

有人可以告訴我爲什麼IN鍵功能是必需的和單引號做什麼?

回答

相關問題