這似乎是一個奇怪的問題,因爲我有一個解決方案,我只是不明白爲什麼,這限制了我。使用單個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鍵功能是必需的和單引號做什麼?