Страницы: 1
RSS
Получить данные из текстового файла посредством SQL-запроса через VBA
 
Друзья, добрый день!
Как можно получить данные из текстового файла через SQL запрос из VBA (например всю таблицу Select * From Table)?
Погуглив, нашел, что это делается через recordset, но чтение теории не помогло, а примеры везде приводятся сильно усложненные.
Более-менее простой пример попробовал приспособить, но у меня ошибка на строчке Debug.Print rs.Fields("Город").Value.
Помогите, пожалуйста, максимально простым примером подключения к текстовому файлу (понимаю, что есть куча других способов получить данные, но здесь чисто образовательный интерес по этому способу, а не какая-то практическая задача)

Спасибо.
Найденный код
 
whateverlover, тут смотрели?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, смотрел, сразу не понял что да как, сейчас потыркался еще, вроде удалось добиться хоть чего-то.
Такой код применил.
Скрытый текст

Debug отказался выводить информацию, ну тут, наверное, я как то неверно обращаюсь к столбцу.
А вот вывод на лист сработал, но вывел какой-то ужас) почему так? где-то нужно указать кодировку текстового файла?
Скрытый текст

Но это уже что-то, начало положено) Спасибо.
Изменено: whateverlover - 23.07.2021 11:54:13
 
whateverlover, попробуйте что-то типа:
Код
rs.Charset = "windows-1251"
перед открытием файла (не проверял). Кодировку подберите сами.
Изменено: JayBhagavan - 23.07.2021 12:04:14

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
rs.Charset = "windows-1251"
Добрый день, Иван.
Это не поможет. Кодировка текстового файла UTF-8BOM. Не встречалось, чтобы access SQL драйвера для работы брали такую кодировку текстовых файлов. Лучше смотреть в сторону Power Query.
 
JayBhagavan, на эту строчку ругается, как-будто нет такого свойства Charset.
Код
CnnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=TabDelimited;CharSet=UTF-8'"

Вот так не ругается, но и кракозябры никуда не пропадают.
Андрей VG, т.е. от кракозябр не избавиться, получая информацию из файла именно таким способом? Повторюсь, что именно этот способ пытаюсь понять, понятно, что можно много как по-другому получить информацию из файла более просто.
Изменено: whateverlover - 23.07.2021 15:30:57
 
Код
CharacterSet=65001
 
Oleg Boyaroff, спасибо большое! Так сработало.
Код
CnnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=TabDelimited;CharacterSet=65001'"

Сейчас все красиво, кроме того, что разбивка идет не по точке с запятой, а просто по запятой. Почитал, пишут нужно что-то делать с файлом Schema.ini
Про файл этот подробно почитаю позже, а здесь в коде нигде не задается этот разделитель? Вот так "FMT=Delimited(;)") не помогло.
Страницы: 1
Наверх