Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление DBGRID по таймеру [D7, IB6.x]


Страницы:   1 2 3 4

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мс моргать, как быть?


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо