Форум: "Начинающим";
Текущий архив: 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