Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Вниз

Обновление 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;
Скачать: [xml.tar.bz2];

Наверх





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


3-1176905016
Sergey5
2007-04-18 18:03
2007.07.15
Неверное число записей возвращает запрос


2-1180971570
GoRdon
2007-06-04 19:39
2007.07.15
Как бы сделать PlayList?


2-1182464746
Lokk83
2007-06-22 02:25
2007.07.15
Обновление DBGRID по таймеру


2-1182514300
TStas
2007-06-22 16:11
2007.07.15
Как дождаться завершения процесса?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский