powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / (не) Правильно настроенный компонент FDconnection для Update таблицы.
19 сообщений из 19, страница 1 из 1
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263012
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задача стояла следующая..
датчики давления диз.двигателя посылают при оборотах 1550 об.мин.( 12 циклов в секунду)
данные которые на выходе я пихаю в таблицу. Поскольку цилиндров много а прмежутки циклов для всех цилиндров одинаковы,я решил создать таблицу вот такого плана.

сложность записи для меня состояла в том что неизвестно какой цилиндр появится первым. Я решил что буду записывать в таблицу первый пришедший.

INSERT INTO wcdat (hmsmsc,dtstam,dcycle,knock"+db_cylnum+",imep"+db_cylnum+",pmax"+db_cylnum+")"
VALUES ('"+insert_wcdat_time+"','"+db_tstam+"','"+db_cycle+"','"+db_knock+"','"+db_imep+"','"+db_peak+"');

а кода появится следующий цилиндр буду писать его как

UPDATE wcdat SET" " knock"+db_cylnum+"='"+db_knock+"'"
",imep"+db_cylnum+"='"+db_imep+"'"
",pmax"+db_cylnum+"='"+db_peak+"'"
" WHERE"
" dcycle = '"+db_cycle+"'";

и все заработало.НО! запись производится круглосуточно ,и где то на десятой минуте я заметил что база начинает писать с пробелами . тоесть не успевает переварить апдэйт или я туплю.что вероятнее всего. функция записи вызывается в таймере с интервалом 10 милисекунд. так что времени должно было быть с избытком.Подозреваю что всё дело в настройках компонентов FireDac но опыта работы практически нет.
Использую как то так.
ПРОШУ помощи спецов в настройке сего чуда.код записи ниже.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263013
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо таблица не попала в запись.
Прилагаю.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263018
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное сумбурно написанная задача не позволит расчитывать на моментальное решение. отвечу на наводящие вопросы и на всё что необходимо было бы учесть в данном посте,посту,иликакеготам.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263045
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvikзаметил что база начинает писать с пробелами . тоесть не успевает переварить апдэйт
Видимо имеется ввиду, что промежуток времени поля hmsmsc между записями начал растягиваться?

Это может быть связано с тем, что ваш код стал работать несколько медленно (утечка памяти или ещё какое-либо влияние), что не позволяет получать данные чаще, чем при запуске приложения. Пока не вижу проблем с SQLite, а с FDconnection это разбираться не сюда
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263052
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или это те NULL значения? Решение точно такое же, надо проверить скорость работы вашего кода и кода при работе с БД. Может дело в архитектуре приложения, пока не ясно из описания
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263079
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо за скорость ответа!
Видимо имеется ввиду, что промежуток времени поля hmsmsc между записями начал растягиваться?
абсолютно верно. Но чем больше база данных те промежутки плотнее что позволяет думать что от размера базы всетаки это происходит.

и если вы меня перенаправите нафорум фаердака бу признателен.

Вопрос тогда другого плана. при записи UPDATE wcdat SET"
" knock"+db_cylnum+"='"+db_knock+"'"
",imep"+db_cylnum+"='"+db_imep+"'"
",pmax"+db_cylnum+"='"+db_peak+"'"
" WHERE"
" dcycle = '"+db_cycle+"'";

WHERE dcycle = '"+db_cycle+ -|перебирает всю таблицу? Если да ,подскажите пожалуйста как окраничиться последними тремя четырьмя строчками.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263170
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvik,

У тебя изначально не верный подход к задаче.
Исходя из этого:
komvikдатчики давления диз.двигателя посылают при оборотах 1550 об.мин.( 12 циклов в секунду)
данные которые на выходе я пихаю в таблицу.Если у тебя несколько датчиков, то проще всего рассматривать каждый датчик как отдельного пользователя базы данных. Каждый датчик (его драйвер) открывает свое подключение к базе данных и простыми insert'ами кидает в базу запись типа: "время сейчас", "мой идентификатор", "значение датчика".
Какую СУБД брать под это дело - смотреть по нагрузке, но 12 записей в секунду от одного клиента при сотне одновременных клиентов выдержит практически любая СУБД.

Но! Классическая SQLite это не многопользовательская СУБД и для этой задачи не годится совсем. Если тебе действительно (очень серьезно подумай над этим) действительно надо использовать SQLite в качестве хранилища собранных данных - читать http://sqlite.org/faq.html#q5


Как вариант, сделай ОДИН процесс, который будет опрашивать все датчики по кругу, читать из них текущие значения и писать в базу.


Фраза типа:komvik неизвестно какой цилиндр появится первым. НЕ ДОЛЖНА появляться вообще. Для задачи сбора информации нет никакой разницы какой из датчиков сработает раньше, какой позже. Датчик делает замер и вместе с меткой времени отправляет свое значение в хранилище. Все!
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263455
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, Спасибо за участие !
Изначально все так и происходило писались разные таблицы,каждая для своего цилиндра простым инсертом.

Все работает. Но ! Записать не проблемма проблемма показать БЫСТРО ПОКАЗАТЬ то что записалось .24 часа на 12 циклов в секунду плюс 12 а часто и 16 18 24 цилиндров TChart захлёбавался на показе72 графика по миллиону точек .короче это нюансы проги. "Лабораторным путем" :) установленно должна быть одна таблица с апдейтами. использовать только SQLite - не моя прихоть. Так что имеем что имеем.

