Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.15;
Скачать: CL | DM;

Вниз

Обновление DBGRID по таймеру   Найти похожие ветки 

 
Lokk83   (2007-06-22 02:25) [0]

Ночь добрая!
Посдкажите, плиз, есть на форме dbgrid и таймер, который часто опрашивает базу на изменения(хранимые процедуры) и проверяет условия. если выполняется эти условия тогда выполняется запрос на выборку из таблицы привязанной к dbgrid.
Вопрос в том, что если условия не выполняются, то Grid получается пустой.....как бы это обойти


 
Германн ©   (2007-06-22 02:32) [1]


> Lokk83   (22.06.07 02:25)
>
> Ночь добрая!
> Посдкажите, плиз, есть на форме dbgrid и таймер, который
> часто опрашивает базу на изменения(хранимые процедуры) и
> проверяет условия. если выполняется эти условия тогда выполняется
> запрос на выборку из таблицы привязанной к dbgrid.
> Вопрос в том, что если условия не выполняются, то Grid получается
> пустой.....как бы это обойти
>

Код давай! :)
Приведи свой код, найдут ошибку.


 
Lokk83   (2007-06-22 10:22) [2]

код следующий:

procedure opros;
datamodule3.qbefore.open;
before:=datamodule3.qBefore.fieldbyname("count").AsInteger;
//определяем количество записей в логе
      try
       spiItem.ddeitem :="b22:0.14";
       dec:=spiConv.RequestData(spiItem.DDEItem);
      finally
      end;
//опрос по dde некоего устройства много много раз
 datamodule3.qafter.open;
 after:=datamodule3.qafter.fieldbyname("count").AsInteger;

   if after>before then
  datamodule3.qLogView.Open;      
end;

procedure TmForm.realtimerTimer(Sender: TObject);
begin
RTlabel.Caption:=DateTimeToStr(Now);
    opros(Self);
end;

realtimer.interval:=500;

в итого он у меня либо пустой, всмысле dbgrid
либо , если убрать проверку условия, начинает с частотой в 500мс моргать, как быть?


 
Sergey13 ©   (2007-06-22 10:37) [3]

> [2] Lokk83   (22.06.07 10:22)
> он у меня либо пустой

Может он не пустой, а закрытый?


 
Jeer ©   (2007-06-22 10:40) [4]


> if after>before then
>   datamodule3.qLogView.Open;      


И в чем проблема ?
Почему он не должен быть пустым, если условие не выполнено ?


 
Jeer ©   (2007-06-22 10:41) [5]


> Может он не пустой, а закрытый?


Разумеется у него grid пустой т.к. датасет закрытый.
Интересно, что еще надо сказать автору, чтобы это стало для него очевидным.


 
ЮЮ ©   (2007-06-22 10:41) [6]

if after>before then
 datamodule3.qLogView.Open;

значит где-то ещё присутствкет  datamodule3.qLogView.Close;
там его убрать и вставить в пару с Open.


 
Sergey13 ©   (2007-06-22 10:45) [7]

> [2] Lokk83   (22.06.07 10:22)

Кстати, а зачем с такой частотой проверять количество записей ДО? Не проще ли будет принять последнее значение ПОСЛЕ?


 
Lokk83   (2007-06-22 10:52) [8]

наверное я чего то не понимаю....
че сделать то???!!!


 
Lokk83   (2007-06-22 10:53) [9]

таких кусочков:

try
      spiItem.ddeitem :="b22:0.14";
      dec:=spiConv.RequestData(spiItem.DDEItem);
     finally
     end;

около двухсот


 
ЮЮ ©   (2007-06-22 11:00) [10]

> наверное я чего то не понимаю....
> че сделать то???!!!


  if after>before then
    datamodule3.qLogView.Open;  

если к моменту проверки qLogView закрыт, то это где-то ведь делвется! В приведенноим тобой коде этого нет. Убрать закрытие там и сделать переоткрытие

    if after>before then begin
      datamodule3.qLogView.Close;  
      datamodule3.qLogView.Open;
      // а где Locate? Или жаждещь встречи с пользователями?
    end;


 
Desdechado ©   (2007-06-22 11:00) [11]

> Вопрос в том, что если условия не выполняются, то Grid получается
> пустой.....как бы это обойти
А чего надо-то? Оставить прежние данные? Так не закрывай датасет перед проверкой, закрывай перед переоткрытием (если оно есть).

