<< Click to Display Table of Contents >> Navigation: Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека ODBC > Функции работы с ODBC |
Примечание. Все функции работы с ODBC доступны только при наличии плагина User Script U
Создает объект подключения к ODBC. Данный объект нужно передать при создании подключения - функция odbc.env_connect.
Примечание. Каждый созданный объект ODBC должен быть закрыт, по окончанию работы с ним - функций odbc.env_close. Лучше всего открывать подключение в секции OnInit, а затем закрывать его в секции OnClose.
Функция возвращает созданный объект ODBC. Передаваемых аргументов нет.
Пример
env = odbc.env_create(); --создаем объект ODBC подключения - env
Уничтожает объект подключения к ODBC. Данную операцию нужно сделать для освобождения памяти. Обычно это делается в функции OnClose.
В функцию нужно передать созданный объект ODBC. Функция возвращает true если объект успешно закрыт, и false если объект был уже закрыт до этого.
Пример
odbc.env_close(env); --закрываем объект env - ODBC подключение
Устанавливает соединение с указанным источником данных.
Примечание. Каждый созданный объект соединения должен быть закрыт, по окончанию работы с ним - функций odbc.conn_close.
Аргументы функции:
➢Объект подключения к ODBC.
➢Имя ODBC коннектора - имя должно быть идентичным имени в среде администрирования (см. Настройка ODBC коннектора ). Например настроенный коннектор MS SQL - "MSSQLConnect":
➢Имя пользователя - имя пользователя под которым будет производится подключение. При использовании 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
Выполняет 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
Закрывает соединение с сервером - необходимо выполнить после завершения работы с базой (как правило в функции OnClose). Успешно выполняется только если предварительно были закрыты все объекты-курсоры, но не закрыт объект подключения ODBC.
Передаваемых аргументов нет. В случае успешного закрытия возвращает true, и false если при закрытии возникла ошибка.
Пример
odbc.conn_close(CONN); --закрытие соединения CONN
Закрывает передаваемый курсор. Необходимо для освобождения памяти.
Возвращает true если курсор успешно закрыт, и false если курсор уже закрыт.
Пример
odbc.cur_close(cur); -- закрытие курсора cur
Возвращает следующую строку результата выполнения запроса.
Аргументы функции:
➢Объект-курсор содержащий результат запроса - после выполнения функции 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.conn_execute.
Пример
cur = assert (odbc.conn_execute(CONN,"SELECT name, email,counter from people"));
columns=odbc.cur_coltypes(cur);
--будет сформирована таблица с типами данных столцов
Возвращает таблицу с именами столбцов.
Передаваемый аргумент - объект-курсор, полученный после выполнения odbc.conn_execute.
Пример
cur = assert (odbc.conn_execute(CONN,"SELECT name, email,counter from people"));
columns=odbc.cur_colnames(cur);
--будет сформирована таблица с именами столцов
Закрывает текущую транзакцию (не работает с СУБД не поддерживающими транзакции).
Передаваемый аргумент - объект с установленным соединением. Функция возвращает true, если транзакция была успешно закрыта и false если при закрытии возникла ошибка или закрытие не возможно.
Пример
CONN,s = odbc.env_connect(env,host,login,password); --подключение
odbc.conn_commit(CONN); --завершение транзакции
Откатывает текущую транзакцию (не работает с СУБД не поддерживающими транзакции).
Передаваемый аргумент - объект с установленным соединением. Функция возвращает true, если транзакция была успешно возвращена и false если при откате возникла ошибка или откат не возможен.
Пример
CONN,s = odbc.env_connect(env,host,login,password); --подключение
odbc.conn_rollback(CONN); --откат транзакции
Включает/выключает режим автоматических транзакций (не работает с СУБД не поддерживающими транзакции).
В качестве аргумента передается true - включить или false - выключить. Функция возвращает true если переключение было успешно, и false если переключение не возможно.
Пример
CONN,s = odbc.env_connect(env,host,login,password); --подключение
odbc.conn_setautocommit(CONN,true); --включить режим автоматических транзакций