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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 12:58   #1
drak2000
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 11
Печаль организация сложного фильтра

Привет всем. Вопрос такой. Нужно построить фильтр через SQL запрос для выборки из разных таблиц. Но сам запрос должен строиться в зависимости от того, что выбрал пользователь. Поясню... Есть на форме такой порядок: CheckBox1, ComboBox1(=,<>), DBLookupComboBox1(Table1). CheckBox2, ComboBox2(=,<>,~), DBLookupComboBox2(Table2).
ComboBox имеет Items (=, <> и т.д.) значит в запрос должно идти (IN, NOT IN...). При выборе значения из списка DBLookupComboBox включаем CheckBox. В sql запрос получается такого вида(если писать вручную):
Например если выбрано в ComboBox - IN
SELECT num FROM Table3 WHERE Num IN (SELECT Num FROM Table1 WHERE Num=1)
Сложные фильтры еще не писал, помогите...
drak2000 вне форума Ответить с цитированием
Старый 13.12.2010, 02:01   #2
palevg
Пользователь
 
Аватар для palevg
 
Регистрация: 03.10.2010
Сообщений: 77
По умолчанию

Сложные фильтры... Звучит страшно Но по сути у Вас уже написан пример начала такого фильтра.
Чем помочь - тут даже и не знаю. Уверен, что методом проб и ошибок дойдёте до нужного кода.
Могу привести пример своего, вдруг поможет ))))
Превью: на форме один грид (в нём отображается результат запроса), три RadioGroup и пять груп ComboBox+ComboBox+Edit, а также парочка DateEdit - это компоненты, на основании использования или неиспользования которых и строится сложный фильтр.
Код:
  Data.qEnterprs.SQL.Clear;
  StSQL:='select * from enterprs where Id in (select EnterpriseId from ';
  if rgEnterprises.ItemIndex=0 then begin
    StSQL:=StSQL+'orders where State='+IntToStr(rgOrders.ItemIndex);
    StatusBar1.Panels[1].Text := 'Фільтр: заяви';
    StatusBar1.Panels[2].Text := 'Стан: ' + rgOrders.Items[rgOrders.ItemIndex]
  end
   else begin
     StSQL:=StSQL+'licenze where State';
     StatusBar1.Panels[1].Text := 'Фільтр: ліцензії';
     StatusBar1.Panels[2].Text := 'Стан: ' + rgLicenses.Items[rgLicenses.ItemIndex];
     case rgLicenses.ItemIndex of
     0:begin
         StSQL:=StSQL+'>=0';
         bbNewOrder.Enabled:=True
       end;
     1:begin
         StSQL:=StSQL+'=0 and DateLicenz<='#39+DateToStr(Date)+#39' and DateClose>='#39+DateToStr(Date)+#39;
         bbNewOrder.Enabled:=True
       end;
     2:begin
         StSQL:=StSQL+'=1';
         bbNewOrder.Enabled:=False
       end;
     3:begin
         StSQL:=StSQL+'=3';
         bbNewOrder.Enabled:=False
        end;
     4:begin
         StSQL:=StSQL+'=0 and DateClose<'#39+DateToStr(Date)+#39;
         bbNewOrder.Enabled:=False
        end;
     end;
     if ((Edit5.Text<>'') or ((DateEdit1.Text<>'  .  .    ') and (DateEdit2.Text<>'  .  .    '))) then begin
       if Edit5.Text<>'' then begin
        case ComboBox5.ItemIndex of
          1:StSQL:=StSQL+' and NumLicenze like '#39+Edit5.Text+'%'#39;
          2:StSQL:=StSQL+' and NumLicenze='#39+Edit5.Text+#39;
          3:StSQL:=StSQL+' and NumLicenze like '#39'%'+Edit5.Text+'%'#39;
          4:StSQL:=StSQL+' and NumLicenze like '#39'%'+Edit5.Text+#39;
        end;
       end else begin
           case ComboBox6.ItemIndex of
           1:StSQL:=StSQL+' and DateLicenz>='#39+DateEdit1.Text+#39' and DateLicenz<='#39+DateEdit2.Text+#39;
           2:StSQL:=StSQL+' and DateClose>='#39+DateEdit1.Text+#39' and DateClose<='#39+DateEdit2.Text+#39;
         end;
       end;
     end;
   end;
  StSQL:=StSQL+')';
  Data.qEnterprs.SQL.Add(StSQL);
  StSQL:='';
  if Edit2.Text<>'' then begin
    StSQL:='and NameEnterpr';
    case ComboBox2.ItemIndex of
      1:StSQL:=StSQL+' like '#39+Edit2.Text+'%'#39;
      2:StSQL:=StSQL+'='#39+Edit2.Text+#39;
      3:StSQL:=StSQL+' like '#39'%'+Edit2.Text+'%'#39;
      4:StSQL:=StSQL+' like '#39'%'+Edit2.Text+#39;
    end;
  end;
  if Edit1.Text<>'' then begin
    if StSQL<>'' then StSQL:=StSQL+' ';
    StSQL:=StSQL+'and Ident';
    case ComboBox1.ItemIndex of
      1:StSQL:=StSQL+' like '#39+Edit1.Text+'%'#39;
      2:StSQL:=StSQL+'='#39+Edit1.Text+#39;
      3:StSQL:=StSQL+' like '#39'%'+Edit1.Text+'%'#39;
      4:StSQL:=StSQL+' like '#39'%'+Edit1.Text+#39;
    end;
  end;
  if Edit3.Text<>'' then begin
    if StSQL<>'' then StSQL:=StSQL+' ';
    case ComboBox4.ItemIndex of
      0:StSQL:=StSQL+'and AddressDeFacto';
      1:StSQL:=StSQL+'and Region';
    end;
    case ComboBox3.ItemIndex of
      1:StSQL:=StSQL+' like "'+Edit3.Text+'%"';
      2:StSQL:=StSQL+'="'+Edit3.Text+'"';
      3:StSQL:=StSQL+' like "%'+Edit3.Text+'%"';
      4:StSQL:=StSQL+' like "%'+Edit3.Text+'"';
    end;
  end;
  Data.qEnterprs.SQL.Add(StSQL);
  Data.qEnterprs.SQL.Add('order by ' + SortedColumn.FieldName);
  Data.qEnterprs.Open;
  StatusBar1.Panels[0].Text := 'Кількість: ' + IntToStr(Data.qEnterprs.RecordCount);
  dgEnterprises.SetFocus;
  Data.qEnterprs.EnableControls;
По соотношению цена-качество, халявное пиво не имеет конкурентов.
palevg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание сложного списка qwerty11 Microsoft Office Excel 6 06.08.2010 11:25
вывод сложного текста в delphi akrandval Помощь студентам 1 05.06.2010 23:38
отображение сложного интерфейса приложения Lokos Общие вопросы Delphi 7 03.06.2010 02:29
Pascal - ничего сложного!=) nes@ Помощь студентам 1 21.02.2010 19:50
Создание Сложного запроса chugo Microsoft Office Access 3 13.11.2009 15:28