MiniM Overview |
MiniM
Additional Tools | Feb 19, 2010 ZDLL для доступа из MiniM к внешним ODBC источникам 1. ИНСТАЛЯЦИЯ 1.1. Скопируйте файл zodbc.dll в директорию, куда установлен MINIM. Например: copy zodbc.zdll c:\minim\bin\ 1.2. Если у вас в поставке есть исходный текст zodbc.c и вы его модифицировали, то рекомендую собирать его компилятором Borland 5.5+ (free версия) 1.3. После сборки dll модуля см. пп.1. Пример строки сборки (при условии , что bcc32 прописан в путях, и инсталлирован в директорию c:\bin\bcc\): bcc32.exe -M -O2 -K -tWM -tWD -N -Ic:\bin\bcc\include -Lc:\bin\bcc\lib -Lc:\bin\bcc\Lib\PSDK zodbc.c odbc32.lib 2. СОЗДАНИЕ ОДБС СОЕДИНЕНИЯ (DSN) 2.1. Классический вариант создания ОДБС соединения: Пуск/Настройка/Панель управления/Администрирование/Источники данных (ОДБС). Если вы выберете "Пользовательский DSN", то доступ формируется только для вашей учетки (например только с использованием minim-console), если "Системный DSN", то для всех пользователей соединение будет доступно. В качестве примера, поставляется файл bnkseek.dbf имеющий несколько записей, создайте для него DSN "NSI_KO": 2.2. Выбираем драйвер Microsoft dBase Driver (*.dbf) ![]() 2.3. Выбрали название источника данных "NSI_KO" ![]() 2.4. Выбрали путь, где расположен файл bnkseek.dbf и утвердили его: ![]() Ссылка на данный источник будет в дальнейшем для описания примера M-Api/Zodbc. 3. СТРУКТУРА М-ПРИЛОЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ ZODBC Программа, обращающаяся к базам данных посредством интерфейса ZODBC, должна выполнить следующие действия:
4. ПОДКЛЮЧЕНИЕ К ИСТОЧНИКУ ДАННЫХ Прежде чем открыть соединения, выполните загрузку zdll модуля в routine: w $zdll("load","zodbc.dll") Открываем соединение, в дальнейшем переменная dsn будет использоваться как ссылка на данное соединение NSI_KO: s dsn=$zdll("call","zodbc.dll","open","DSN=NSI_KO") Если потребуется передать имя пользователя и пароль, необходимо использовать переменные USR,PWD, пример: s dsn=$zdll("call","zodbc.dll","open", "DSN=ORACLE;USR=JOIN;PWD=TIGER") 5. ВЫПОЛНЕНИЕ КОМАНД SQL Итак, получив ссылку на соединение (в случае чего ошибки перехватывайте самостоятельно $zt,$et, читайте раздел обработки ошибок в MINIM) мы можем выполнять различные операции . К примеру, мы получим выборку общего числа записей в таблице bnkseek: s rс=$zdll("call","zodbc.dll","exec",dsn, "select count(*) as COUNT from bnkseek") Само количество записей нам пока неизвестно, пока мы только узнаем результат удачно или нет, выполнился запрос (rс=0), некоторые запросы могут выполнятся достаточно длительно время. Чтобы определить, что же мы получили воспользуемся следующей выборкой, получим кол-во колонок и значения атрибутов в ответе: s ncol=$zdll("call","zodbc.dll","colnums",dsn) и следом выберем нужные нам атрибуты ответа: f i=1:1:ncol d . w ! . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"name") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"size") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"length") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"precision") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"scale") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"type") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"typename") w at," " . s at=$zdll("call","zodbc.dll","colattributes",dsn,i,"table") w atВ общем случае доступны следующие атрибуты:
6. ВЫБОРКА ДАННЫХ Выборка записей, организуем цикл через for и с проверкой возвращаемого значения от функции fetch , сами данные возвращаются по каждому столбцу функцией coldata, fetch так же выполняет переход к следующей записи (движение только вперед, аналог $order(var,1)): s quit=0 f i=1:1:10 s ret=$zdll("call","zodbc.dll","fetch",dsn) q:ret=0 d q:quit . w ! . f j=1:1:ncol d .. w $zdll("call","zodbc.dll","colname",dsn,j) ;имя поля .. w "=" .. w $zdll("call","zodbc.dll","coldata",dsn,j) ;значение поля .. w ! . w "--" Цикл выполняется до тех пор, пока fetch не вернет 0 (записей больше нет), или пользователь самостоятельно не остановит цикл. 7. ЗАКРЫТИЕ СОЕДЕНЕНИЯ Если дальнейшее использование модуля не предусматривается, необходимо вернуть/освободить назначенные zodbc ресурсы в систему (close), а так же выгрузить библиотеку, если потребности в ней больше нет: s dsn=$zdll("call","zodbc.dll","close",dsn) w $zdll("unload","zodbc.dll") 8. ТРАНКЗАКЦИИ Модуль поддерживает транзакции, по умолчанию в ODBC autocommit выключен, потому требуется подтверждение всех изменений или откат, выполняется всё функцией transact: ;подтверждение изменений s rc=$zdll("call","zodbc.dll","transact",dsn,"commit") ;откат всех изменений s rc=$zdll("call","zodbc.dll","transact",dsn,"rollback") 9. ПОЛНОЕ ОПИСАНИЕ ВСЕХ ФУНКЦИЙ Возврат описания ошибки (расшифровку ошибок см.файлы 346-372.tif) s err=$zdll("call","zodbc.dll","error",dsn) Будем вести лог файл или нет, в него пишется весь протокол использования функций zodbc (полезно при поиске ошибок): s prevflag=$zdll("call","zodbc.dll","log",0|1) ; 0-разрешить, 1- запрет Открытие соединения: s dsn=$zdll("call","zodbc.dll","open","DSN=параметры,...") Число колонок в ответе: s ncol=$zdll("call","zodbc.dll","colnums",dsn) Атрибуты колонки: s attr=$zdll("call","zodbc.dll","colattributes",dsn, ncol, attributes) Получение данных (номер записи определяет fetch): s data=$zdll("call","zodbc.dll","coldata",dsn, ncol) Имя колонки можно получить еще одним способом: s name=$zdll("call","zodbc.dll","colname",dsn, ncol) Закрываем соединение: s rc=$zdll("call","zodbc.dll","close",dsn) Выполняем sql команды: s rc=$zdll("call","zodbc.dll","exec",dsn) Получаем следующую запись, если получили значение 0, то данные закончены: s rc=$zdll("call","zodbc.dll","fetch",dsn) Завершение транзации (type="commit") или откат (type="rollback"): s rc=$zdll("call","zodbc.dll","transact",dsn, type) Download zodbc.zip (zip, 0.23Mb) Александр Чудновскийazbuka@rbcmail.ru
|
|
Info Support |