• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Guest

Здравствуйте!
Есть такой код:
Код:
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 отфильтровывалось ненужное. Указанная процедура компилится, но результата нет - ненужное не отбрасывается.
Помогите пожалуйста!
 
N

nayke

Здравствуйте!
Есть такой код:
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

Код:
if Edit1.Text = '' then Exit;
DataModule1.AdoTable1.Filter := Format('[f1] like '+#39+'%s%%'+#39, [Edit1.Text]);
DataModule1.AdoTable1.Filtered := True;

Остановился на таком варианте. Спасибо за ответ
 
G

Guest

Код:
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;


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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!