ЗЫ вообще не понятно, зачем каждые полсекунды что-то проверять в БД
ЗЗЫ кстати, если за полсекунды все твои манипуляции не выполнятся,то стартует вторая копия процедуры, конфликтующая с первой, а там как снежный ком


 
Lokk83   (2007-06-22 11:10) [12]

если я не буду проверять каждые полсекунды, обновилось ли количество записей, то  grid будет мерцать
datamodule3.qLogView.Close;  
такого нет нигде!

> Или жаждещь встречи с пользователями?

это к чему?
Мне серьезно непонятно...
объясните че к чему


 
Sergey13 ©   (2007-06-22 11:16) [13]

> [12] Lokk83   (22.06.07 11:10)

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

Наоборот, он будет стоять как влитой. 8-)

> это к чему?

Это к тому, что пользователь пролистав твой грид до какой то дальней, заинтересовавшей его,  записи (сколько их кстати всего примерно?) "вдруг" переходит в начало. Я бы убил за это.


 
fdsa   (2007-06-22 11:18) [14]

может у тебя есть
datamodule3.qrLogView.Active := false;
?


 
ЮЮ ©   (2007-06-22 11:21) [15]

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

Никогда не проверяю - и не мерцает :)


> это к чему?

К тому, что если для отображения НД мне предоставлен грид, то я имею право полистоать его. После переоткрытия НД я не уверен, что останусь в том же месте глида, гди был раньше.


> datamodule3.qLogView.Close;  
> такого нет нигде!

Если бы не было закрытия то не пришлось бы открывать.
Значит есть datamodule3.qLogView.Active := false. Или откат/подтверждение транзакции. В IB6.x это, кажется, тоже приводит к закрытиям НД.


 
Lokk83   (2007-06-22 11:21) [16]


> Наоборот, он будет стоять как влитой. 8-)

так ведь не стоит....записей много, сейчас около 8000 тысяч
> может у тебя есть
> datamodule3.qrLogView.Active := false;
> ?


такого тоже нет нигде


 
ЮЮ ©   (2007-06-22 11:23) [17]

> такого тоже нет нигде


Тогда отладчик в зубы и брэкпоинт в метод закрытия DataSet-а.


 
Jeer ©   (2007-06-22 11:24) [18]


> такого тоже нет нигде


Тогда начни с чтения книжек.


 
Sergey13 ©   (2007-06-22 11:24) [19]

> [16] Lokk83   (22.06.07 11:21)
> так ведь не стоит....записей много, сейчас около 8000 тысяч

И ты их все в грид?!!!!!!!!!!!!!
Садист.


 
ЮЮ ©   (2007-06-22 11:35) [20]

> И ты их все в грид?!!!!!!!!!!!!!


Все они в гриде не побывают. Датасет-то переоткрывается неспроста :)


 
Desdechado ©   (2007-06-22 11:35) [21]

> сейчас около 8000 тысяч
Интересно, а сколько потом будет? Ты их отфетчить-то за полсекунды успеешь? А то снова бумс будет.


 
Sergey13 ©   (2007-06-22 11:37) [22]

> [20] ЮЮ ©   (22.06.07 11:35)
> Все они в гриде не побывают. Датасет-то переоткрывается
> неспроста :)

Тогда я предлагаю их распечатывать. 8-)


 
Lokk83   (2007-06-22 11:42) [23]

записи я урежу, не проблема....
но что с мерцанием делать???
увеличил щас таймер до 1000


 
Sergey13 ©   (2007-06-22 11:45) [24]

> [23] Lokk83   (22.06.07 11:42)
> но что с мерцанием делать???

Разобраться с задачей. Зачем их выводить вообще? Зачем обновлять с частотой, которая не позволяет человеку (ведь это для человека выводится?) ничего понять - природа его не дает таких возможностей.


 
Sergey13 ©   (2007-06-22 11:46) [25]

> [23] Lokk83   (22.06.07 11:42)

+ Книжки читать конечно.


 
Плохиш ©   (2007-06-22 11:49) [26]

Про книжки уже в [18] сказали... Не пойму только, почему ветка всё ещё не в начинающим?


 
Lokk83   (2007-06-22 11:50) [27]

потому что это лог событий, вот зачем их выводить


 
Плохиш ©   (2007-06-22 11:53) [28]


> Lokk83   (22.06.07 11:50) [27]
> потому что это лог событий, вот зачем их выводить

