Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо