![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Query ;OnFilterRecord [D6, D7, dBase, FoxPro, Paradox]
Al11 © (2003-02-25 13:48:00)Почему отбирая запись в Query
следующим образом
В OnFilterRecord:
Accept:=Query["XXXXX"]>100;Query не отфильтровывается по вычисляемым полям (вместо XXXXX - вычисляемое поле),
а не вычисляемые работают нормально
и как это можно сделать (в смысле по вычисл. отфильтр.) ?!?!?!?!?
Al11 (2003-02-26 16:14:00) [1]Спасибо за советы!!!
Не первый раз уже выручаете (синхронно!!!)...
Соловьев (2003-02-26 16:11:00) [2]2 Al11 ©
не бойся все как раз нормально...
Al11 (2003-02-26 16:09:00) [3]Поля точно Calculated.
Так Accept := (Query1.FieldByName...+Query1.FieldByName...)>50
все работает,
Но если вычисления (расчеты в полях) - Большие, Замучаешся!!!!
Соловьев (2003-02-26 16:06:00) [4]Прям мысли читаешь :)))
Johnmen (2003-02-26 15:59:00) [5]>Соловьев ©
Опять забавная синхронность...:)))
Johnmen (2003-02-26 15:51:00) [6]Непонятки....А поля точно Calculated ? Так и были созданы ?
Ну если уж не получается по вычислимым, то просто по обычным :
Accept := (Query1.FieldByName...+Query1.FieldByName...)>50;
Какая разница, где вычислять.....:)
Соловьев (2003-02-26 15:48:00) [7]Делай вычисления в onFilterRecord:
Accept := (Query.FieldByName("XXXX").AsInteger+Query.FieldByName("YYYYY").AsInteger)>100;
Al11 (2003-02-26 15:39:00) [8]1
Al11 (2003-02-26 15:33:00) [9]Пожалуйста,
в OnCalcFields:
Query1BD.AsInteger:=Query1B.AsInteger+Query1D.AsInteger;
Query1CE.AsCurrency:=Query1C.AsCurrency+Query1E.AsCurrency;
Результат тот же.
Может альтернативукакую подскажете для фильтрации по выч. полям.
А то не знаю что и делать ?????!!!!! а надо бы, очень...
Johnmen (2003-02-26 14:51:00) [10]Единственное критическое место, мною обнаруженное :
попробуй
в OnCalcFields:
Query1BD.As...:=Query1B.As...+Query1D.As...;
Query1CE.As...:=Query1C.As...+Query1E.As...;
Al11 (2003-02-26 14:30:00) [11]Создал Paradox-табличку (XXX) с полями
A : LongInteger - Key
B : LongInteger
C : Currency
D : LongInteger
E : Currency
В Project на форму положил DataBase1, DataSource1, Query1, DbGrid1, Button1
Query с полями (Таблички XXX)
A : Integer - Key
B : Integer
C : Currency
D : Integer
E : Currency
BD: Integer
CD: Currency
в OnCalcFields:
Query1BD.Value:=Query1B.Value+Query1D.Value;
Query1CE.Value:=Query1C.Value+Query1E.Value;
в OnFilterRecord:
Accept := Query1.FieldByName("BD").AsInteger>50;
DbGrid1 (cвойство DataSource:="DataSource1")
DataSource (cвойство DATASET:="Query1")
Button1
В OnClick:
Query1.Filtered:=true; (изначально false)
Заполним табличку значениями
Жмем Run
Grid заполнен. Жмем Button1
Grid пустой!!!!
Если в OnFilterRecord: вместо
Accept := Query1.FieldByName("BD").AsInteger>50;
поставим
Accept := Query1.FieldByName("B").AsInteger>50;
все работает для этого не вычислямого поля
может что не так написал !?!?!?!?!?!?!?!
Johnmen (2003-02-25 16:06:00) [12]Вообще-то, д.б. нормально...
Попробуй явное приведение типа :
Accept:=Query.FieldByName("XXXXX").AsInteger{AsFloat}>100
Соловьев (2003-02-25 16:00:00) [13]
> Accept:=Query["XXXXX"]>100
Может так:
...
Accept := (Query.FieldByName("XXXX").AsInteger>100);
...
Al11 (2003-02-25 15:56:00) [14]1