Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Ошибка при изменении условий поиска

Автор: 1147 23.06.2009 1:59

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

Код

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


И вот тут начинаются какие то несоответствия типов!!!
Очень странно что при изменении параметров поиска возникают ошибки. Совершенно не пойму в чем они заключаются shok.gif

Автор: volvo 23.06.2009 2:22

А зачем ты апострофами выделяешь LIKE-запрос? Насколько я помню,

form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';
должно быть достаточно...

Добавлено через 1 мин.
Цитата
при изменении параметров поиска возникают ошибки
При изменении КАКИХ параметров и с чего на что?

Автор: 1147 23.06.2009 2:35

// Вот пример когда программа работает без ошибок:
form4.xd.Filter:='Номера='''+Edit1.Text+'''';
// А теперь при таком варианте поиска возникает ошибка:
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';


Автор: volvo 23.06.2009 2:47

При таком варианте (втором) программа работает совершенно безошибочно (проверялось только вчера) за исключением одного-единственного случая: когда Edit1.Text пуст, возникает ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона, или вступают в конфликт друг с другом". Все остальные варианты отрабатывают идеально со строковыми полями...

Автор: 1147 23.06.2009 2:49

дада!!! Вот именно! Когда нашлась нужная запись, из tedita удаляется старая для того чтобы начать новый поиск. и тут ошибка!
А как же тогда быть если нужно повторно произвести поиск?

Автор: volvo 23.06.2009 2:51

А ты что, на время обновления TEdit-а не сбрасываешь Filtered в False? Напрасно, очень даже помогает smile.gif

Автор: 1147 23.06.2009 2:56

Сбрасываю:

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 23.06.2009 3:26

А вот так попробуй, может чего и получится:

  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 23.06.2009 3:45

respect2.gif respect.gif Просто замечательно! Я везде где только можно искал ошибки, только не здесь. Неизвестно сколько бы я еще на это времени убил!
Огромное спасибо!!! smile.gif