DBF по ODBC

Как правило, настройка вывода по ODBC не вызывает трудностей. Современные СУБД хорошо документированы, коннектор ODBC сразу входит в пакет, или его легко найти на сайте производителя.
Все не так просто, если нужно организовать вывод в файлы формата DBF. В этой статье я расскажу, как побороть трудности на примере файла "calls.dbf", из одной популярной телефонной программы.
Итак, первым делом скачиваем драйвер (коннектор) для dbf файлов. На момент написания статьи он был доступен на сайте Microsoft.
В связи с прогрессирующим отказом от поддержки формата, не удивлюсь, если файл уберут, и вам придется искать VFPODBC.msi на подозрительных файлообменниках. На этот случай вот сумма md5:4fbb57a7efabde9925af86a239e5c93c
Установка проходит без проблем как на 32, так и на 64-битных системах.
Теперь настраиваем системный источник данных. Диспетчер можно найти в меню "Администрирование", а для 64-битной Windows по адресу %windir%\sysWOW64\odbcad32.exe
Добавление источника данных ODBC
На вкладке "Системный DSN" жмем "Добавить", выбираем Microsoft Visual FoxPro Driver, и нажимаем "Готово".
Откроется следующее окно:
Wintariff по ODBC
В поле Path пишем путь к каталогу, в котором находится файл calls.dbf. Затем следует нажать кнопку "Options" и убрать галочки "Null" и "Fetch data in background".
Переходим к настройке eSMDR. В ini-файле добавляем секцию:

[ODBC3]
enabled=1
dsn="wintariff"
table="calls"
fields="Date, co, extension, account, number, transfer, iduration, itime, ringbefore, callerid, callmode"
values="{^%Y.%M.%D}, '%C', '%E', '%c', IIF(%i=0,'%n','incoming '+'%t'), IIF('%c'='TR','*',''), %d, %h*3600+%m*60+%s, %r, IIF(%i<>0,'%n',''), '%c'"
Все. Если eSMDR запущена сервисом, не забываем перезапустить его, для применения изменений.
В заключение несколько слов о способах стыковки eSMDR и других программ. Самый простой путь - использование режима TCPOUT. В этом случае вам не нужно разбираться со структурами данных, которые использует программа. В этом режиме eSMDR имитирует АТС, а сторонняя программа читает данные и записывает в базу с помощью штатного модуля.
К сожалению, в процессе тестирования выяснилось, что некоторые такие модули работают с ошибками.
Если хотите получить непревзойденную надежность и высочайшую производительность - используйте ODBC.