Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];
ВнизНе могу разобраться с 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c