Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2010, 11:25   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Тормоза перемещения по DBGrid

Вдруг, не помню после чего, появились небольшие задержки во время перемещения по таблице. Они конечно маленькие, но все же неприятно смотреть не них. В обед все работало нормально. Связано ли это с прорисовкой цветов? Не знаю. До этого и с раскраской все работало. Как увеличить скорость перемещния по БД?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 12:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Надо смотреть проект. Так не определишь
1) Либо прорисовка тормозит
2) Либо подкачка данных (если она есть)
3) Либо что-то в коде выполняется при переходах, и нуждается в оптимизировании
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2010, 12:34   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

отпуск у телепатов затянулся
код в студию
soleil@mmc вне форума Ответить с цитированием
Старый 12.10.2010, 12:49   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Что у тебя по событию OnDraw ?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 12.10.2010, 12:55   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Что у тебя по событию OnDraw ?
У какого компонента имеете ввиду?
У меня с прорисовкой только на DBGridEh-e большой код, который был получен в одной из тем в разделе "БД в Delphi"
Вот этот код:
Код:
//начало
procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
 if (gdSelected in State) and not (gdFocused in State) then Exit;
 //åñëè íîìåð êîíòðàêòà îòñóòñòâóåò èëè ìåíüøå 3
 if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '02') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '03') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '04') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '05') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '06') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '07') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '08') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '09') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '10') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
    (Form1.ADOQuery1.FieldValues['Number contract'] = '') then
  begin
    Form1.Label62.Font.Color:=clRed;
    Form1.Label62.Caption:='Îøèáêà: îòñóòñòâóåò íîìåð êîíòðàêòà!';
    Form1.Label63.Caption:='';
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clRed;
  end;

  //åñëè íîìåð êîíòðàêòà åñòü è >= 3
 if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '02') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '03') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '04') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '05') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '06') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '07') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '08') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '09') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '10') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
     (Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
     (Length(Form1.ADOQuery1.FieldValues['Number contract']) > 3)  then
  begin
    Form1.Label62.Caption:='';
    Form1.Label63.Caption:='';
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clGreen;
  end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 12:55   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
//продолжение
 //åñëè íîìåð êîíòðàêòà îòñóòñòâóåò èëè ìåíüøå 3
 if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '02') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '03') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '04') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '05') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '06') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '07') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '08') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '09') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '10') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
    (Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
    (Length(Form1.ADOQuery1.FieldValues['Number contract']) < 3)  then
  begin
    Form1.Label62.Font.Color:=clGreen;
    Form1.Label62.Caption:='èñïðàâëåíî!';
    Form1.Label63.Font.Color:=clRed;
    Form1.Label63.Caption:='Îøèáêà: êîëè÷åñòâî ñèìâîëîâ â íîìåðå ' + #13#10 +
                           'êîíòðàêòà äîëæíî áûòü áîëüøå 3!';
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clRed;
  end;

 //åñëè íîìåð êîíòðàêòà îòñóòñòâóåò èëè ìåíüøå 3
 if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '02') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '03') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '04') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '05') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '06') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '07') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '08') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '09') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '10') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
    (Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
    (Length(Form1.ADOQuery1.FieldValues['Number contract']) > 3)  then
  begin
    Form1.Label62.Font.Color:=clGreen;
    Form1.Label62.Caption:='èñïðàâëåíî!';
    Form1.Label63.Font.Color:=clGreen;
    Form1.Label63.Caption:='èñïðàâëåíî!';
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clGreen;
  end;

 //åñëè íîìåð êîíòðàêòà îòñóòñòâóåò èëè ìåíüøå 3
 if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '02') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '03') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '04') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '05') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '06') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '07') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '08') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '09') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '10') or
    (Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
    (Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
    (Length(Form1.ADOQuery1.FieldValues['Number contract']) >= 3)  then
  begin
    Form1.Label62.Font.Color:=clGreen;
    Form1.Label62.Caption:='èñïðàâëåíî!';
    Form1.Label63.Font.Color:=clGreen;
    Form1.Label63.Caption:='èñïðàâëåíî!';
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clGreen;
  end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 13:03   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

чота под это условие
Код:
(Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
     (Length(Form1.ADOQuery1.FieldValues['Number contract']) > 3)  then
у тебя сразу 3 куска кода подпадает, а обработчики разные

а так никакого криминала не замечено
может на афтерскролл что-то повесил?

ктстаи, а зачем на раскраске грида лейбаки писать?
soleil@mmc вне форума Ответить с цитированием
Старый 12.10.2010, 13:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if ((Form1.ADOQuery1.FieldValues['DocType'] = '01') or
(Form1.ADOQuery1.FieldValues['DocType'] = '02') or
(Form1.ADOQuery1.FieldValues['DocType'] = '03') or
(Form1.ADOQuery1.FieldValues['DocType'] = '04') or
(Form1.ADOQuery1.FieldValues['DocType'] = '05') or
(Form1.ADOQuery1.FieldValues['DocType'] = '06') or
(Form1.ADOQuery1.FieldValues['DocType'] = '07') or
(Form1.ADOQuery1.FieldValues['DocType'] = '08') or
(Form1.ADOQuery1.FieldValues['DocType'] = '09') or
(Form1.ADOQuery1.FieldValues['DocType'] = '10') or
(Form1.ADOQuery1.FieldValues['DocType'] = '99')) and
(Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
(Length(Form1.ADOQuery1.FieldValues['Number contract']) >= 3) then
Ой как жестоко то...
1) А почему не задать в запросе вычисляемое поле, туда втюхать все эти проверки, а потом проверять это поле на 1 или 0?
2) Если в запрос не хочешь пихнуть то хотя бы так:
Код:
 
with Form1.ADOQuery1 do begin
 if (pos(trim(FieldValues['DocType'].AsString),' 01 02 03 04 05 06 07 08 09 10 99')) and
       (Length(FieldValues['Number contract']) >= 3)  then
end;
Тут заметил:
Цитата:
(Form1.ADOQuery1.FieldValues['Number contract'] <> '') and
(Length(Form1.ADOQuery1.FieldValues['Number contract']) > 3) then
от проверки (Form1.ADOQuery1.FieldValues['Number contract'] <> '') можно избавится
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2010, 13:30   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
у тебя сразу 3 куска кода подпадает, а обработчики разные

а так никакого криминала не замечено
может на афтерскролл что-то повесил?
Да, согласен. Убрал это условие. Нет, там ничего не висит.
Цитата:
А почему не задать в запросе вычисляемое поле, туда втюхать все эти проверки, а потом проверять это поле на 1 или 0?
Нет, нельзя так. Это совершенно разные записи и не по порядку идут.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 13:44   #10
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

"Закомментируй" код в GetCellParams и посмотри изчезнут ли тормоза.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макросы перемещения в таблице Окоча Юра Microsoft Office Excel 2 22.01.2010 16:30
Как сделать чтобы во время поиска по таблице не было видно перемещения по dbgrid? alxsev БД в Delphi 4 10.04.2009 19:03
help! тормоза с DataTable?! billidean Общие вопросы .NET 2 24.08.2008 13:16
Тормоза винды Altera Операционные системы общие вопросы 4 08.07.2008 18:23
Контроль перемещения мыши Falling_Tear Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 29.11.2007 19:43