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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2011, 14:19   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Оптимизация запроса, удаление повторений

Добрый вечер! Решил оптимизировать запрос заполнения комбобоксов. Сейчас сделал вот такой код:
Код:
procedure TForm2.mniN35Click(Sender: TObject);
begin
 Form10.Show;
 Form2.qry1.Active:=False;
 Form2.qry1.SQL.Clear;
 Form2.qry1.SQL.Text:='select distinct ID,REGNUMBER,ARMIS,ARMDSV,DATAPST,DATAOBR,TIMEOBR,DATASNYT,KATEGORIA,OGRN,INN,FIOOLD,FIONEW,ST,DATAZAYV,NUMBER,ANSWER from jurnal';
 Form2.qry1.Open;
 Form10.sComboBox1.Clear;
 Form10.sComboBox2.Clear;
 Form10.sComboBox3.Clear;
 Form10.sComboBox4.Clear;
 Form10.sComboBox5.Clear;
 Form10.sComboBox6.Clear;
 Form10.sComboBox7.Clear;
 Form10.sComboBox12.Clear;
 Form10.sComboBox8.Clear;
 Form10.sComboBox14.Clear;
 Form10.sComboBox13.Clear;
 Form10.sComboBox11.Clear;
 Form10.sComboBox10.Clear;
 Form2.qry1.First;
 while not Form2.qry1.Eof do
 begin
   Form10.sComboBox1.Items.Add(Form2.qry1.FieldByName('DATAZAYV').AsString);
   Form10.sComboBox2.Items.Add(Form2.qry1.FieldByName('NUMBER').AsString);
   Form10.sComboBox3.Items.Add(Form2.qry1.FieldByName('FIOOLD').AsString);
   Form10.sComboBox4.Items.Add(Form2.qry1.FieldByName('ANSWER').AsString);
   Form10.sComboBox5.Items.Add(Form2.qry1.FieldByName('DATAOBR').AsString);
   Form10.sComboBox6.Items.Add(Form2.qry1.FieldByName('TIMEOBR').AsString);
   Form10.sComboBox7.Items.Add(Form2.qry1.FieldByName('OGRN').AsString);
   Form10.sComboBox12.Items.Add(Form2.qry1.FieldByName('INN').AsString);
   Form10.sComboBox8.Items.Add(Form2.qry1.FieldByName('FIONEW').AsString);
   Form10.sComboBox14.Items.Add(Form2.qry1.FieldByName('ST').AsString);
   Form10.sComboBox13.Items.Add(Form2.qry1.FieldByName('DATASNYT').AsString);
   Form10.sComboBox11.Items.Add(Form2.qry1.FieldByName('KATEGORIA').AsString);
   Form2.qry1.Next;
 end;
 Form2.qry1.Active:=False;
 Form2.qry1.SQL.Clear;
 Form2.qry1.SQL.Text:='select ID,REGNUMBER,ARMIS,ARMDSV,DATAPST,DATAOBR,TIMEOBR,DATASNYT,KATEGORIA,OGRN,INN,FIOOLD,FIONEW,ST,DATAZAYV,NUMBER,ANSWER from jurnal';
 Form2.qry1.Open;
 Form2.sStatusBar3.Panels[1].Text:='[ ' + IntToStr(Form2.qry1.RecordCount) + ' ]'; 
end;
Код работает гораздо быстрее (раньше для каждого комбобокса был свой запрос), но в в комбобоксах все равно остаются повторяющиеся строчки. Хотя присутствует DISTINCT. Как избавиться от повторений?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.04.2011, 14:59   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

хых... так не удивительно, что остаются. у тебя же дистинкт по всем полям работает, а не по какому-то конкретному.
тут уж выбирай, либо делать N-ное количество запросов, чтобы дистинкт работал ожидаемо для тебя, либо вручную чисти повторения (это NlogN). А за линию ты никак от повторений не избавишься.
mMAg вне форума Ответить с цитированием
Старый 30.04.2011, 15:11   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Нет, под каждый список делать запрос не вариант, т.к. размер БД будет увеличиваться и при обновлении списков будет увеличиваться время заполнения списков. Буду тогда искать другой вариант.
Самое интересное, что у меня и такой код не заполняет корректно комбик, добавляет туда и пустые записи и повторяющиеся. Код:
Код:
procedure TForm2.mniN35Click(Sender: TObject);
begin
 Form10.Show;
 Form2.qry1.Active:=False;
 Form2.qry1.SQL.Clear;
 Form2.qry1.SQL.Text:='select distinct ID,REGNUMBER,ARMIS,ARMDSV,DATAPST,DATAOBR,TIMEOBR,DATASNYT,KATEGORIA,OGRN,INN,FIOOLD,FIONEW,ST,DATAZAYV,NUMBER,ANSWER from jurnal';
 Form2.qry1.Open;
 Form10.sComboBox9.Clear;
 Form2.qry1.First;
 while not Form2.qry1.Eof do
 begin
   Form10.sComboBox9.Items.Add(Form2.qry1.FieldByName('REGNUMBER').AsString);
   Form2.qry1.Next;
 end;
 Form2.qry1.Active:=False;
 Form2.qry1.SQL.Clear;
 Form2.qry1.SQL.Text:='select ID,REGNUMBER,ARMIS,ARMDSV,DATAPST,DATAOBR,TIMEOBR,DATASNYT,KATEGORIA,OGRN,INN,FIOOLD,FIONEW,ST,DATAZAYV,NUMBER,ANSWER from jurnal';
 Form2.qry1.Open;
 Form2.sStatusBar3.Panels[1].Text:='[ ' + IntToStr(Form2.qry1.RecordCount) + ' ]';
end;
Чудеся прям, блин..

Разобрался. Надо было просто использовать другой кверик и все заработало. Выше приведенный код - 100% рабочий.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 30.04.2011 в 16:04.
artemavd вне форума Ответить с цитированием
Старый 30.04.2011, 16:45   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

мне кажется, что некоторое время назад, Вы, artemavd, уже поднимали этот вопрос.

И я повторю тот совет, который я Вам давал.
Вместо Form10.sComboBox1.Items.Add(sssss)
напишите что-то вроде:
Код:
if Form10.sComboBox1.Items.IndexOf(sssss)<0 then
  Form10.sComboBox1.Items.Add(sssss);
и ВСЁ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2011, 16:52   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Эта проверка означает, что если добавляемого итема нет, то добавить его?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое удаление формы или запроса s8259 Microsoft Office Access 8 21.12.2010 23:52
оптимизация запроса pray_driver SQL, базы данных 3 13.12.2010 15:40
Оптимизация запроса za4ot SQL, базы данных 0 11.06.2010 09:24
Оптимизация SQL запроса Phantom SQL, базы данных 4 24.09.2009 16:07
Оптимизация sql запроса в хп eda SQL, базы данных 3 28.07.2009 11:57