Такая ситуация: При вводе в Tedit какого бы то нибыло символа для поиска в базе, неизменно возникает сообщение: "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру". Или:
"Аргументы имеют неверный тип, выходят за пределы допустимого диапазона, или вступают в конфликт друг с другом"
Несколько дней на этом уже торможу и никак не пойму в чем здесь дело!!!
База: MS Access, соединение: ADO. Для поиска используются 3 tedita. Первый осуществляет поиск по номеру, второй по дате и третий по фамилии.
Когда поиск осуществляется по точному значению (=), все в порядке! никаких проблем! но этот поиск мне не подходит, нужно найти фрагмент в строке, соответственно используется like.
А зачем ты апострофами выделяешь LIKE-запрос? Насколько я помню,
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';должно быть достаточно...
// Вот пример когда программа работает без ошибок:
form4.xd.Filter:='Номера='''+Edit1.Text+'''';
// А теперь при таком варианте поиска возникает ошибка:
form4.xd.Filter:='[Номера] LIKE *' +Form4.Edit1.Text+'*';
При таком варианте (втором) программа работает совершенно безошибочно (проверялось только вчера) за исключением одного-единственного случая: когда Edit1.Text пуст, возникает ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона, или вступают в конфликт друг с другом". Все остальные варианты отрабатывают идеально со строковыми полями...
дада!!! Вот именно! Когда нашлась нужная запись, из tedita удаляется старая для того чтобы начать новый поиск. и тут ошибка!
А как же тогда быть если нужно повторно произвести поиск?
А ты что, на время обновления TEdit-а не сбрасываешь Filtered в False? Напрасно, очень даже помогает
Сбрасываю:
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;
А вот так попробуй, может чего и получится:
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;
Просто замечательно! Я везде где только можно искал ошибки, только не здесь. Неизвестно сколько бы я еще на это времени убил!
Огромное спасибо!!!