Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Поиск по нескольким полям


Автор: harakiri 7.5.2011, 22:12
Здравствуйте, есть приложение с гридом и четырьмя эдитами. Если эдиты пустые, то в гриде отображается полный список из таблицы. Если ввести в первый эдит условие поиска то в отображаются записи удовлетворяющие условию. Если ввести в два или больше грида, то до должны отображаться записи соответствующие всем условиям. Подскажите, как это реализовать с помощью запроса. Если делаю select * from table where p1 = p and p2 = pp, тогда он ничего не выводит если не заполнено хотя бы одно поле. Если делаю через "or", тогда он выводит запись если хотя б в одном эдите есть правильная запись, а в остальных может быть полная белиберда. Помогите пожалуйста. 

Автор: maniaks1 8.5.2011, 09:07
ну по идее как то так:

Код


function AddSQL(s,field,value:string):string;
begin
  if value<>'' then begin
    if s<>'' then s:=s+' AND ';
    s:=s+field+'='''+value+'''';
  end;
  AddSQL:=s;
end;


Код


Var sql:string;
begin

  if (Edit1.Text='') and (Edit2.Text='') and (Edit3.Text='') and (Edit4.Text='') then sql:='select * from table'
  else begin
    sql:='';

    sql:=AddSQL(sql, 'pole1', Edit1.Text);
    sql:=AddSQL(sql, 'pole2', Edit2.Text);
    sql:=AddSQL(sql, 'pole3', Edit3.Text);
    sql:=AddSQL(sql, 'pole4', Edit4.Text);

    sql:='select * from table where '+sql;
  end;

  ShowMessage(sql);
end;



т.е. в ручную сформировать запрос

Автор: superVad 9.5.2011, 10:56
Мне кажется, что это называется фильтрация, а не поиск.
Пиши через and. Проверяй заполнено ли поле и если там, что то есть, то добавляй это условие в запрос.

Автор: harakiri 10.5.2011, 18:24
Всем спасибо за отзывчивость, но нужно сделать именно SP. Как это реализовать на языке SQL?

Автор: superVad 10.5.2011, 20:52
Что есть SP?

Автор: harakiri 11.5.2011, 18:19
хранимая процедура

Автор: Vas 12.5.2011, 09:58
Цитата(harakiri @  7.5.2011,  22:12 Найти цитируемый пост)
Подскажите, как это реализовать с помощью запроса. Если делаю select * from table where p1 = p and p2 = pp, тогда он ничего не выводит если не заполнено хотя бы одно поле. Если делаю через "or", тогда он выводит запись если хотя б в одном эдите есть правильная запись, а в остальных может быть полная белиберда. Помогите пожалуйста.  




Цитата(harakiri @  10.5.2011,  18:24 Найти цитируемый пост)
Всем спасибо за отзывчивость, но нужно сделать именно SP. Как это реализовать на языке SQL? 

SQL и ХП слегка разные вещи. 

Для SQL, как тебе ранее писали, проверяй эдиты на введенные значения и формируй SQL запрос, затем его выполняй и смотри результат.

Для ХП передавай параметры из эдитов, также их проверяй на пустоту и формируй SQL запрос для курсора, открывай и возвращай из курсора выбранные записи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)