Эта страница является
переводом страницы
ODBC. Перевод выполнен на 100%.
Работа с базами данных через ODBC
методы для работы с ODBC
iRidium server предоставляет функционал, управляемый через скрипт и позволяющий через ODBC (Open Database Connectivity) получить локальный или удалённый доступ к различным базам данных, таким как: MySQL, PostgreSQL, SQLite, Oracle, SQL Server, Microsoft Access, dBase, Paradox, FoxPro и т.д.
ODBC - платный функционал в iRidium server, но Вы можете попробовать его в тестовом режиме. Доступен в iRidium pro 1.2.10 и выше.
ODBC-драйвер работает только в iRidium server, работающим под управлением ОС Windows (x86/x64). Функционал для ODBC и поддержка некоторых СУБД (SQL Server, Microsoft Access, dBase, Paradox, FoxPro) по умолчанию включены в стандартный пакет установки ОС Windows.
Для работы с другими базами данных необходимо скачать ПО для ODBC-соединения с ОС Windows от производителя соответствующей СУБД. Например, для работы с MySQL необходимо скачать приложение Connector/ODBC для Windows:
https://dev.mysql.com/downloads/connector/odbc/
(Разрядность ПО для ODBC-соединения должна совпадать с разрядностью iRidium server.)
1 Найдите в Windows и запустите приложение ODBC Data Sources (32-bit или 64-bit).
2 Добавьте новое соединение с базой данных и настройте его.
В целях безопасности поля User и Password не рекомендуется задавать в приложении ODBC Data Sources, так как они там не зашифрованы. Эти данные передаст iRidium server при подключении к базе данных.
3 Напишите скрипт, в котором будет создаваться объект ODBC и производиться запрос к базе данных с использованием метода .Query().
Для того, чтобы на сервере корректно активировалась лицензия, необходимо подключаться к ODBC в скриптах не по событию EVENT_START, а с небольшой задержкой, например, с использованием функции IR.SetTimeout() или от нажатия кнопки.
Пример. Запись в базу данных
Данный скрипт получает данные о потреблении электроэнергии и температуре в двух точках со счётчика энергии и датчиков температуры по протоколу Modbus TCP и записывает измеренные значения в локальную базу данных SQLite через механизм ODBC.
Таким же образом могут записаны данные в любую локальную или удалённую базу данных SQL.
var SQLite = false;
var query_head = "INSERT INTO measure(datetime, consumption, temperature1, temperature2) VALUES(";
var cdt = 0;
var cons = 0;
var temp1 = 0;
var temp2 = 0;
IR.AddListener(IR.EVENT_START,0,function()
{
IR.SetInterval(1000, getData);
});
function getData()
{
if (!SQLite) //if no ODBC object
{
SQLite = new ODBC("", "", "sqlite3"); // creating ODBC object
if (SQLite)
{
IR.Log(SQLite + " connected!");
}
}
else
{
var currentdatetime = new iDate();
cdt = currentdatetime.value;
// current date and time in OLE Automation date format (OADate)
cons = IR.GetDevice("Modbus TCP").GetFeedback("Channel 1");
temp1 = IR.GetDevice("Modbus TCP").GetFeedback("Channel 2");
temp2 = IR.GetDevice("Modbus TCP").GetFeedback("Channel 3");
var query = query_head + cdt + "," + cons + "," + temp1 + "," + temp2 + ");";
/*(datetime, consumption, temperature1, temperature2)*/
var response = SQLite.Query(query); // SQL query to SQLite database
IR.Log(query);
}
}
Пример. Чтение из базы данных
В этом примере производится запрос к базе данных MySQL, полученный ответ распаковывается в массив, затем отображается первый элемент поля "User".
При запросах чтения из базы данных SQL необходимо учитывать ограничения размера памяти и производительности процессора.
IR.AddListener(IR.EVENT_START,0,function()
{
IR.SetTimeout(50, getData);
// waiting 50 milliseconds for appropriate iRidium ODBC driver license activation
});
function getData()
{
var MySQL = new ODBC("root", "", "MySQLresurs"); // creating database connection object
var response = MySQL.Query("SELECT * FROM users"); // SQL query to MySQL database
if (response) // if connection is successful and answer exists
{
var rows = response.GetRows();
var columns = response.GetColumns();
var data = {}; // two-dimension array with query result
for (var i = 0; i < columns; i++) {
var colName = response.GetColumnName(i);
data[colName] = [];
for (var j = 0; j < rows; j++) {
data[colName][j] = response.GetRowValue(i, j);
}
}
response.Free(); // free memory of recordset (optional action for memory optimization)
IR.Log(data["User"][0]); // first user in MySQL table
}
}
Объект ODBC
new ODBC()
Создаёт объект ODBC, который соединяется с базой данных и содержит единственный метод Query().
Синтаксис
new ODBC(login, password, dsn);
на входе
|
значение
|
описание
|
login
|
'myname'
|
type: string Логин (имя пользователя) для подключения к базе данных
|
password
|
'qwerty'
|
type: string Пароль для подключения базе данных (может быть пустой для локальной базы данных)
|
dsn
|
'MySQLresurs'
|
type: string Имя источника данных ODBC (DSN)
|
object
|
[object DevicePrototype]
|
type: object ODBC-соединение
|
Пример
var MySQL = new ODBC("root", "", "MySQLresurs");
IR.Log(MySQL); // [object DevicePrototype]
чтобы обратиться к объекту, запишите его в переменную
Методы объекта ODBC
.Query()
Делает запрос к базе данных и возвращает ответ в виде выборки RecordSet.
Выборки SQL-запросов могут иметь большие объёмы. При работе с большими выборками разработчик должен учитывать ограничения в виде размера оперативной памяти, быстродействия процессора, коммуникационных контроллеров, пропускной способности сетевых интерфейсов своей системы. Рекомендуется программно ограничивать размер выборок.
Синтаксис
ODBCobj.Query(query);
на входе
|
значение
|
описание
|
ODBCobj
|
[object DevicePrototype]
|
type: object Объект подключения к ODBC
|
query
|
'SELECT * FROM orders'
|
type: string Строка запроса
|
RecordSetObj
|
[ ]
|
type: object Объект выборки RecordSet. Если запрос ответа не предполагает, то будет возвращено значение false.
|
Пример
var response = DB.Query("SELECT * FROM users");