|
#1
|
|||
|
|||
SQL Запросы
Имеется база данных. Необходимо выбрать из базы данных, только те значения, которые соответствуют определенному условию. Но условие может и не выполниться. Если условие не выполнится, то будут выбраны все записи базы данных и код запроса будет выглядеть, следующим образом:
Код:
close; sql.Clear; sql.add('select *'); sql.add('from baza'); Но в коде также проверяются условия. Код:
close; sql.Clear; sql.add('select *'); sql.add('from baza'); if combobox1.text<>'' then begin sql.add('where'); sql.add('(komanda='''+form3.combobox1.text+''')'); end; Вот если условие не выполнится, то мне в проверке следующего условия снова прийдется писать Код:
if combobox2.text<>'' then begin sql.add('where'); и потом Код:
sql.add('(komanda='''+form3.combobox2.text+''')'); end; Но если выполнится два условия, то в SQL запросе будет два where, а это ошибка. Как быть? Последний раз редактировалось lmikle, 18.08.2011 в 21:24. |
#2
|
|||
|
|||
Код:
if (combobox1.text<>'') or (combobox2.text<>'') then sql.add('where'); if (combobox1.text<>'') then sql.add('(komanda='''+form3.combobox1.text+''')'); if (combobox2.text<>'') then sql.add('(komanda='''+form3.combobox2.text+''')'); Это если у тебя может быть только одно условие. Если 2 - то подумай как AND/OR добавить между ними. |
#3
|
||||
|
||||
Код:
query.Filtered:= false; query.Filter:= ''; if combobox1.text <> '' then query.Filter:= ' komanda = '''+combobox1.text+''' '; if combobx2.text <> '' then if query.Filter = '' then query.Filter:= ' komanda = '''+combobox2.text+''' ' else query.Filter:= query.Filter + ' and komanda = '''+combobox2.text+''' '; if (combobox1.text <> '') or (combobox2.text <> '') then query.Filtered:= true; Google в помощь Последний раз редактировалось Ildar-tsr, 19.08.2011 в 08:21. |
#4
|
|||
|
|||
Я выкрутился следующим образом
в строке запроса я пишу заведомо истинное условие (1>0) и это дает мне возможность написать where Если ни один из CheckBox не помечен то получаю SQL.text:='SELECT * FROM Certificate WHERE (1 > 0)'; и это означает выборку всей таблицы. Если пользоатель включает фильтр- то соответственно к этой строке добавляется условие. Перед AND пробел делать обязательно иначе в строке запроса AND сольется с предыд текстом и будет ошибка. Согласен, выглядит немного странно, но работает! Код:
SQL.text:='SELECT * FROM Certificate WHERE (1 > 0)'; if CheckBox1.Checked then SQL.add(' AND (CertifType=''просроченные'')'); if CheckBox2.Checked then SQL.add(Format(' AND (CertifNumber=%d)',[StrToInt(Edit3.Text)])); if CheckBox9.Checked then SQL.add(Format(' AND (FormNumber=''%s'')',[Edit4.Text])); |