MiniM. Saving time.


| About | Download | Tools | Knowledge Base | How to Buy |

MiniM Overview

Getting Started

Download

Documentation

Tools

Cache Tools

GT.M Tools

Knowledge Base

FAQ

Contacts

Copyrights

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, должна выполнить следующие действия:

  • загрузить библиотеку zodbc.dll в рабочее пространство (load);
  • подключиться к источнику данных (open);
  • выполнить необходимые команды (sql:select,insert,delete);
  • обработать результат выполнения команды (fetch, getdata, transact:commit | rollback);
  • освободить ресурсы (close);
  • выгрузить библиотеку zodbc.dll (unload).

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
В общем случае доступны следующие атрибуты:
auto
является ли поле автоинкрементируемым ;
case
игнорируем большие/маленькие буквы ;
count
число столбцов результирующего множества;
size
максимальное число символов необходимое для отражения данного столбца;
length
длина столбца;
money
определяет является ли данный столбец с бабками (денежное представление);
null
возможность принимать значение NULL;
precision
точность;
scale
размер столбца;
searchable
способность поиска в столбце;
type
SQL-type столбца;
unsigned
знаковый/беззнаковый;
updatable
разрешено редактировать;
label
метка столбца (некоторые источники поддерживают);
name
имя столбца;
owner
владелец таблицы которая содержит данный столбец;
qualifier
квалификатор таблицы, которая содержит данный столбец;
table
имя таблицы, которая содержит этот столбец;
typename
имя типа данных столбца.

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


Copyright (C) Eugene Karataev
Info Support