Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.10;
Скачать: CL | DM;

Вниз

Не могу разобраться с Filter в IBQuery и IBDataSet.   Найти похожие ветки 

 
off ©   (2003-03-21 16:02) [0]

Мастера, подскажите. У компонента TTable и TQuery в редакторе объектов можно прописать свойство Filter в соответствующем. Причем, что именно туда следует записать рассказанно в книге. А у копмонентов IBQuery и IBDataSet в редакторе объектов такого поля нет, но есть свойства Filter и Filtered. В книгах я не нашел как пользоваться свойством Filter в IBQuery(DataSet). Хотя можно воспользоваться SQL запросом с текстом
select * from ...
where ... like "%...%"
,
что мне делать и рпиходится. Но хотелось бы все таки через Filter. Но тогда не понятно, что и куда прописать?


 
Johnmen ©   (2003-03-21 16:10) [1]

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


 
off ©   (2003-03-21 16:19) [2]

В смысле не реализовано :-0


 
off ©   (2003-03-21 16:23) [3]

А как именно использовать
>OnFilterRecord


 
Соловьев ©   (2003-03-21 16:25) [4]

onFilterRecord:
...
Access := <условие>
...


 
Tomkat ©   (2003-03-21 16:38) [5]

не морочте голову, а пишите человеческий запрос
SELECT ....
FROM ....
WHERE <conditions>


 
tomkat ©   (2003-03-21 16:38) [6]

не морочте голову, а пишите человеческий запрос
SELECT ....
FROM ....
WHERE <conditions>


 
Johnmen ©   (2003-03-21 16:44) [7]

И еще раз от TOMKAT © :)))


 
off ©   (2003-03-24 11:27) [8]

Дело в том, что после фильтрации необходимо подсчитать сумму по трем таблицам. Сделал через
>SELECT ....
>FROM ....
>WHERE <conditions>
но работает очень медленно. Думал, что если отфильтровать, то получится быстрее.


 
Wellslava ©   (2003-03-24 11:30) [9]

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


 
off ©   (2003-03-24 11:53) [10]

>Соловьев
>onFilterRecord:
>...
>Access := <условие>
>...

Не совсем понял, что такое access и с чем его едят.


 
Соловьев ©   (2003-03-24 11:57) [11]

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


 
off ©   (2003-03-24 12:24) [12]

Дык не пашет что-то. Написал как сказано (ну почти как сказано) на кнопку засунул IBDataSet1.Filtered:=true; После чего в DBGrid появляется лишь одна строка и та пустая. Как лечить?


 
Соловьев ©   (2003-03-24 12:27) [13]


> off © (24.03.03 12:24)
> Дык не пашет что-то. Написал как сказано (ну почти как сказано)
> на кнопку засунул IBDataSet1.Filtered:=true; После чего
> в DBGrid появляется лишь одна строка и та пустая. Как лечить?

не надо этого делать... onFilterRecord срабатывает когда идет загрузка данных, т.е. пишеш условие и переоткрываешь НД.


 
off ©   (2003-03-24 12:27) [14]

А если допустим написать Accept := IBDataSet1.FieldByName("Field").AsString = "%";, то по идее должны вывестись все записи, или НЕТ?


 
Соловьев ©   (2003-03-24 12:31) [15]

нет. Выдаст где у тебя Field="%", все поля это Accept = true;


 
zacho ©   (2003-03-24 12:32) [16]


> off © (24.03.03 12:27)

Нет, только те, в которых в Field будет "%"
:-)


 
off ©   (2003-03-24 12:37) [17]

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


 
Соловьев ©   (2003-03-24 12:40) [18]

Код!!!


 
off ©   (2003-03-24 12:46) [19]

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;


 
tomkat ©   (2003-03-24 12:55) [20]

а слабо написать
IBDataset1.Close;
IBDataset1.SelectSql.Clear;
IBDataset1.SelectSql.Add("SELECT * "+
"FROM <table> t "+
"WHERE t.FIO=:CustomFio " );
IBDataset1.ParamByName("CustomFio").AsString:=Edit1.Text;
IBDataset1.Open;
тебе одну запись отыскать нада или нет ?
ты поиск осуществляеш ?


 
Соловьев ©   (2003-03-24 12:56) [21]


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

Зачем? Это не нужно.


 
off ©   (2003-03-24 13:31) [22]

А как еще вызвать onFilterRecord?


 
Соловьев ©   (2003-03-24 13:33) [23]


> Соловьев © (24.03.03 12:27)



 
off ©   (2003-03-24 13:36) [24]

Виноват


 
off ©   (2003-03-24 13:55) [25]

Возможно, следует прерфразировать вопрос. Допустим, есть у меня несколько водителей. У каждого водителя может быть нескоглько гаражей, а в каждом гараже не по одной машине. Существует необходимость расчета расхода бензина и т.п. по каждому водителю и вывод расшифровки по каждому гаражу,автомобилю. Раньше когда использовались таблицы все было проще. Было два запроса, и на AfterScroll для первого применялся фильтр для второго. Т.е. в первом запросе встаю я на гараж №1, и вижу соответствующие авто №1.1, авто №1.2 и т.д.
Не спорю, все это можно реализовать посредствам
>SELECT ....
>FROM ....
>WHERE <conditions>
но получается слишком долго, т.к. условие сложное и запрос возвращает много полей, в итоге на каждую запись тратиться около двух секунд. А теперь представьте что в автопарке свыше 1000 авто.


 
zacho ©   (2003-03-24 14:00) [26]


> off © (24.03.03 13:55)

Рассчитывай все в хранимой процедуре, и не надо будет тысячи записей на клиента тянуть.


 
off ©   (2003-03-24 14:03) [27]

Дык, не вышло че-то через хранимую :-(



Страницы: 1 вся ветка

Текущий архив: 2003.04.10;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
14-30547
vopros
2003-03-24 14:13
2003.04.10
Где можно посмотреть лог сообщений net send?


1-30333
Intell
2003-03-30 14:35
2003.04.10
MouseMove в DriveComboBox?


6-30505
Dmitry_A
2003-02-14 19:27
2003.04.10
Как по MAC адресу узнать IP адрес?


3-30312
Nikitos
2003-03-23 23:40
2003.04.10
Таблицы DBF


3-30278
Сергей
2003-03-18 14:35
2003.04.10
SQL таблицы. Реализация.