Работа с базой данных

Avatar
  • обновлен
Как в скрипте работать с базой данных? Необходимо прочитать значение канала в определенный момент времени
Avatar
SIMP Tech (Сергей)
День добрый.

Проблему устранили, был баг при работе с StreamReadFromDatabase, имя канала нельзя было передавать в виде переменной. Исправили, в ближайшем релизе это исправление будет.
Avatar
Rate216
А есть ли возможность пользоваться калькулятором расхода из скрипта?
Avatar
SIMP Tech (Сергей)
День добрый.

А есть ли возможность пользоваться калькулятором расхода из скрипта?

Из под скрипта доступа к калькулятору расходов к сожалению нет.
Avatar
Добрый день!

При использовании GetValueFromStream(Stream, dtDate, dValue)

не могу получить временную метку из переменной dtDate
получаю только лишь даты следующего вида:
01.01.1900
30.12.1899
14.01.1900
16.01.1900 и т.д.

что я делаю не так?
мне требуется вычислить временной промежуток между двумя временными метаками

С уважением, Кондратенко Анатолий
Новочеркасск
Avatar
SIMP Tech (Сергей)
День добрый, Анатолий.

При использовании GetValueFromStream(Stream, dtDate, dValue)

не могу получить временную метку из переменной dtDate
получаю только лишь даты следующего вида:
01.01.1900
30.12.1899
14.01.1900
16.01.1900 и т.д.

что я делаю не так?
мне требуется вычислить временной промежуток между двумя временными метаками

Пришлите текст скрипта, я посмотрю. Возможно не верно выполняете вычисления.
Avatar
на форме два объекта ввода даты-времени
но кнопке вызывается этот скрипт

int StatistikaExcel(TDateTime dtBegin, TDateTime dtEnd)
{
string stroka, cellname, spisokStolb="BCDEFGHIJKLMNOPRST";
int count=0, i, iReturn=1, per=0;
int flagData=0, nomerData=1, kolData=0;
double sumData=0, dValue;
TTime beginTime, endTime;
TMemoryStream Stream;
word error;
TDateTime dtDate;

if(dtBegin>dtEnd)
{
ShowMessageBox("—", "Начальная дата больше конечной. Исправьте эту ситуацию!", 3);
return 0;
}
if(dtBegin==dtEnd)
{
ShowMessageBox("—", "Начальная дата равна конечной. Исправьте эту ситуацию!", 3);
return 0;
}
if(ReadValue("Протокол") == -2)
{
WriteValue("Протокол дата начала сигнальный",0);
WriteValue("Протокол дата конца сигнальный",0);
return 0;
}

Stream = TMemoryStream.Create;
nameCanal = "Канал с данными";
error = StreamReadFromDatabase(dtBegin, dtEnd, nameCanal, Stream);

// открываем шаблон файла и сохраняем его с именем "Протокол+текущая дата"
if(Excel.OpenTemplate("d:\\Протоколы\\protokol_1.xls") == 0)
{
nameFile = "d:\\Протоколы\\Протокол "+copy(DateTimeToStr(dtBegin),1,10)+".xls";
Excel.Save(nameFile);
Excel.Close;
}
else {error = 33;}


if((error == 0) && (Excel.OpenTemplate(nameFile) == 0))
{
Excel.Cell["B7"] = DateTimeToStr(dtBegin);
Excel.Cell["B8"] = 123;

while (GetValueFromStream(Stream, dtDate, dValue))
{
if(dValue>0)
{

// что-то с времеными метками
stroka = DateTimeToStr(dtDate);
ShowMessageBox("time", stroka, 3);

if(dValue>1) // почему-то попадаются положительные данные бесконечно малой величины
{
if(flagData==0){beginTime=dtDate;}
endTime=dtDate;
sumData=sumData+dValue;
kolData=kolData+1;
flagData=1;
}

}
else if((dValue==0)&&(flagData==1))
{
cellName = copy(spisokStolb,nomerData,1)+"12";
Excel.Cell[cellName] = sumData/kolData;

cellName = copy(spisokStolb,nomerData,1)+"13";
Excel.Cell[cellName] = TimeToStr(endTime-beginTime);

nomerData = nomerData + 1;
sumData=0;
kolData=0;
flagData=0;
}
}

Excel.Save(nameFile);
Excel.Close;
}
else { ShowMessageBox("—", "Ошибка считывания базы!", 1); iReturn=0; }
Stream.free;
WriteValue("Протокол дата начала сигнальный",0);
WriteValue("Протокол дата конца сигнальный",0);
return iReturn;
}
Avatar
SIMP Tech (Сергей)
на форме два объекта ввода даты-времени
но кнопке вызывается этот скрипт

Ок. На первый взгляд все верно. Такое поведение наблюдается по всей базе или за какой то определенный период?
Avatar
По всей базе
Если можно назвать ее базой
Просто для отработки скрипта сформировал виртуальый канал и записал в него кусок реального канала (где-то около пяти часов)
Avatar
SIMP Tech (Сергей)
По всей базе
Если можно назвать ее базой
Просто для отработки скрипта сформировал виртуальый канал и записал в него кусок реального канала (где-то около пяти часов)

Ок. На почту часовой архив БД скиньте, посмотрим что внутри записано.
Avatar
Снимаю вопрос
Скачал с сайта последнюю версию free
Теперь всё работает как надо

С уважением, Кондратенко Анатолий