powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / автозаполение cxComboBox
22 сообщений из 22, страница 1 из 1
автозаполение cxComboBox
    #39769743
TsYekaterina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! подскажите, как оптимизировать процедуру автозаполнения 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
автозаполение cxComboBox
    #39769751
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
автозаполение cxComboBox
    #39769755
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsYekaterina,

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

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

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

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

Лукап комбо не помог, также медленно происходит обработка события.
Какого такого "события" в лукапе?
...
Рейтинг: 0 / 0
автозаполение cxComboBox
    #39769927
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
автозаполение cxComboBox
    #39769928
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень долго ждать
Сколько времени отрабатывается запрос ?
Сколько записей в результирующем наборе ?
...
Рейтинг: 0 / 0
автозаполение cxComboBox
    #39769931
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus,

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

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

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

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

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

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

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

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


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