Использование 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.