Не можу розібратися з filter - в ibquery і ibdataset

Не можу розібратися з Filter # 032; в IBQuery і IBDataSet.

У даних компонент вказане властивість не реалізовано.
Користуйтеся OnFilterRecord.

У сенсі не реалізовано: -0

А як саме використовувати
> OnFilterRecord

НЕ морочте голову, а пишіть людський запит
SELECT.
FROM.
WHERE

НЕ морочте голову, а пишіть людський запит
SELECT.
FROM.
WHERE

Справа в тому, що після фільтрації необхідно підрахувати суму за трьома таблицями. зробив через
> SELECT.
> FROM.
> WHERE
але працює дуже повільно. Думав, що якщо відфільтрувати, то вийде швидше.

через фільтр не швидше, а треба робити запитом і використовувати угруповання (Group by).

> Соловйов
> OnFilterRecord:
>.
> Access: = <условие>
>.

Не зовсім зрозумів, що таке access і з чим його їдять.

Сварки не Access, а Accept.
procedure Tdm.ibDataSetFilterRecord (DataSet: TDataSet;
var Accept: Boolean);
begin
Accept: = DataSet.FieldByName ( "Field"). AsString = "ла ла" and
DataSet.FieldByName ( "Field"). AsString = "бу бу";
end;

Дик не оре щось. Написав як сказано (ну майже як сказано) на кнопку засунув IBDataSet1.Filtered: = true; Після чого в DBGrid з'являється лише один рядок і та порожня. Як лікувати?

А якщо припустимо написати Accept: = IBDataSet1.FieldByName ( "Field"). AsString = "%" ;. то по ідеї повинні вивестися всі записи, або НІ?

немає. Видасть де у тебе Field = "%", все поля це Accept = true;

Зрозуміло! C "%" я від безвиході. Копіюю значення з таблиці, вставляю в умова onFilterRecord, а він (DBGrid) мені нічого не показує. А може вся справа в регістрі?

procedure TForm1.IBDataSet1FilterRecord (DataSet: TDataSet;
var Accept: Boolean);
begin
Accept: = IBDataSet1.FieldByName ( "CUSTOMERSF"). AsString = "МЕРКУЛЯЕВ";
end;

procedure TForm1.Button2Click (Sender: TObject);
begin
IBDataSet1.Filtered: = true;
end;

а слабо написати
IBDataset1.Close;
IBDataset1.SelectSql.Clear;
IBDataset1.SelectSql.Add ( "SELECT *" +
"FROM

t "+
"WHERE t.FIO =: CustomFio");
IBDataset1.ParamByName ( "CustomFio"). AsString: = Edit1.Text;
IBDataset1.Open;
тобі одну запис відшукати нада чи ні.
ти пошук осуществляеш?


> Procedure TForm1.Button2Click (Sender: TObject);
> begin
> IBDataSet1.Filtered: = true;
> End;

Навіщо? Це не потрібно.

А як ще викликати onFilterRecord?

Можливо, слід прерфразіровать питання. Припустимо, є у мене кілька водіїв. У кожного водія може бути нескоглько гаражів, а в кожному гаражі не по одній машині. Існує необхідність розрахунку витрат на бензин і т.п. в кожному водію та висновок розшифровки по кожному гаражу, автомобілю. Раніше коли використовувалися таблиці все було простіше. Було два запити, і на AfterScroll для першого застосовувався фільтр для другого. Тобто в першому запиті встаю я на гараж №1, і бачу відповідні авто №1.1, авто №1.2 і т.д.
Не сперечаюся, все це можна реалізувати посредствам
> SELECT.
> FROM.
> WHERE
але виходить занадто довго, тому що умова складне і запит повертає багато полів, в результаті на кожну запис витрачатися близько двох секунд. А тепер уявіть що в автопарку понад 1000 авто.

Дик, не вийшло че-то через збережену :-(