если можешь помочь советом помоги. просьба была выше .

-как окраничиться последними тремя четырьмя строчками для апдейта .

При использовании инсерта все работает так что утечка памяти исключена .
Я всетаки полагаю что проблемма в апдейте при определённом размере файла начинаются тормоза.
вывод записать базу с быстрым апдейтом.


дополнение или апдейт происходит в последних трёх четырёх строчках... итд.

с ув.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263685
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvikWhite Owl, Спасибо за участие !
TChart захлёбавался на показе72 графика по миллиону точек .короче это нюансы проги.

1. А зачем ты для графиков скармливаешь так много точек? при этом заполняешь сразу все 72 - они все видны на экране?
2. Сколько записей в таблице wcdat?
3. Какие индексы построены на wcdat + покажи структуру таблицы?
4. Какие данные хранятся в dcycle и сколько уникальных значений в этом поле?

Также тебе лучше использовать бинд-переменные и не склеивать SQL из "кусков".
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263725
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

грешно глумиться над ОЧАПАТКАМИ. хотя поделом, сдесь вам не это.

PPA1. А зачем ты для графиков скармливаешь так много точек? при этом заполняешь сразу все 72 - они все видны на экране?
2. Сколько записей в таблице wcdat?
3. Какие индексы построены на wcdat + покажи структуру таблицы?
4. Какие данные хранятся в dcycle и сколько уникальных значений в этом поле?

Также тебе лучше использовать бинд-переменные и не склеивать SQL из "кусков".


1.требование заказчика. все точки должны прорисовываться.
2. начало и конец рабочей таблицы выкладываю.плюс структуру таблицы.
...
почему бинд-переменные ? если можно поподробнее.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263726
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

конец таблицы
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263729
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvik,

структура
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263740
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

это рабочий вариант где только инсерт. все пишется и читается. но медленно.
если нужны скрины новой таблицы с апдейтами, или есче что нибудь ,что я упустил .я выложу.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263777
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvik,

1. Один лям записей это уже много...
ты не показал DDL таблицы и индексов, но я думаю у тебя нет индекса по dcycle
и если его построить ты значительно ускоришь update по этому полю.
но при этом незначительно просядет insert - попробуй на тесте

2. Покажи select которым ты достаешь графики для 72 чартов.
если выкинуть в тесте заполнение TChart и делать только select к базе - тормозов нет?

3. Пример с биндами можешь глянуть тут http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_SQLite_with_FireDAC
(ищи строчку oStmt.Prepare('select * from "Orders" where OrderID > :ID1 and OrderID < :ID2');)
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263801
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

спасибо за помощь ! но выложить я смогу только через полтора часа.
и буду ждать ответа:)
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263926
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

1. действительно лям. и таки да нет индекса. буду тестить.
2. sq = sq + " FROM wcdat_cyl12";
sq = sq + " WHERE strftime('%H:%M:%S',hmsmsc) BETWEEN '"+StartTM+"'AND'"+EndTM+"'";
FDQuery_select->SQL->Text = sq;
FDQuery_select->Open();
дальше
for (int lb =0 ; lb < FDQuery_select->RowsAffected; lb++)
{...
...
DBChart1->Series[35]->AddXY(XVal, (FDQuery_select->FieldByName("pmax")->AsFloat)/10);
FDQuery_select->Next();
..
итд
}
3. гляну обязательно.

пысы.

как же все же по поводу моего вопроса. с последними тремямчетырьмями(автор пытается шутить после перерыва).
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263963
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komvikPPA,
как же все же по поводу моего вопроса. с последними тремямчетырьмями(автор пытается шутить после перерыва).

1. Для начала построй индекс по dcycle - твой update будет летать.

2. Посчитай сколько времени идет выполнения запроса на выборку из базы для графиков
WHERE strftime('%H:%M:%S',hmsmsc) BETWEEN '"+StartTM+"'AND'"+EndTM+"'";
3. Сколько записей получается в результате запроса в for (int lb =0 ; lb < FDQuery_select->RowsAffected; lb++) ?
4. Если закоментить строчки добавление в графики - DBChart1->Series[35]->AddXY(XVal, (FDQuery_select->FieldByName("pmax")->AsFloat)/10);
сколько времени идет пробежка по FDQuery_select
5. RowsAffected точно легкая проперть и не имеет побочных эффектов?
мы у себя обычно бегаем вот таким способом:
for(FDQuery_select->Open(); !FDQuery_select->Eof; FDQuery_select->Next())
{
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263978
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

Огромное человеческое спсб.
буду пробовать.

но всеж из любопытства есть какаянить идейка по вопросу тричепыре:)
чисто из проф любопытсва:)

з а в а т е т а
PPAfor(FDQuery_select->Open(); !FDQuery_select->Eof; FDQuery_select->Next())
отдельный гранмерси.

всё полезное интересно.
...
Рейтинг: 0 / 0
(не) Правильно настроенный компонент FDconnection для Update таблицы.
    #39263981
komvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

В догонку . ВЫ случаем не на баракадере ваяете?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / (не) Правильно настроенный компонент FDconnection для Update таблицы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]