Функции работы с ODBC

<< Click to Display Table of Contents >>

Navigation:  Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека ODBC >

Функции работы с ODBC

Примечание. Все функции работы с ODBC доступны только при наличии плагина User Script U

mbul_mail odbc.env_create

mbul_mail odbc.env_close

mbul_mail odbc.env_connect

mbul_mail odbc.conn_execute

mbul_mail odbc.conn_close

mbul_mail odbc.cur_close

mbul_mail odbc.cur_fetch

mbul_mail odbc.cur_coltypes

mbul_mail odbc.cur_colnames

mbul_mail odbc.conn_commit

mbul_mail odbc.conn_rollback

mbul_mail odbc.conn_setautocommit

 

odbc.env_create

Создает объект подключения к ODBC. Данный объект нужно передать при создании подключения - функция odbc.env_connect.

Примечание. Каждый созданный объект ODBC должен быть закрыт, по окончанию работы с ним - функций odbc.env_close. Лучше всего открывать подключение в секции OnInit, а затем закрывать его в секции OnClose.

Функция возвращает созданный объект ODBC. Передаваемых аргументов нет.

Пример

env = odbc.env_create(); --создаем объект ODBC подключения - env

odbc.env_close

Уничтожает объект подключения к ODBC. Данную операцию нужно сделать для освобождения памяти. Обычно это делается в функции OnClose.

В функцию нужно передать созданный объект ODBC. Функция возвращает true если объект успешно закрыт, и false если объект был уже закрыт до этого.

Пример

odbc.env_close(env); --закрываем объект env - ODBC подключение

odbc.env_connect

Устанавливает соединение с указанным источником данных.

Примечание. Каждый созданный объект соединения должен быть закрыт, по окончанию работы с ним - функций odbc.conn_close.

Аргументы функции:

Объект подключения к ODBC.

Имя ODBC коннектора - имя должно быть идентичным имени в среде администрирования (см. Настройка ODBC коннектора ). Например настроенный коннектор MS SQL - "MSSQLConnect":

funktsii_raboty_s_odbc

Имя пользователя - имя пользователя под которым будет производится подключение. При использовании MS SQL с Windows-аутентификацией укажите пустую строку.

Пароль - пароль пользователя под которым будет производится подключение. При использовании MS SQL с Windows-аутентификацией укажите пустую строку.

Возвращаемые значения:

Объект с установленным соединением, который должен быть передан в качестве аргумента при вызове функций odbc.execute, odbc.commit, odbc.rollback. В случае если соединение не может быть установлено - nil.

Строка с ошибкой если соединение не было установлено.

Пример

--пример подключения к СУБД PostgreSQL через ODBC коннектор с именем "PostgreSQL30"

env = odbc.env_create(); --создаем объект ODBC

host = "PostgreSQL30" --имя ODBC коннектора (как в среде администрирования)

login ="postgres" -- логин

password = "123" --пароль

CONN,s = odbc.env_connect(env,host,login,password); --подключение

if(CONN==nil) then

    server.Message(s); --вывод сообщения с ошибкой

else

  --выполнение запросов

end

 

odbc.conn_execute

Выполняет SQL запрос к установленному соединению.

Аргументы функции:

Объект с установленным соединением - созданный функцией odbc.env_connect.

Строка с SQL запросом.

Возвращаемые значения:

Если запрос представляет собой выборку (Select), то будет возвращен объект-курсор, содержащий все возвращенные строки запроса - для работы с объектом-курсором используется функция odbc.cur_fetch. Если запрос представляет собой команду (Drop, Insert, Update и т.д.) то возвращается количество строк затронутых командой. В случае ошибки возвращается nil.

Строка с исключением, в случае если запрос был выполнен некорректно.

Примечание. Если запрос представляет собой выборку и в результате был возвращен объект-курсор, то по окончанию работы с ним его необходимо закрыть - используя команду odbc.cur_close.

Пример

--создание таблицы в соединении CONN

res = odbc.conn_execute(CONN,"CREATE TABLE people(name  varchar(50), email varchar(50), counter int)")  

