Linuxmint + wine полёт нормальный
....встроенное ядро Linux от Microsoft
сами то поняли что написали ?
My Visual Database → Posts by iacovlogica
Linuxmint + wine полёт нормальный
....встроенное ядро Linux от Microsoft
сами то поняли что написали ?
Задача:
Есть программа управления оборудованием которая генерирует некоторые технологические данные которые надо записывать
Вопрос :
Есть ли возможность передачи данных и их записи в MVD
Имею ли я право использовать sqlite.dll (меня терзают смутные сомнения)
Имеется ли возможность подключать к MVD сторонние или самописные dll-ки
В Вашем случае нужно знать формат общения с почтовым сервером , по поводу смс хз ни разу не интересовался
а сохранять так же как и во временную таблицу предварительно разобрав текст на поля
JSON Оооочень простой текстовый формат по написанию я бы сказал родственник XML
Например общение с http://narodmon.ru происходит так :
Получение списка датчиков :
Посылаем
http://narodmon.ru/api?{"cmd":"sensorsOnDevice","id":хххх,"uuid":"065177ca671801525b642d90c0хххххх","api_key":"UNbpY7zhgххх","lang":"ru"}
Получаем
{"id":хххх,"mac":"ESP8266хххххххх","name":"ххххххххх","my":1,"owner":"10ххх","location":"Краснодарский край, Россия","distance":565.28,"liked":1,"uptime":50,"sensors":[{"id":20689,"mac":"DS18T1","fav":0,"pub":0,"type":1,"name":"Корридор","value":12.9,"unit":"°","time":1522513380,"changed":1522512796,"trend":0},{"id":25685,"mac":"U4","fav":1,"pub":0,"type":13,"name":"PZEM-004T_Напр. на
вводе","value":158.8,"unit":"V","time":1522513096,"changed":1522513096,"trend":0},
{"id":25687,"mac":"W4","fav":1,"pub":0,"type":6,"name":"PZEM-004T_Потреб. мощность","value":146,"unit":"W","time":1522513096,"changed":1522513096,"trend":0}]}
А разбирается это дело тоже очень просто
Вот процедура и функция которая выводят это в грид через временную таблицу (так надо было) :
procedure sensorsOnDevice (Sender: string; var Cancel: boolean);
var
str:string;
kursor:integer ;
json :string ;
begin
//{"cmd":"sensorsOnDevice","id":1234,"uuid":"UUID","api_key":"API_KEY","lang":"ru"}
json := '{"cmd":"sensorsOnDevice","id":'+id_u+',"uuid":"'+uuid+'","api_key":"'+api_key+'","lang":"'+lang+'"}'; // JSON
http_string := HTTPGet('http://narodmon.ru/api?'+json);
http_string := DecodeUTF(http_string);
log.Memo1.Lines.add('-----------------sensorsOnDevice------------------');
log.Memo1.Lines.add('http://narodmon.ru/api?'+json);
log.Memo1.Lines.add(http_string);
narod.Edit2.Text := CutData('id');
narod.Edit3.Text := CutData('owner');
//CREATE TEMPORARY TABLE VTab
//(
//id INTEGER PRIMARY KEY ,
//s_id INTEGER,
//s_name TEXT,
//s_value TEXT,
//s_unit TEXT,
//s_time INTEGER,
//)
SQLExecute ('DELETE FROM Vtab');// Очищаем временную таблицу
kursor := posex('[',http_string,1);
while posex('{',http_string,kursor)<>0 do
begin
kursor := posex('{',http_string,kursor);
str := str +#39+ CutData('id',kursor) +#39+ ',';
str := str +#39+ CutData('name',kursor) +#39+ ',';
str := str +#39+ CutData('value',kursor)+#39+ ',';
str := str +#39+ CutData('unit',kursor) +#39+ ',';
str := str +#39+ DateTimeToStr(UnixToDateTime(StrToInt(CutData('time',kursor))))+#39;
SQLExecute ('INSERT INTO Vtab (s_id, s_name, s_value, s_unit, s_time ) VALUES ('+str+')' );
str:='';
kursor := kursor + 1;
end;
narod.TableGrid1.dbSQL := 'SELECT id, s_id as '+#39+'ID_Датчика'+#39+', s_name AS '+#39+'Наименование'+#39+', s_value AS '+#39+'Значение'+#39+', s_unit AS '+#39+'Ед.Изм'+#39+', s_time AS '+#39+'Время '+#39+'FROM Vtab';
narod.TableGrid1.dbSQLExecute();
narod.TableGrid1.BestFitColumns(bfBoth);
//- sensors[id] целочисленный код датчика в проекте;
//- sensors[pub] = 1, если датчик публичный и = 0, если датчик приватный;
//- sensors[type] код типа датчика из справочника sensorType;
//- sensors[name] название датчика или его ID (если нет названия);
//- sensors[value] последнее показание датчика;
//- sensors[unit] единица измерения;
//- sensors[time] время последнего показания датчика в UnixTime;
//- sensors[changed] время последнего изменения показаний датчика в UnixTime;
//- sensors[trend] коэффициент линейного роста показаний датчика за последний час, рассчитанный по МНК.
end;
function CutData(pole:string ;kursor : integer = 1 ):string ;
var
pozN,pozK,dlin : int ;
begin
dlin := length(pole);
pozN := posex(pole,http_string,kursor) + dlin + 2 ;
if copy(http_string,pozN,1)='"' then
begin
pozN:=pozN + 1;
pozK:=posex('"',http_string,pozN);
end
else pozK := posex(',',http_string,pozN);
result := copy(http_string,pozN,pozK-pozN);
end;
Проблема в стороннем компоненте , который Дмитрий полагаю в будущем заменит .
апостроф Вы зря вписали , уберите его а на то что скрипт синеет просто не обращайте внимания он полностью работоспособен .
Вид скрипта ,конечно, необычен но на работу не влияет . Как временное решение можете добавить пробел после буквы Я(или временно поставить другую букву) , а в окончательной версии его уберёте(замените букву) .(как я делал)
п.с. Не рекомендую использовать русские буквы в названиях компонентов ( ...правда это очень удобно )
Значит что-то все таки изменилось .
....я сам недавно случайно мышкой свойство задел (ноут переносил ))) ) и не мог понять почему Мемо стало показывать только мелкие буквы .
Просмотрите внимательно проект .......истина где-то рядом
Ну или выкладывайте , посмотрим .....
Попробуйте двойные кавычки убрать, они не нужны.
pole := 'N2';
newnum := SQLexecute('SELECT MAX("'+pole+'") FROM skup WHERE parrentID = "'+IntToStr (new_poruch.TableGrid1.dbItemID)+'"');
Отсутствует основной(обязательный) блок , допишите его.
BEGIN
END.
Form1.WindowState := wsMinimized ;
wsNormal (обычное состояние) — по умолчанию;
wsMinimized (свернута);
wsMaximized (развернута).
Всё правильно , я умышленно не вписал в другой комбобокс в фильтре 'hidden=0' для того что бы Вы сами его туда вписали и Вам стало понятнее .
Дмитрий уже отвечал на подобный вопрос .
Смотря какая цель преследуется , если просто чтобы кучи окон не было на раб столе то вот посмотрите :
http://myvisualdatabase.com/forum/viewt … 876#p15876
Правильно он ругается . Строку надо в цифру преобразовать .
CopyAddToJornal.DateTimePicker1.date := StrToDate(sqlexecute('select DateIN from GenJornal where id =' +inttostr(GeneralJornal.tablegrid1.dbitemid)));
Обратите внимание на поля в таблице и на фильтр комбобокса
У каждого компонента на форме есть событие OnKeyPress
https://c2n.me/3SttDdU Посмотрите справку .
Посмотрите сообщения на форуме воспользовавшись поиском:
http://myvisualdatabase.com/forum/search.php
можно создать процедуру обработки кнопок и сочетаний и повесить её на OnKeyPress каждого компонента на форме
(как централизованно это сделать сразу для всей формы не знаю )
коды кнопок можно получить как опытным путем так и таблица где то проскакивала на форуме...
....а вот https://www.rapidtables.com/code/text/ascii-table.html , Дмитрий давал .
1. Блокированный юзер не войдет а при блокировке во время работы его выкинет.
2. Если блокировать юзера "all" то приложение закроется сразу после старта а все кто работал отправятся в астрал (кроме "admin")
....кнопка USER активна только у админа
....у админа не должно быть 34 строки скрипта
....при большом количестве юзеров не помешает увеличить время опроса или вообще повесить на второй таймер
... в общем даже боюсь начинать переводить на мускул )))
Главное резервные копии делать . Мускул тоже , гад , довольно прожорлив при большом количестве обращений . Скорее всего сервер понадобится . Так как пользователей не много найдите комп с максимальной частотой проца
...а на каком железе это крутится ?
....так же если есть возможность убрать лишние обращения к базе то уберите .
так же можете попробовать в оперативке создать диск и запустить базу с него эксперимента ради
Последние патчи интела (начиная с января) в связи с уязвимостями в камнях прилично садят именно дисковые обрашения
Как вариант установите систему с чистого образа без заплаток .
да по поводу
Timer := TTimer.Create(Form1);
....на пример у Вас есть машина (программа) и понадобились вам туда часы . У Вас так же есть 3Д принтер (конструктор) .
Вы выбираете в 3Д принтере чертеж часов ( TTimer ) и даёте команду напечатать часы по имеющимся чертежам ( .Create ) и поместить эти часы на переднюю панель ( Form1 ) .
Если не поместить часы в машину то их в машине не будет ))) .
Так как часы невидны снаружи машины то их можно поместить и в другое место например в бардачек ( Chat ), они и там прекрасно будут тикать .
....сильно не пинайте как смог так и объяснил
Оно так ,по идее, и работает , так как висит это дело на таймере .
Попробуйте .
....разумеется при старте программы надо это все запустить
если просто сообщение показать , то добавил строки 5,40,56,57
....на данный костяк "Чата" можно навесить все на что только фантазии хватит вплоть до айфоноподобного вида со смайликами ))). (канвас Вам в помощь, ну и наличие времени )
Ну если в рукопашную городить то мне видится вариант с созданием временной таблицы на сервере и через проверку на новые записи с периодом например 5 сек смотреть есть ли сообщения для текущего юзера .
...Не знаю чем вам не нравится вагон уже готовых месенджеров
Выколупал из одной своей поделки может Вам пригодится.
....только перепроверьте все а то может что не так работает , давненько писал ...
My Visual Database → Posts by iacovlogica
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi