Старый добрый ODBC как прокладка для 1С из-под Wine в Linux

В 90-е, когда IT-специалисты получили возможность легко обмениваться информацией благодаря Интернету, мир пребывал в эйфории. Еще бы, столько полезных концепций ринулись в общий котел, превращаясь на глазах в могущественный сплав, позволявший решить (как тогда казалось) любые проблемы. Вот и реляционные базы данных повыползли из полузакрытых корпоративных лабораторий и превратились в повседневное средство решения программистских проблем. Только вот баз данных много, форматы данных и соединений с ними у всех производителей разные… В воздухе витала идея о том, что хорошо бы сделать нечто, позволяющее абстрагироваться от частностей и обращаться к любым базам данных одинаковым способом. Ведь в конечном итоге все они поддерживают SQL-запросы.

И тут самое время вспомнить цитату из "Компьютерной Библии": «Билл был хитрее всех зверей полевых»…

Да, именно Microsoft первой внедрила в свою ОС концепцию ODBC — универсального способа связи с базами данных, когда настроив один раз доступ к источнику данных и запомнив его имя, программист может сосредоточиться на работе именно с данными, а не въезжать в особенности той или иной платформы. Тут справедливости ради нужно сказать, что даже Sun выпустила аналогичный стандарт — JDBC — несколько позднее. Как говорится, не всё то «не золото», что Microsoft.

Со временем поклонники Linux тоже захотели обзавестись таким удобным механизмом. Так появился проект unixODBC, который и по сей день себя неплохо чувствует. Я этот проект знаю примерно с 2001 года и до сих пор этим механизмом пользуются многие разработчики, хотя к настоящему времени появилась масса альтернатив (ADO, например).

К чему весь этот высокохудожественный исторический экскурс? Да к тому, что сейчас, когда приложения для Windows активно переносятся на Linux, ODBC может стать «прокладкой», через которую, например, программа 1С может синхронизировать свои данные с какой-то другой, производственной базой данных, причем в реальном времени: внесли изменения в форму 1С — они сразу же попали в другую базу (добавились или обновились).

Особенно приятно то, что Wine умеет представлять Windows-приложениям юниксовый ODBC как виндовый, так что никакой дополнительный огород городить не надо. Итак, как настроить ODBC на Linux-компьютере, на котором через Wine будет запускаться, скажем, 1С и обращаться через ODBC к другим базам.

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

./configure ; make ; make install

разве что архив нужно распаковывать «по-старинному»:

gunzip unixODBC*.tar.gz
tar xvf unixODBC*.tar

а то MC его раскрывать отказался.

Затем нужно установить ODBC-драйвер для нужной базы данных. Возьмем для примера тот же PostgreSQL. Его ODBC-драйвер можно взять здесь. Собирается и устанавливается всё так же:
./configure ; make ; make install


Итак, платформа готова. Нужно соединиться с конкретной базой данных, точнее говоря настроить один раз соединение (логин, пароль, хост и т.п.), чтобы потом к нему обращаться просто по имени. У ODBC есть общесистемные настройки и пользовательские. Имена файлов, в которых они хранятся, разнятся от системы к системе. Чтобы их выяснить нужно ввести команду:

odbcinst -j

Её вывод будет примерно таким:

unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /home/belka/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2


Нас интересует здесь /usr/local/etc/odbcinst.ini, где прописываются имеющиеся драйвера, и /home/username/.odbc.ini, где лежат настройки для баз, с которыми дозволено соединяться пользователю. Неплохое руководство по настройке ini-файлов находится здесь. Пример файла odbcinst.ini:

[PostgreSQL]
Driver=/usr/lib/psqlodbcw.so
Description=Slonyatko
UsageCount=1


Пример файла ~/.odbc.ini

[PupkinsData]
Debug=1
CommLog=1
ReadOnly=no
Driver=PostgreSQL
Servername=127.0.0.1
FetchBufferSize=99
Username=pupkin
Password=neskazu
Port=5432
Database=pupkinsdatadase


Всё, можно пользоваться. Для проверки прилагается утилита isql:

bash-4.1$ isql PupkinsData
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select id from pupkinfrends;
+------------+
| id         |
+------------+
| 10087      |
| 10007      |
| 10075      |
| 10024      |
| 10092      |


Теперь попробуем убедиться, что ODBC работает из-под Wine. Для этого скачаем проверочную программку TestConn. Распакуем и запустим ее под Wine:

wine TectConn



Как видите, Windows-программа видит соединение с базой данных, установленное через связку Wine/Linux/ODBC.

«А дальше? Как писать обработки для 1С, использующие такое соединение?», — спросит иной йуный падаван. А дальше, ребятушки, бубен вам в руки — и вперед, на танки с саперными лопатками. Я, чай, всё описанное тоже не во сне увидел.
  • +6
  • 02 сентября 2010, 15:59
  • yababay

Комментарии (3)

RSS свернуть / развернуть
+
0
Вот это мощнейший топик!
Буду ставить!
avatar

Sergei_T

  • 02 сентября 2010, 20:12
+
0
Чуть подправил название и теги для лучшего индексирования)
avatar

Sergei_T

  • 02 сентября 2010, 20:14
+
0
Очeнь актуально !
avatar

Markony

  • 04 сентября 2010, 17:50

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.