![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление DBGRID по таймеру [D7, IB6.x]
Lokk83 © (2007-06-22 02:25:00)Ночь добрая!
Посдкажите, плиз, есть на форме dbgrid и таймер, который часто опрашивает базу на изменения(хранимые процедуры) и проверяет условия. если выполняется эти условия тогда выполняется запрос на выборку из таблицы привязанной к dbgrid.
Вопрос в том, что если условия не выполняются, то Grid получается пустой.....как бы это обойти
Desdechado (2007-06-22 11:35:00) [41]> сейчас около 8000 тысяч
Интересно, а сколько потом будет? Ты их отфетчить-то за полсекунды успеешь? А то снова бумс будет.
ЮЮ (2007-06-22 11:35:00) [42]> И ты их все в грид?!!!!!!!!!!!!!
Все они в гриде не побывают. Датасет-то переоткрывается неспроста :)
Sergey13 (2007-06-22 11:24:00) [43]> [16] Lokk83 (22.06.07 11:21)
> так ведь не стоит....записей много, сейчас около 8000 тысяч
И ты их все в грид?!!!!!!!!!!!!!
Садист.
Jeer (2007-06-22 11:24:00) [44]
> такого тоже нет нигде
Тогда начни с чтения книжек.
ЮЮ (2007-06-22 11:23:00) [45]> такого тоже нет нигде
Тогда отладчик в зубы и брэкпоинт в метод закрытия DataSet-а.
Lokk83 (2007-06-22 11:21:00) [46]
> Наоборот, он будет стоять как влитой. 8-)
так ведь не стоит....записей много, сейчас около 8000 тысяч
> может у тебя есть
> datamodule3.qrLogView.Active := false;
> ?
такого тоже нет нигде
ЮЮ (2007-06-22 11:21:00) [47]> если я не буду проверять каждые полсекунды, обновилось ли
> количество записей, то grid будет мерцать
Никогда не проверяю - и не мерцает :)
> это к чему?
К тому, что если для отображения НД мне предоставлен грид, то я имею право полистоать его. После переоткрытия НД я не уверен, что останусь в том же месте глида, гди был раньше.
> datamodule3.qLogView.Close;
> такого нет нигде!
Если бы не было закрытия то не пришлось бы открывать.
Значит есть datamodule3.qLogView.Active := false. Или откат/подтверждение транзакции. В IB6.x это, кажется, тоже приводит к закрытиям НД.
fdsa (2007-06-22 11:18:00) [48]может у тебя есть
datamodule3.qrLogView.Active := false;
?
Sergey13 (2007-06-22 11:16:00) [49]> [12] Lokk83 (22.06.07 11:10)
> если я не буду проверять каждые полсекунды, обновилось ли
> количество записей, то grid будет мерцать
Наоборот, он будет стоять как влитой. 8-)
> это к чему?
Это к тому, что пользователь пролистав твой грид до какой то дальней, заинтересовавшей его, записи (сколько их кстати всего примерно?) "вдруг" переходит в начало. Я бы убил за это.
Lokk83 (2007-06-22 11:10:00) [50]если я не буду проверять каждые полсекунды, обновилось ли количество записей, то grid будет мерцать
datamodule3.qLogView.Close;
такого нет нигде!
> Или жаждещь встречи с пользователями?
это к чему?
Мне серьезно непонятно...
объясните че к чему
Desdechado (2007-06-22 11:00:00) [51]> Вопрос в том, что если условия не выполняются, то Grid получается
> пустой.....как бы это обойти
А чего надо-то? Оставить прежние данные? Так не закрывай датасет перед проверкой, закрывай перед переоткрытием (если оно есть).
ЗЫ вообще не понятно, зачем каждые полсекунды что-то проверять в БД
ЗЗЫ кстати, если за полсекунды все твои манипуляции не выполнятся,то стартует вторая копия процедуры, конфликтующая с первой, а там как снежный ком
ЮЮ (2007-06-22 11:00:00) [52]> наверное я чего то не понимаю....
> че сделать то???!!!
if after>before then
datamodule3.qLogView.Open;
если к моменту проверки qLogView закрыт, то это где-то ведь делвется! В приведенноим тобой коде этого нет. Убрать закрытие там и сделать переоткрытие
if after>before then begin
datamodule3.qLogView.Close;
datamodule3.qLogView.Open;
// а где Locate? Или жаждещь встречи с пользователями?
end;
Lokk83 (2007-06-22 10:53:00) [53]таких кусочков:
try
spiItem.ddeitem :='b22:0.14';
dec:=spiConv.RequestData(spiItem.DDEItem);
finally
end;
около двухсот
Lokk83 (2007-06-22 10:52:00) [54]наверное я чего то не понимаю....
че сделать то???!!!
Sergey13 (2007-06-22 10:45:00) [55]> [2] Lokk83 (22.06.07 10:22)
Кстати, а зачем с такой частотойпроверять количество записей ДО? Не проще ли будет принять последнее значение ПОСЛЕ?
ЮЮ (2007-06-22 10:41:00) [56]if after>before then
datamodule3.qLogView. Open;
значит где-то ещё присутствкет datamodule3.qLogView. Close;
там его убрать и вставить в пару с Open.
Jeer (2007-06-22 10:41:00) [57]
> Может он не пустой, а закрытый?
Разумеется у него grid пустой т.к. датасет закрытый.
Интересно, что еще надо сказать автору, чтобы это стало для него очевидным.
Jeer (2007-06-22 10:40:00) [58]
> if after>before then
> datamodule3.qLogView.Open;
И в чем проблема ?
Почему он не должен быть пустым, если условие не выполнено ?
Sergey13 (2007-06-22 10:37:00) [59]> [2] Lokk83 (22.06.07 10:22)
> он у меня либо пустой
Может он не пустой, а закрытый?
Lokk83 (2007-06-22 10:22:00) [60]код следующий:
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мс моргать, как быть?