1

Тема: Delphi фільтрування у таблиці

Доброго вечора всім.

Так як пошук в AdoTable виконати неможливо то я прийняв рішення зробити те за допомогою сортування.

Створив поле Edit та дві кнопки SpeedButton: "Знайти" та "Скасувати" відповідна для них написав дві процедури:

procedure TOrchardProgr_Fr.Ostend_SBtClick(Sender: TObject);
begin
  if (Ostend_Ed.Text<>'') then
    begin
      with NS_ADOTb do
        begin
          Filter:='NameSort='+Ostend_Ed.Text;
          Filtered:=True;
        end;
    end;
end;
procedure TOrchardProgr_Fr.CancelOst_SBtClick(Sender: TObject);
begin
  with NS_ADOTb do
    begin
      Filtered:=False;
      Filter:='';
    end;
  Ostend_Ed.Text:=''
end;

При тому в мене б/д на основі MS Access, поле таблиці по якому фільтрую має текстовий тип даних.

Проблема в тому що коли в воджу текст(назву) в поле Edit та натискаю знайти в мене випливає повідомлення про помилку: "Аргументи мають неправильний тип, лежать поза межами припустимого діапазону, або конфліктують один з одним."
Хоча в б/д,(в даному полі таблиці) точно є така назва.

При тому якщо в даному полі є цифра і в поле Edit вводжу цифру то фільтрування проходить добре(правильно).

Тут така закономірність, що цифри відфільтровуються добре, а літери ні.

Що зробити, щоб фільтрування проходило і по літерах?

Буду дуже вдячний за допомогу.

2

Re: Delphi фільтрування у таблиці

Подивіться чи у вас є функція QuotedStr, в Builder є

Filter:='NameSort='+QuotedStr(Ostend_Ed.Text);
Подякували: Romanvolja, Torbins2

3 Востаннє редагувалося Romanvolja (23.10.2016 01:39:17)

Re: Delphi фільтрування у таблиці

Пане Олександре щиро дякую що підказали.
Я б ні за що не здогадався, що текст з поля Edit потрібно перетворити за допомогою функції QuotedStr

Тепер все працює відмінно.  *YAHOO*

4 Востаннє редагувалося Betterthanyou (23.10.2016 02:07:14)

Re: Delphi фільтрування у таблиці

Romanvolja написав:

Пане Олександре щиро дякую що підказали.
Я б ні за що не здогадався, що текст з поля Edit потрібно перетворити за допомогою функції QuotedStr

Насправді функція QuotedStr немає ніякої магії це те саме що записати Ostend_Ed.Text в лапках
Є в мене лаба одна, де є цей приклад. (Якщо захочете подивитися то закривайте програму через ПКМ->close windows, бо там жартома запрограмована кнопка exit на інші дії)

Ось код методу

void __fastcall TForm1::searchClick(TObject *Sender)
{
    ADOTable1->Filter = "_text_ LIKE " + QuotedStr("%" + Edit1->Text + "%");
    ADOTable1->Filtered = true;
}

Слово LIKE і знак '%' допоможе шукати слово за літерами, наприклад щоб знайти слово "world" достатньо написати 'w' і натиснути пошук.

Подякували: Torbins1