0
Answered
Работа с БД
Добрый день!
Бьюсь с пользовательской БД. При попытке запуска, сервер ругается вот так.
Запускаю сервер на Windows
Вроде все по инструкции. При попытке запуска проекта-примера из вики - та же история.
Т.е. даже не могу создать БД.
Проект прикладываю. Помогите разобраться. Возможно что-то в синтаксисе. Или на компе нет средств для работы с БД?
Customer support service by UserEcho
Добрый день.
var mybase = new SQL();
IR.AddListener(IR.EVENT_START,0,function()
{
mybase.Open('KNX.db'); //открыть БД, если ее нет, то создать
mybase.Execute("BEGIN"); //начать работу с БД
mybase.Execute('CREATE TABLE KNX_Data(ID int, Datetime int, Value TEXT)'); //создать таблицу KNX_Data с полями
IR.Log("Тут создалась БД");
mybase.Execute("COMMIT"); //закончить работу с БД
mybase.Close();
});
База будет тут: C:\Users\%username%\Documents\iRidium pro documents\Server\Documents\<ProjectName>\KNX.db
Возможно перед загрузкой проекта на сервер понадобится очистить каталог C:\Users\%username%\Documents\iRidium pro documents\Server\
Чистка каталога сервера помогла. База с нужными таблицами создалась. Но теперь проблема в том, что я не могу записать значение в таблицу. Лог сервера ниже
Таблицы есть, но они пустые.
Дайте код, которым в БД пишете.
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
var name_1 = name.split('.');
IR.Log("Change: " + name + " = " + value);
mybase.Open('KNX.db', true);
mybase.Execute("BEGIN");
mybase.Execute('INSERT INTO KNX_Data3(Name, Value) VALUES("' + name_1[3] + '",' + value + ')');
mybase.Execute("COMMIT");
mybase.Close();
});
// Блок подписи на необходимые теги
IR.SubscribeTagChange("Server.Tags.KNX-1.пом_2 - темп тек");
var mybase = new SQL();
IR.AddListener(IR.EVENT_START,0,function()
{
mybase.Open('KNX.db'); //открыть БД, если ее нет, то создать
mybase.Execute("BEGIN"); //начать работу с БД
mybase.Execute('CREATE TABLE KNX_Data(Name TEXT, Value TEXT)');
IR.Log("Тут создалась БД");
mybase.Execute("COMMIT"); //закончить работу с БД
mybase.Close();
});
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
var name_1 = name.split('.');
var s_name = '"'+name_1[3]+'"'; //строку нужно отдать запросу в кавычках
IR.Log("Change: " + name + " = " + value);
mybase.Open('KNX.db');
mybase.Execute('BEGIN');
mybase.Execute('INSERT INTO KNX_Data(Name, Value) VALUES('+s_name+','+value+')');
mybase.Execute('COMMIT');
mybase.Close();
});
// Блок подписи на необходимые теги
IR.SubscribeTagChange("Server.Tags.KNX-1.пом_2 - темп тек");
Разве это:
var s_name = '"'+name_1[3]+'"';
mybase.Execute('INSERT INTO KNX_Data(Name, Value) VALUES('+s_name+','+value+')');
не то же самое, что это:
mybase.Execute('INSERT INTO KNX_Data3(Name, Value) VALUES("' + name_1[3] + '",' + value + ')');
Не то же самое. Здесь в Execute() нужно передать строку запроса. Формировать её нужно не внутри метода, а до его использования.