Вопрос по фильтру для Adotable

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Здравствуйте!
Есть такой код:
Код:
procedure TForma1.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text)>0 then
DataModule1.ADOTable1.Filtered:=true
else
DataModule1.ADOTable1.Filtered:=false;
DataModule1.ADOTable1.Filter:='f1>'''+Edit1.Text+'''';
end;
Хотелось бы, чтобы при изменении значения Edit1.Text, включался фильтр для ADOTable1 для поля f1. Т.е. чтобы в DBGrid попадали записи, в которых поле f1 начинается с текста в Edit1. При этом по мере набора текста в Edit1 отфильтровывалось ненужное. Указанная процедура компилится, но результата нет - ненужное не отбрасывается.
Помогите пожалуйста!
 

nayke

Well-known member
04.08.2010
310
0
#2
Здравствуйте!
Есть такой код:
procedure TForma1.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text)>0 then
DataModule1.ADOTable1.Filtered:=true
else
DataModule1.ADOTable1.Filtered:=false;
DataModule1.ADOTable1.Filter:='f1>'''+Edit1.Text+'''';
end;

Хотелось бы, чтобы при изменении значения Edit1.Text, включался фильтр для ADOTable1 для поля f1. Т.е. чтобы в DBGrid попадали записи, в которых поле f1 начинается с текста в Edit1. При этом по мере набора текста в Edit1 отфильтровывалось ненужное. Указанная процедура компилится, но результата нет - ненужное не отбрасывается.
Помогите пожалуйста!
во-первых. Включать Filtered нужно после изменения свойства Filter.
Во-вторых. Неуверен но можно попробовать делать рефреш или клоус+опен, но не факт - не помню.

Попробуйте так:

Код:
procedure TForma1.Edit1Change(Sender: TObject);
begin
DataModule1.ADOTable1.close;//возможно не потребуется
DataModule1.ADOTable1.Filtered:=false;
DataModule1.ADOTable1.Filter:='f1 Like '''+Edit1.Text+'''%';
DataModule1.ADOTable1.Filtered:=true;
DataModule1.ADOTable1.open;//возможно не потребуется
end;
Спец символ (% или *) зависит от используемой СУБД.
Like также зависит от регистра по умолчанию.
 
G

Guest

#3
Код:
if Edit1.Text = '' then Exit;
DataModule1.AdoTable1.Filter := Format('[f1] like '+#39+'%s%%'+#39, [Edit1.Text]);
DataModule1.AdoTable1.Filtered := True;
Остановился на таком варианте. Спасибо за ответ
 
G

Guest

#4
Код:
procedure TForm1.ADOTable4FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var
FieldVal:string;
begin
if ADOTable4.TableName='Изделие' then
begin
FieldVal := DataSet['Название'];
Accept := copy(FieldVal, 1, length(edit11.text))=edit11.Text;
end
end;

procedure TForm1.Edit11Change(Sender: TObject);
begin
if Length(Edit11.Text) > 0 then
begin
ADOTable4.Filtered:=false;
ADOTable4.Filtered:=true;
end
else ADOTable4.Filtered:=false;
end;

Добавлено: только под свое переделаешь вырвал кусок из своего кода
 
Статус
Закрыто для дальнейших ответов.