Использование ADO для объединения и запроса текстовых файлов

Я просто предположил, что это можно сделать, но я начинаю задумываться. Во-первых, я замечаю, что он не будет использовать синтаксис, который я обычно использовал бы, даже с одной таблицей (просто пытаясь перейти к простейшему возможному синтаксису)

Select [file_name.txt].[fieldname] From [file_name.txt]

"не является допустимым именем - это ошибка, которую я получаю. Я мог бы просто удалить квалификатор имени файла из поля, и было бы хорошо, однако, когда я собираюсь присоединиться, мне обычно нужно использовать этот вид синтаксиса в соединительная часть:

Inner Join [file_name2.txt] On [file_name.txt].[fieldname]=[file_name2.txt].[fieldname]

в этом случае он выдаст ошибку "неправильный брекетинг [file_name.txt].[fieldname]"

Я не уверен, почему это проблема. Если я попытаюсь удалить здесь квалификаторы имени файла, я получу ошибку "выражение соединения не поддерживается".

Мой schema.ini выглядит так:

[file_name.txt]
Format=Delimited(|)
ColNameHeader=True

[file_name2.txt]
Format=Delimited(|)
ColNameHeader=True

Моя строка подключения:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Path"
;Extended Properties=""text;HDR=Yes"""

Поэтому мне интересно, если это вообще возможно.

1 ответ

Решение

Да. Это возможно, и это работает. Я был заинтригован вашим вопросом, поэтому сам попробовал. Драйвер текста не понимает скобки для имен полей, только для имени таблицы.

Поэтому используйте псевдонимы для имен полей, например:

Select tb1.[fieldname], tb2.[fieldname] From [file_name.txt] as tb1
Inner Join [file_name2.txt] as tb2
On tb1.[fieldname]=tb2.[fieldname]

Что сработало для меня:

SELECT tb1.[Month], tb2.[Year] FROM [Text;DATABASE=E:\].[MoneyAndCreditStats 0409 to 0417.csv] as tb1
 INNER JOIN  [Text;DATABASE=E:\].[StackaOverFlowTest.csv] as tb2 ON
tb2.[Month] = tb1.[Month] AND
tb1.[Year] = tb2.[Year]

Драйвер текста - это отличный инструмент, особенно при перемещении форматов / файлов данных в Business Intelligence.

Другие вопросы по тегам