Главная страница
    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] и сразу стало грустно и скучно...



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

Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.058 c
15-1181745308
Ломброзо
2007-06-13 18:35
2007.07.15
Короче, я тоже вернулся


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


6-1166255556
>>DEATH<<
2006-12-16 10:52
2007.07.15
регер


15-1182094571
Nic
2007-06-17 19:36
2007.07.15
Nokia PC Siute не видит телефон


15-1181234733
Sergius_P
2007-06-07 20:45
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский