Использование одного запроса ADO для копирования данных из текстового файла в другой источник ODBC - PullRequest
1 голос
/ 14 ноября 2011

Это может показаться странным вопросом, поскольку у меня есть решение, я просто не понимаю, почему и это ограничивает меня.

Я копирую данные из различных источников в 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 и что делают одинарные кавычки?

1 Ответ

0 голосов
/ 29 августа 2012

Extended Properties=\"Text;HDR=Yes;\" определяет текст в качестве источника данных, поэтому строка подключения отличается. IN '' указывает базе данных сопоставить table1 с первым столбцом файла CSV, поскольку в CSV нет реляционной модели.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...