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

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

Обновление данных в DBGrid [D6, IB6.x]


7E81h ©   (2004-12-18 21:21:00) 

Здравствуйте, уважаемые Мастера!
Прошу помощи!

Имеется DBGrid, связанный с IBQuery.
Нужно с определенным интервалом времени обновлять данные в DBGrid'е.
Использую следующий простейший код:


procedure TForm1.Timer1Timer(Sender: TObject);
var
 // nSaved: Integer;
 Bookmark: TBookmark;
begin
 with DataMod1 do begin
   // Сохранить номер текущей записи
   Bookmark:= IBQuery1.GetBookmark;
   // либо:
   //  nSaved:= IBQuery1.FieldByName('ID_NO').AsInteger;
   try
     // Обновить данные
     IBQuery1.Close;
     IBQuery1.Open;
     // Восстановить номер текущей записи
     IBQuery1.GotoBookmark( Bookmark );
     // либо:
     //  IBQuery1.Locate( 'ID_NO', nSaved, [] );
   finally
     IBQuery1.FreeBookmark( Bookmark );
   end;
 end;
end;


При этом иногда происходит мерцание DBGrid'а и в ряде
случаев его скроллинг.

Отключение DataSource на время обновления не дает результата,
так как при этом все равно происходит перерисовка DBGrid.

Установка DBGrid1.DefaultDrawing:= False не позволяет избежать
перерисовки фона, поэтому мерцание также не устраняет.

Установка DoubleBuffered:= True также не приводит к нужному результату.

Методы BeginUpdate и EndUpdate являются protected и недоступны.

Возможно ли каким-либо образом блокировать перерисовку DBGrid на
время обновления источника данных?

Можно ли избежать скроллинга DBGrid'а при восстановлении текущей записи после обновления?

Направьте, пожалуйста, на путь истинный!


7E81h   (2004-12-19 11:39:00) [1]

Спасибо большое!


Fin   (2004-12-18 23:11:00) [2]

На счет того Можно ли избежать скроллинга DBGrid'а не отвечу, так как с ходу не знаю и как то не задумывался, а вот по поводу того что ты ищешь предыдущую запись при помощи Bookmark, вызывает сомнение. Дело в том что после обновления источника данных возвращаемые записи могут оказаться в другой последовательности, а предыдущий Bookmark был првязан как раз к нобору данных до обновления. Не знаю как у теба, но у меня GotoBookmark после обновления устанавливается на такой же порядковыйномер записи что и до обновления, но сама запись после обновления уже переместилась в другое место.


Sergey_Masloff   (2004-12-18 21:32:00) [3]

Возможно ли каким-либо образом блокировать перерисовку DBGrid на
время обновления источника данных?


YourDataSet.DisableControls();
try
 переоткрываешь
finally
 YourDataSet.EnableControls();
end;


Наверх

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