Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Фильтрация, снова фильтрация


Автор: Иван Помидоров 21.12.2003, 00:04
baaa.gif Люди, помогите! Мозг разрушается!!!

Делаю прогу с БД. Нужна фильтрация по нескольким полям.
Делаю так:

filtr:='';
filtr:='select* from journal.dbf where (regn= '+ maskedit1.text+') and ';
filtr:=filtr + ' (num= '+ maskedit2.text+ ') and ';
filtr:=filtr + ' (bortn= '+ maskedit3.text +') and ';
filtr:=filtr+ ' (datereg= '+datetostr(datetimepicker1.date)+ ') and ';
filtr:=filtr + '(name= '+ edit1.text +') and ';
filtr:=filtr + '(nreis= '+ maskedit4.text +') and ';
filtr:=filtr +' (daten='+ datetostr(datetimepicker2.date) +') and ';
filtr:=filtr +' (datek='+ datetostr(datetimepicker3.date) +') and ';
filtr:=filtr + '(nachr= '+ edit2.text +')';

showmessage(filtr); //Выводит такую строку select* from journal.dbf where
//(regn='666') and (num= '6') and (datereg= '18.12.2003') and (bortn= 'МИ4441') and (name= 'Ангара')
//and (nreis= '33') and (datek='12.04.1988') and (daten= '08.01.1988') and (nachr= 'Чернов')
{Такая запись точно есть. Причем если тоже самое написать в квери не запуская программу то он фильтрует без вопросов.
Но если программу запустить то сразу после вышеуказаного шоумессаджа вылетает ошибка: "Invalid use of keyword. Token:.2003)"
Причем сначала я пытался сделать через фильтред(тож в мессадже все правильно выводил) тож вылетала ошибка и укзывал он
на точку '.' Такое ощущение что он от даты отделяет год. Я эту дату уже и в переменную загонял, и строковой константой писал
ничего непомогает все эту лшибку выдает!!!} notify.gif

form1.query1.Close;
form1.query1.Open;
form1.query1.sql.clear;
form1.query1.sql.Add(filtr);
form1.query1.Active:=false;
form1.query1.Active:=true;

regn, num, bortn и тд это все поля БД.

Подскажите можт я гдето с апострофами напутал, хотя все уж перепробывал...а лучше пристрелите меня, чтоб не мучался. hmmm.gif

П.С. Повесить того кто придумал фильтрацию!!! mad.gif

Автор: Петрович 21.12.2003, 19:00
Цитата
filtr:='select* from journal.dbf where (regn= '+ maskedit1.text+') and ';

Надо-бы пробельчик между SELECT и *.
Цитата
form1.query1.Close;
form1.query1.Open;
form1.query1.sql.clear;
form1.query1.sql.Add(filtr);
form1.query1.Active:=false;
form1.query1.Active:=true;

Ну тут ты крут smile.gif. Можно проще - все это заменить на:
Код
form1.query1.sql.Text := filtr; // попутно, это автоматически закроет запрос
form1.query1.Open;

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