Дай возможность пользователю накладывать различные фильтры на этот вывод и он будет тебе очень благодарен...


 
Sergey13 ©   (2007-06-22 11:56) [29]

> [27] Lokk83   (22.06.07 11:50)

Ты лично можешь оценить объемный (очень) поток информации меняющийся каждые полсекунды? Как долго?
Что за события и что в них такого интересного, что на них надо смотреть постоянно?


 
Lokk83   (2007-06-22 11:59) [30]

события о состоянии датчиков в системе АПТ(авт. пожаротушение)


 
ЮЮ ©   (2007-06-22 12:08) [31]

> события о состоянии датчиков в системе АПТ(авт. пожаротушение)

Тогда не DBгрид показывать надо, а продумать нормальный интерфейс. В Виде тех же датчиков. Датчик то один, у него показания меняются. А у тебя замерянное значение атрибута в сущность превратилось.


 
Плохиш ©   (2007-06-22 12:12) [32]


> Lokk83   (22.06.07 11:59) [30]
> события о состоянии датчиков в системе АПТ(авт. пожаротушение)

Хоть бы фильмом каких посмотрел, там много интерфейсов показано и ни одного в том виде как ты пытаешься реализовать.
[31] +1


 
Sergey13 ©   (2007-06-22 12:58) [33]

> [30] Lokk83   (22.06.07 11:59)
> авт. пожаротушение

Теперь понятно почему такие пожары в России стали происходить (типа недавнего в доме пристарелых). Автоматизировать взялись собственными силами.

Смешно. Если бы не было так грустно.


 
Jeer ©   (2007-06-22 13:05) [34]


> Sergey13 ©   (22.06.07 12:58) [33]


Мне помнится тут пробегал какой-то "писатель" и спрашивал насчет win98 и атомной станции.
А вообще, таких примеров, когда дилетанты начинают ваять ответственный софт -все больше и больше.


 
Lokk83   (2007-06-22 13:17) [35]

если вы этим не занимались никогда не надо лажать остальных хорошо?
не представляете как это работает, никто не просит.
Я вопрос свой четко поставил, как заставить dbgrid нормально отображать данные, при изменении в логах, логи обновляются не часто


 
Anatoly Podgoretsky ©   (2007-06-22 13:19) [36]

Не по таймеру!


 
Lokk83   (2007-06-22 13:23) [37]

а как ещё предлагате опрашивать контроллер?


 
Lokk83   (2007-06-22 13:42) [38]

или что вы имели ввиду под
> Anatoly Podgoretsky ©   (22.06.07 13:19) [36]
> Не по таймеру!


 
Virgo_Style ©   (2007-06-22 13:51) [39]

Гм... а что, собственно, выдают датчики? Если на выходе 0 или 1 (нет пожара/есть пожар), то, может, не надо выдавать "8000 тысяч" сообщений об отсутствии пожара, а надо одно о наличии?))


 
Плохиш ©   (2007-06-22 13:54) [40]


> Virgo_Style ©   (22.06.07 13:51) [39]

Так ему это и предложили в [31], но сразу пальцы распустились в [35] и сразу стало грустно и скучно...


 
Virgo_Style ©   (2007-06-22 13:57) [41]

Тогда использовать не DBGrid, а StringGrid, и пусть делает с ним когда и что хочет...


 
Lokk83   (2007-06-22 13:57) [42]

Работает так, у датчика есть несколько состояний(нрома, кз, пожар, обрыв, неисправность) каждый из них представляет собой на выходе либо 0 либо 1, в лог я заношу ТОЛЬКО изменения, и они действительно заносятся. мне нужно при наличи этих изменений перерисовывать dbgrid, чтобы оператор видел какой датчик во сколько изменил свое состояние напрмиер с норма на обрыв.
момент изменения я отлавливаю  вычислением количества строк в начале процедуры и в конце и сравниваю их если больше тогда  надо перезапрашивать данные, если нет то нет
Как мне сделать чтобы это нормально работало.....


 
Плохиш ©   (2007-06-22 14:03) [43]


> момент изменения я отлавливаю  вычислением количества строк
> в начале процедуры и в конце и сравниваю их если больше
> тогда  надо перезапрашивать данные, если нет то нет

Так и сравнивай время последней записи с временем последнего изменения. + [6]


 
Johnmen ©   (2007-06-22 14:04) [44]

"ЭТО" никогда нормально работать не будет.
Прав Плохиш, грустно и скучно... А ещё немного тревожно...:)


 
Sergey13 ©   (2007-06-22 14:04) [45]

