Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.08.2011, 20:51
dmit2222 dmit2222 вне форума
Новичок
 
Регистрация: 16.04.2008
Сообщения: 51
Репутация: 10
По умолчанию 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  
Старый 18.08.2011, 21:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 19.08.2011, 06:11
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Код:
  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  
Старый 19.08.2011, 23:03
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Я выкрутился следующим образом
в строке запроса я пишу заведомо истинное условие (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]));
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter