
Возник такой вопрос. Сейчас делаю в программе функцию обновления справочника адресов из КЛАДР (классификатор адресов, распространяемый ГНИ).
Справочник представляет собой DBF-файлы с кодировкой CP1251 (Visual FoxPro). Нашел две строки подключения,
"Provider=vfpoledb.1;Data Source=<path>;Collating Sequence=general"
и
"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=<path>;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO".
Вначале использовал ODBC (т.к. OLEDB провайдер есть не на всех машинах, его устанавливать надо отдельно).
Все работало замечательно, асинхронность есть, кодировки не глючат, даже объединение таблиц есть (я объединяю элементы с базой сокращений, т.к. у меня используются свои собственные сокращения; т.е. я получаю полное наименование, а потом по нему уже ищу в своей таблице новое сокращение).
Проблема подкралась неожиданно.
В КЛАДР довольно дурацкая система кодирования. Т.е. есть 11-значный код для населенных пунктов, районов и областей и 15-значный код для улиц. При этом первые два разряда идентифицируют области, следующие 3 районы, следующие 3 города, следующие три населенные пункты (поселки и пр.) и последние четыре улицу. Т.е. если мне надо отобрать из всего списка только области, нужен такой фильтр:
CODE Like '__000000000'
или же
Mid$([CODE];2;9) = '000000000'
Так вот, ни один из этих вариантов не работает. Первый глючит с регулярными выражениями и всегда возвращает пустой рекордсет (пробовал и % и * и ?, без разницы). Второй тоже не работает, потому что ODBC-драйвер не знает таких функций, как Left$(), Mid$(), Right$().
После этого поставил OLEDB-провайдер. Но и тут засада. Запросы отрабатывают правильно, но теперь нет асинхронности. Т.е. запрос отрабатывает вроде бы асинхронно, но события не происходит вообще никакого. Скачал с сайта девятую версию, но в ней нет ни примеров, ни справки. Восьмая же версия не скачивается почему-то.