Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автозаполение cxComboBox / 22 сообщений из 22, страница 1 из 1
05.02.2019, 16:27
    #39769743
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
Доброго дня! подскажите, как оптимизировать процедуру автозаполнения cxComboBox из БД?
очень долго ждать, когда появится форма.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TFormRedDetKarta.FormShow(Sender: TObject);
var i: integer;
begin
PloEdit.Text := StringReplace(PloEdit.Text, '.', ',', [rfReplaceAll, rfIgnoreCase]);//замена точки на запятую
Screen.Cursor := crHourGlass;
with ADOQuery1 do begin
    SQL.Clear;
    SQL.Add('SELECT ods FROM [\\SERVER-BUH\Dbf\dbf\n112.dbf] where n112.mr like ''%  4%'' ORDER BY ods');
    try Open;
    except
      on E:Exception do begin
        ShowMessage(E.Message);
        Exit;
      end;
    end;
  end;

  ParamComboBox1.Properties.Items.Clear;
  with DataSource1.DataSet do begin
    if not Eof then begin
      ParamComboBox1.Properties.Items.BeginUpdate;
      for i:=0 to RecordCount-1 do begin
        ParamComboBox1.Properties.Items.Add(FieldByName('ods').AsString);
        Next;
      end;
      Close;
      ParamComboBox1.Properties.Items.EndUpdate;
      if ParamComboBox1.Properties.Items.Count>0 then ParamComboBox1.ItemIndex:=-1;
    end;
  end;
  Screen.Cursor := crDefault;
end;


спасибо!
P.s. массив n112 большой.
...
Рейтинг: 0 / 0
05.02.2019, 16:39
    #39769751
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina
Код: sql
1.
2.
3.
4.
      for i:=0 to RecordCount-1 do begin
        ParamComboBox1.Properties.Items.Add(FieldByName('ods').AsString);
        Next;
      end;

красное - зачем оно?
...
Рейтинг: 0 / 0
05.02.2019, 16:44
    #39769755
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina,

перенести процедуру заполнения списка в другое место. К примеру, в событие открытия комбика.
...
Рейтинг: 0 / 0
05.02.2019, 16:55
    #39769760
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterinaP.s. массив n112 большой.
И тут точно-точно нужен комбо-бокс, а лукап-комбо - никак?
...
Рейтинг: 0 / 0
06.02.2019, 08:35
    #39769918
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
ma1tus,

это необходимо для того, чтобы перебирались строки, без цикла будет просто первая строка из бд.
...
Рейтинг: 0 / 0
06.02.2019, 08:52
    #39769921
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
Фэйтл Эра,

Лукап комбо не помог, также медленно происходит обработка события.
...
Рейтинг: 0 / 0
06.02.2019, 09:00
    #39769924
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina,

а смысл Next внутри этого цикла ?
...
Рейтинг: 0 / 0
06.02.2019, 09:05
    #39769925
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterinaФэйтл Эра,

Лукап комбо не помог, также медленно происходит обработка события.
Какого такого "события" в лукапе?
...
Рейтинг: 0 / 0
06.02.2019, 09:11
    #39769927
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
ma1tusTsYekaterina,

а смысл Next внутри этого цикла ?
имеется ввиду - почему нельзя что-то вроде ?TsYekaterina
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  Screen.Cursor := crHourGlass;
  try
    ...
    ParamComboBox1.Properties.Items.Clear;
    ParamComboBox1.Properties.Items.BeginUpdate;
    try    
      with DataSource1.DataSet do 
      begin
        First;
        while not Eof do 
        begin
          ParamComboBox1.Properties.Items.Add(FieldByName('ods').AsString);
          Next;          
        end;
        Close;
      end;
    finally
      ParamComboBox1.Properties.Items.EndUpdate;
      if ParamComboBox1.Properties.Items.Count>0 then ParamComboBox1.ItemIndex:=-1;
    end;     
  finally
    Screen.Cursor := crDefault;
  end;

...
Рейтинг: 0 / 0
06.02.2019, 09:14
    #39769928
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
очень долго ждать
Сколько времени отрабатывается запрос ?
Сколько записей в результирующем наборе ?
...
Рейтинг: 0 / 0
06.02.2019, 09:20
    #39769931
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
ma1tus,

всё, понял - протупил, сорри
...
Рейтинг: 0 / 0
06.02.2019, 09:29
    #39769936
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
DimaBr,

36,6 сек, это очень долго. всего записей 67741. бд vfp.
...
Рейтинг: 0 / 0
06.02.2019, 09:37
    #39769940
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
Если сам запрос выполняется 36 секунд, то что можно ускорить ?
Зачем вам в Комбике 67тыс записей ?
...
Рейтинг: 0 / 0
06.02.2019, 09:37
    #39769942
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
DimaBr,

пользователь так хочет.
...
Рейтинг: 0 / 0
06.02.2019, 09:43
    #39769943
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
Сам комбик заполняется за пол секунды
...
Рейтинг: 0 / 0
06.02.2019, 09:45
    #39769945
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterinaпользователь так хочет.
Это не аргумент. В конце концов пользователь хочет работать с данными. Но с 67 тыс. записей невозможно работать. Вам нужно определить, как пользователю будет удобно работать. Необходимо понять, для чего ему эти данные (раз комбик - то очевидно для выбора единственного варианта). Возможно, лучше заполнять после ввода пользователя первых символов.
...
Рейтинг: 0 / 0
06.02.2019, 09:49
    #39769950
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina,

попробовать убрать сортировку из запроса и перенести в ComboBox, пересмотреть условие в запросе, сменить драйвер для dbf.
...
Рейтинг: 0 / 0
06.02.2019, 10:00
    #39769954
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
pit_alex,

первый вариант делала, не помог.
...
Рейтинг: 0 / 0
06.02.2019, 10:02
    #39769955
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
пользователь так хочет.
Сомневаюсь что пользователю нужны в комбике именно 67к записей. Постарайтесь разбить список на группы и поместить группы в другой комбик.
...
Рейтинг: 0 / 0
06.02.2019, 10:04
    #39769956
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina,

если убрать like и сортировку на сколько уменьшается время выполнение запроса?
...
Рейтинг: 0 / 0
06.02.2019, 10:05
    #39769958
TsYekaterina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
pit_alex,

время то же самое, ничего не меняется.
...
Рейтинг: 0 / 0
06.02.2019, 10:06
    #39769959
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автозаполение cxComboBox
TsYekaterina,

тогда попробовать другой драйвер
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автозаполение cxComboBox / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]