Topic: Помогите с оптимизацией кода

Доброй ночи Уважаемые!
Все думал думал про оптимизацию, откладывал в долгий ящик, но теперь когда в гриде имеется около 2 тысяч записей появляются тормоза.
Основная причина связана с раскраской по статусу комбобокса при наведнии мышью.
Другая причина в постоянном dbUpdate при клике (так как в базе работаем на 4 компьютерах и поддерживаем актуальные данные)
Может как то можно оптимизировать код, наткнулся на форуме про процедуры BeginUpdate, EndUpdate, но нечего про их применение не нашел. Буду благодарен за любую информацию
С Уважением Дмитрий

procedure Form1_TableGrid1_OnMouseMove (Sender: string; Shift, Alt, Ctrl: boolean; X, Y: Integer);
var
   i,c: integer;
begin
     c := Form1.TableGrid1.RowCount-1; 
     for i := 0 to c do 
     begin
          if Form1.TableGrid1.Cells[8,i] = 'Принято' then Form1.TableGrid1.Cell[8,i].Color := clYellow;
          if Form1.TableGrid1.Cells[8,i] = 'Ремонтируется' then Form1.TableGrid1.Cell[8,i].Color := clAqua;
          if Form1.TableGrid1.Cells[8,i] = 'Готов' then Form1.TableGrid1.Cell[8,i].Color := clLime;
          if Form1.TableGrid1.Cells[8,i] = 'На диагностике' then Form1.TableGrid1.Cell[8,i].Color := clSilver;
          if Form1.TableGrid1.Cells[8,i] = 'Без ремонта' then Form1.TableGrid1.Cell[8,i].Color := clRed;
          if Form1.TableGrid1.Cells[8,i] = 'Согласовать' then Form1.TableGrid1.Cell[8,i].Color := clSkyBlue;
          if Form1.TableGrid1.Cells[8,i] = 'Поиск зип' then Form1.TableGrid1.Cell[8,i].Color := cl3DLight;
          if Form1.TableGrid1.Cells[8,i] = 'Ожидает запчасти' then Form1.TableGrid1.Cell[8,i].Color :=     clFuchsia;
          if Form1.TableGrid1.Cells[9,i] = 'Нет' then Form1.TableGrid1.Cell[9,i].Color :=     clInactiveCaption;
          if Form1.TableGrid1.Cells[9,i] = 'Да' then Form1.TableGrid1.Cell[9,i].Color :=     clLime;
          if Form1.TableGrid1.Cells[10,i] = 'Нет' then Form1.TableGrid1.Cell[10,i].Color :=     clInactiveCaption;
          if Form1.TableGrid1.Cells[10,i] = 'Да' then Form1.TableGrid1.Cell[10,i].Color :=     clLime;
          end;
          end;
procedure Form1_TableGrid1_OnClick (Sender: string);

begin
   Form1.TableGrid1.dbUpdate; //обновление основной таблицы с ремонтами
   Form1.TableGrid2.dbUpdate; // обновление задач для приемки
   Form1.Button5.Click; // прикручен поиск к кнопке для вывода детальной информации о ремонте
   Form1.Button8.Click; // прикручен поиск к кнопке для вывода детальной информации о запчастях
   end;

Re: Помогите с оптимизацией кода

Приветствую,


Раскрашивать TableGrid в событии OnMouseMove плохая идея, вместо этого, используйте событие компонента OnChange, тогда раскраска будет происходить один раз, сразу после обновления содержимого компонента TableGrid.



Не совсем понял, а зачем постоянно обновлять таблицу на событии OnClick?

Dmitry.

Re: Помогите с оптимизацией кода

DriveSoft wrote:

Приветствую,


Раскрашивать TableGrid в событии OnMouseMove плохая идея, вместо этого, используйте событие компонента OnChange, тогда раскраска будет происходить один раз, сразу после обновления содержимого компонента TableGrid.



Не совсем понял, а зачем постоянно обновлять таблицу на событии OnClick?

Завтра на работе попробую изменить на OnChange

На событии OnClick завязано обновление грида (бывают моменты когда на одном компьютере добавили запись а на другом пока не обновить грид она не появляется, и еще через OnClick показывается детальная информация в других гридах

Post's attachments

Attachment icon Снимок.JPG 125.34 kb, 274 downloads since 2014-11-28 

Re: Помогите с оптимизацией кода

mitrich45 wrote:

На событии OnClick завязано обновление грида (бывают моменты когда на одном компьютере добавили запись а на другом пока не обновить грид она не появляется, и еще через OnClick показывается детальная информация в других гридах


к сожалению пока нет автоматического метода обновления данных в TableGrid, если другой пользователь внес изменения в базу.


В качестве оптимизации, можно вместо кнопки с действием "Поиск" использовать кнопку с действием "SQL запрос", где можно ограничивать количество выводимых записей в TableGrid, например не более 100, ведь редко когда нужен список всех записей.

Dmitry.