> [42] Lokk83   (22.06.07 13:57)

Сколько всего датчиков?


 
Lokk83   (2007-06-22 14:15) [46]

датчиков около 40, кстати, опрашивать она прекрасно успевает....
> Так и сравнивай время последней записи с временем последнего
> изменения. +

зачем это?


 
Плохиш ©   (2007-06-22 14:21) [47]


> зачем это?

Чтобы не считать "количества строк"


 
Lokk83   (2007-06-22 14:27) [48]

это будет быстрее?
кстати,  в стринг грид ручками получается надо забываить?


 
Sergey13 ©   (2007-06-22 14:31) [49]

> [46] Lokk83   (22.06.07 14:15)
> датчиков около 40
Ну и нарисуй 40 красных лампочек (можно компонентик какой нить красивый поискать для этого, можно просто Едит поставить с выводом кода состояния и выделением уветом) горящих или не горящих с указанием времени последней смнены состояния.


 
Lokk83   (2007-06-22 14:35) [50]

лампочки есть, все есть, а НАДО чтобы была таблица ещё!


 
Sergey13 ©   (2007-06-22 14:38) [51]

> [50] Lokk83   (22.06.07 14:35)

Раз есть лампочки - зачем таблицу то обновлять по таймеру?


 
Mike Kouzmine ©   (2007-06-22 14:59) [52]

Sergey13 ©   (22.06.07 14:38) [51] Чтобы быть уверенным, что оператор понял. Лучше перебдеть, чем недобдеть, а так же видеть, что программа не зависла, а выполняет серьезную раьоту.


 
Sergey13 ©   (2007-06-22 15:00) [53]

> [52] Mike Kouzmine ©   (22.06.07 14:59)

Не факт, что оператор что то поймет в гриде с обновлением 2 раза в секунду. 8-)


 
Lokk83   (2007-06-22 15:26) [54]

в том то и дело что не надо его обновлять два раза в секунду, а нужно только при изменениях в таблице, а изменения происходят не часто


 
Sergey13 ©   (2007-06-22 15:29) [55]

> [54] Lokk83   (22.06.07 15:26)

Ну так лампочка (которая есть) загорелась - пусть ткнет в нее мышой и посмотрит детализацию. Обмозговал увиденной, обновить захотел - пусть еще ткнет.


 
Lokk83   (2007-06-22 15:48) [56]

так не положено, положено чтобы была графическая индикация и табличный вид


 
fdsa   (2007-06-22 15:57) [57]

Видел одну программу, фирма Спецавтоматика г.Тверь разрабатывает,
у них, есть графический интерфейс, где все красиво нарисовано. Если меняется состояние датчика - пишется событие в БД, меняется картинка отображающая состояние датчика, и есть что-то типа листбокса, который выскакивает поверх всех окон, куда добавляется сообщение вида:
22.06.2007 15:48:46 ШЛЕЙФ ХХХ ДАТЧИК УУУ - бла-бла-бла.


 
Плохиш ©   (2007-06-22 16:02) [58]


> Lokk83   (22.06.07 15:48) [56]

АФФтар, ты уже нашёл, в какой момент твоя таблица закрывается и почему?


 
Lokk83   (2007-06-22 17:11) [59]

нет, не нашел, у меня примерно тоже самое что в [57].
работает все кроме нормального отображения списка событий
но у меня действительно почему то происходит очистка датасета
мне кажется


 
Anatoly Podgoretsky ©   (2007-06-22 19:59) [60]

> Lokk83  (22.06.2007 17:11:59)  [59]

Плюнь, пойди выпей пива и стране полезно.


 
Mike Kouzmine ©   (2007-06-22 21:58) [61]

Поставь обновление в событик переключающее цвет в лампочке.



Страницы: 1 2 вся ветка

Текущий архив: 2007.07.15;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.016 c
2-1182421598
beg
2007-06-21 14:26
2007.07.15
Создание формы по имени класса


15-1181532063
evgewik
2007-06-11 07:21
2007.07.15
работа


1-1179149236
Strate
2007-05-14 17:27
2007.07.15
Вытащить запущенный экземпляр.


1-1179159059
Dmitry_177
2007-05-14 20:10
2007.07.15
прокручивание таблицы StringGrid колесиком


15-1182165213
ILUT
2007-06-18 15:13
2007.07.15
Задать положение компонента