Это может показаться странным вопросом, поскольку у меня есть решение, я просто не понимаю, почему и это ограничивает меня.
Я копирую данные из различных источников в SQL и использую соединение ADO в C ++ Builder XE2.
Когда данные получены из 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]";
// И, наконец, я использую функцию EXCEUTE () соединения ADO
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;
// Сборка SQL с ключевым словом IN и запуск внутреннего соединения 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);
При использованиитот же SQL, что и запрос Access, будет возвращена ошибка «Ввод запроса должен содержать хотя бы одну таблицу или запрос».Интересно, что одна экранированная кавычка, т.е. \ 'терпит неудачу, когда используется вместо двух одиночных.Я также попытался записать в другую базу данных Access на случай, если проблема была с PG, но у меня были те же результаты.
Может кто-нибудь сказать мне, почему требуется клавиатура IN и что делают одинарные кавычки?