Неправильно работает фильтрация

Добрый вечер, сделал динамическую фильтрацию работает нормально кроме одного момента например когда ввожу дату и нажимаю применить фильтр работает но кода после даты ввожу еще один критерий для фильтрации до выдает ошибку "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом". Если не вводит дату то работает нормально. вот код фильтрации
procedure TForm3.sButton1Click(Sender: TObject);
begin
ADOQuery1.Filtered:=false;
if length(sComboBox1.text)>0 then
ADOQuery1.Filter:= ADOQuery1.Filter + ' and genre like '+QuotedStr('%'+sComboBox1.Text+'%') else
ADOQuery1.Filter:= 'genre like '+QuotedStr('%'+sComboBox1.Text+'%');
 
if length(sedit2.text)>0 then
if(length(sComboBox1.text)>0) then
ADOQuery1.Filter:= ADOQuery1.Filter + ' release_date like '+QuotedStr('%'+sEdit2.Text+'%') else
ADOQuery1.Filter:= 'release_date like  '+QuotedStr('%'+sEdit2.Text+'%');
 
if length(sedit3.text)>0 then
if(length(sedit2.text)>0) or (length(sComboBox1.text)>0) then
ADOQuery1.Filter:= ADOQuery1.Filter + 'and duration like '+QuotedStr('%'+sEdit3.Text+'%') else
ADOQuery1.Filter:= 'duration like '+QuotedStr('%'+sEdit3.Text+'%');
 
if length(sedit4.text)>0 then
if(length(sedit2.text)>0) or (length(sComboBox1.text)>0) or (length(sedit3.text)>0) then
ADOQuery1.Filter:= ADOQuery1.Filter + 'and producer like '+QuotedStr('%'+sEdit4.Text+'%') else
ADOQuery1.Filter:= 'producer like '+QuotedStr('%'+sEdit4.Text+'%');
ADOQuery1.Filtered:=true;
end;
все записи в таблице имеет тип varchar(50) среда sql server
14 ответов

сделал динамическую фильтрацию
это ужасисправлять тут нечего - переходите на SQL


qwertehok, так какая разница сделаю я это через sql или через фильтр который как раз предназначен для фильтрации


разница в том что SQL фильтрует данные до выдачи клиенту, а фильтр после вот у тебя 1 миллион строк, тебе нужно выбрать 1 (одну)SQL запрос вернет 1 строку DBGrid сначала отобразит миллион, а потом отфильтрует 1


qwertehok, попробовал сделать через sql, не знаю так вы имели ввиду или нет, но бьет ошибку скажите что не так?
ADOQuery1:='Select * from Films where genre like' +QuotedStr('%'+sComboBox1.Text+'%')+
'and release_date like' +QuotedStr('%'+sEdit2.Text+'%')+
'and duration like' +QuotedStr('%'+sEdit3.Text+'%')+
'and producer like' +QuotedStr('%'+sEdit4.Text+'%');


во первых не ADOQuery1, a ADOQuery1.SQL.Text во вторых - у вас пробелы пропущены
'and release_date like'
а нужно ' and release_date like 'в остальном вроде синтаксически правильно НО это сработает только если все условия выполнятся - у вас там AND


qwertehok, поставил вместо and or. Но теперь фильтрация вообще не работает ввожу данные для фильтра нажимаю применить и просто ничего не показывает т.е. таблица пустая


во первых сначала попробуй без условия просто вывести данные
SELECT * FROM Films
потом добавляй по одномупричем рубить
поставил вместо and or
тоже неправильнону и на будущее не работает что то - показываешь код выдает ошибку - показываешь и код и ошибку просто потому что телепатов нет


qwertehok, даже просто без условий ничего не выводит таблица пустой становится. А это может быть из за того что в ADOQuery в свойстве sql у меня уже есть запрос на вывод всех данных из таблицы


ну и на будущее не работает что то - показываешь код
я для кого писал?


qwertehok,
ADOQuery1.SQL.Text:='Select * from Films';
как бы там даже показывать нечего


ну тогда и помочь тебе я не могу - просто ты делаешь что то не так


qwertehok, тогда может хотя бы знаешь что за ошибка проект project1 вызвал исключение класса EAccessViolation с сообщением 'Access violation at adress 00599fc2 in module project1.exe ' при открытии формы на которой таблица была


ну и на будущее не работает что то - показываешь код выдает ошибку - показываешь и код и ошибку просто потому что телепатов нет
выдает ошибку - показываешь и код и ошибку


qwertehok, все проблему решил