Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
14-30532
Думкин
2003-03-24 07:38
2003.04.10
Времена


3-30309
tERRORist
2003-03-22 10:54
2003.04.10
Почему только 10 полей в dbExpress?


3-30296
DenKop
2003-03-19 22:47
2003.04.10
BLOB и SQL


7-30635
HardClubber
2003-02-13 22:16
2003.04.10
Com port


1-30394
bIzET
2003-03-30 13:19
2003.04.10
menu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский