Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка при изменении условий поиска
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
1147
Такая ситуация: При вводе в Tedit какого бы то нибыло символа для поиска в базе, неизменно возникает сообщение: "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру". Или:
"Аргументы имеют неверный тип, выходят за пределы допустимого диапазона, или вступают в конфликт друг с другом"
Несколько дней на этом уже торможу и никак не пойму в чем здесь дело!!!
База: MS Access, соединение: ADO. Для поиска используются 3 tedita. Первый осуществляет поиск по номеру, второй по дате и третий по фамилии.
Когда поиск осуществляется по точному значению (=), все в порядке! никаких проблем! но этот поиск мне не подходит, нужно найти фрагмент в строке, соответственно используется like.
Код

form4.xd.Filter:='[Номера] LIKE ''*' +Form4.Edit1.Text+'*''';


И вот тут начинаются какие то несоответствия типов!!!
Очень странно что при изменении параметров поиска возникают ошибки. Совершенно не пойму в чем они заключаются shok.gif
volvo
А зачем ты апострофами выделяешь LIKE-запрос? Насколько я помню,
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';
должно быть достаточно...

Добавлено через 1 мин.
Цитата
при изменении параметров поиска возникают ошибки
При изменении КАКИХ параметров и с чего на что?
1147
// Вот пример когда программа работает без ошибок:
form4.xd.Filter:='Номера='''+Edit1.Text+'''';
// А теперь при таком варианте поиска возникает ошибка:
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';

volvo
При таком варианте (втором) программа работает совершенно безошибочно (проверялось только вчера) за исключением одного-единственного случая: когда Edit1.Text пуст, возникает ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона, или вступают в конфликт друг с другом". Все остальные варианты отрабатывают идеально со строковыми полями...
1147
дада!!! Вот именно! Когда нашлась нужная запись, из tedita удаляется старая для того чтобы начать новый поиск. и тут ошибка!
А как же тогда быть если нужно повторно произвести поиск?
volvo
А ты что, на время обновления TEdit-а не сбрасываешь Filtered в False? Напрасно, очень даже помогает smile.gif
1147
Сбрасываю:
procedure TForm4.Edit1Change(Sender: TObject);
begin
if Length(Edit1.text)>0 then
form4.xd.Filtered:=true
else
form4.xd.Filtered:=false;
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';
end;

Если tedit пустое, фильтр должен отключаться
Ведь в поиске по "=" таких проблем не возникает! Там используется тот же самый код
volvo
А вот так попробуй, может чего и получится:
  if Length(Edit1.Text) > 0 then begin
form4.xd.Filtered := false;
form4.xd.Filter := '[Номера] LIKE *' + Form4.Edit1.Text + '*';
form4.xd.Filtered := true;
end
else
form4.xd.Filtered := false;
Как говорится, найди отличия smile.gif

Добавлено через 1 мин.
Цитата
Если tedit пустое, фильтр должен отключаться
Должен-то должен, но ты ж его заполняешь, причем заполняешь некорректным запросом с точки зрения ADO. Это уж потом будет решено, показывать или нет результаты фильтрации, а сначала фильтр будет применен... А зачем? Не заполняй его при пустом Edit-е и всего делов...
1147
respect2.gif respect.gif Просто замечательно! Я везде где только можно искал ошибки, только не здесь. Неизвестно сколько бы я еще на это времени убил!
Огромное спасибо!!! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.