使用单个ADO查询将数据从文本文件复制到另一个ODBC源

时间:2011-11-14 15:55:19

标签: c++ csv odbc oledb ado

这似乎是一个奇怪的问题,因为我有一个解决方案,我只是不明白为什么,这限制了我。

我正在将各种来源的数据复制到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 Connection的EXCEUTE()函数

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

这也适用于Excel,但不适用于CSV文件。我使用相同的驱动程序必须只能通过更改语法来使其工作。

// 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时,将返回错误“查询输入必须包含至少一个表或查询”。 有趣的是,一个逃脱的引用,即当用于代替2个单引号时失败。我也尝试写过另一个Access数据库,以防PG出现问题,但结果相同。

有人可以告诉我为什么需要IN键工作以及单引号是做什么的?

1 个答案:

答案 0 :(得分:0)

Extended Properties=\"Text;HDR=Yes;\"指定text作为数据源,因此连接字符串不同。 IN ''告诉数据库将table1映射到CSV文件的第一列,因为CSV中没有关系模型。

<强>参考