![]() |
|
|
#1
|
|||
|
|||
|
Имеется база данных. Необходимо выбрать из базы данных, только те значения, которые соответствуют определенному условию. Но условие может и не выполниться. Если условие не выполнится, то будут выбраны все записи базы данных и код запроса будет выглядеть, следующим образом:
Код:
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;Последний раз редактировалось 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])); |