--создание именованной таблицы с парами записей

 list = {

       { name="Jose das Couves", email="jose@couves.com", },

       { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", },

       { name="Maria das Dores", email="maria@dores.com", },

    }

--запись в базу данных

  for i=1,table.maxn(list),1 do

       res = odbc.conn_execute(CONN,string.format("INSERT INTO people VALUES ('%s', '%s','%d')", list[i].name,list[i].email,0))

  end

 

odbc.conn_close

Закрывает соединение с сервером - необходимо выполнить после завершения работы с базой (как правило в функции OnClose). Успешно выполняется только если предварительно были закрыты все объекты-курсоры, но не закрыт объект подключения ODBC.

Передаваемых аргументов нет. В случае успешного закрытия возвращает true, и false если при закрытии возникла ошибка.

Пример

odbc.conn_close(CONN); --закрытие соединения CONN

odbc.cur_close

Закрывает передаваемый курсор. Необходимо для освобождения памяти.

Возвращает true если курсор успешно закрыт, и false если курсор уже закрыт.

Пример

odbc.cur_close(cur); -- закрытие курсора cur

odbc.cur_fetch

Возвращает следующую строку результата выполнения запроса.

Аргументы функции:

Объект-курсор содержащий результат запроса - после выполнения функции odbc.conn_execute.

Возвращаемые значения:

Таблица со значениями следующей строки. При этом формируется именованная таблица - обращение к ней возможно как по именованному индексу (row["name"]), так и по имени столбца. Индекс или имя столбца, должны соответствовать именам столбцов в созданной базе, с учетом регистра. В случае ошибки или достижения последней строки возвращается nil.

Примечание. Ряд баз данных, например Firebird, при создании таблицы могут принудительно изменить регистр на заглавный. Это нужно учитывать при обращении к столбцам.

Строка с исключением, в случае если запрос был выполнен некорректно.

Пример

--выполняем SQL запрос чтения

cur,s = odbc.conn_execute(CONN,"SELECT name, email,counter from people");

if cur==nil then --если запрос не удалось выполнить

   server.Message(s); --вывод сообщения с ошибкой

 return; --выходим

end;

   local i=1;

   while true do

  row = odbc.cur_fetch(cur);

  if row==nil then break; end; --если ошибка или было считано до конца - выходим

      -- выводим значения в лог

  server.Message("Name "..i.."=",row.name);

  server.Message("EMail "..i.."=",row.email);

       i=i+1;

   end

odbc.cur_close(cur); -- закрытие курсора cur по окончанию работы

odbc.cur_coltypes

Возвращает таблицу с типами данных столбцов.

Передаваемый аргумент - объект-курсор, полученный после выполнения odbc.conn_execute.

Пример

cur = assert (odbc.conn_execute(CONN,"SELECT name, email,counter from people"));

columns=odbc.cur_coltypes(cur);

--будет сформирована таблица с типами данных столцов

odbc.cur_colnames

Возвращает таблицу с именами столбцов.

Передаваемый аргумент - объект-курсор, полученный после выполнения odbc.conn_execute.

Пример

cur = assert (odbc.conn_execute(CONN,"SELECT name, email,counter from people"));

columns=odbc.cur_colnames(cur);

--будет сформирована таблица с именами столцов

odbc.conn_commit

Закрывает текущую транзакцию (не работает с СУБД не поддерживающими транзакции).

Передаваемый аргумент - объект с установленным соединением. Функция возвращает true, если транзакция была успешно закрыта и false если при закрытии возникла ошибка или закрытие не возможно.

Пример

CONN,s = odbc.env_connect(env,host,login,password); --подключение

odbc.conn_commit(CONN); --завершение транзакции

odbc.conn_rollback

Откатывает текущую транзакцию (не работает с СУБД не поддерживающими транзакции).

Передаваемый аргумент - объект с установленным соединением. Функция возвращает true, если транзакция была успешно возвращена и false если при откате возникла ошибка или откат не возможен.

Пример

CONN,s = odbc.env_connect(env,host,login,password); --подключение

odbc.conn_rollback(CONN); --откат транзакции

odbc.conn_setautocommit

Включает/выключает режим автоматических транзакций (не работает с СУБД не поддерживающими транзакции).

В качестве аргумента передается true - включить или false - выключить. Функция возвращает true если переключение было успешно, и false если переключение не возможно.

Пример

CONN,s = odbc.env_connect(env,host,login,password); --подключение

odbc.conn_setautocommit(CONN,true); --включить режим автоматических транзакций