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

Вниз

Вычисляемые поля   Найти похожие ветки 

 
kiril-   (2004-02-09 12:17) [0]

Дело в следующем:
есть динамический запрос, напр select Field1, Field2 from Table. Необходимо в компоненте Query расчитывать вычисляемое поле (CalcField1). Как занести все эти поля в список полей в Query.FieldList?
Делаю так:

var
 sf: TStringField;

with Query do
begin
 Close;
 SQL.Clear;
 Fields.Clear;

 SQL.Add("select Field1, Field2 from Table");

 sf:=TStringField.Create(Query);
 sf.FieldName:="CalcField1";
 sf.Name:=Query.Name + sf.FieldName;
 sf.Index:=Query.FieldCount;
 sf.Calculated:=true;
 sf.DataSet:=Query;
 FieldDefs.UpDate;

 Open;
end;
но в результате получаю в Query.FieldList только поле CalcField1. Что не так?


 
Sandman25 ©   (2004-02-09 12:20) [1]

Надо добавить и все остальные поля из запроса: field1, field2.


 
kiril-   (2004-02-09 12:50) [2]

А как? Смому идти по всему запросу, вычисляя имена полей?


 
Sandman25 ©   (2004-02-09 12:56) [3]

Если у Вас запросы могут быть разными, то да. Только все равно придется откуда-то брать тип/размер полей.
Если запрос заранее известен, то можно жестко задать имена и типы константами.


 
kiril-   (2004-02-09 12:59) [4]

Ясно, а как тогда выяснить список полей в динамическом запросе и их тип?


 
Sandman25 ©   (2004-02-09 13:05) [5]

Тип из запроса в общем случае не определить никак. Нужно обращаться к системным таблицам СУБД + делать анализ конструкций типа CAST(myfield as integer)*Month(myDate). Оно Вам надо? :)
Или можно выполнить запрос без вычисляемого поля, перебрать все поля, запомнить их тип/размер, закрыть запрос и открыть заново, предварительно создав все эти поля и дополнительное (вычисляемое) поле. Только скорость упадет примерно вдвое.


 
AlexA ©   (2004-02-26 14:31) [6]

Предлагаю другой вариант

SQL.Add("select Field1, Field2, 0 as total from Table");

и поле "total" пересчитывать согласно твоему алгоритму.

А меня к тебя вопрос: Как ты собиралься пересчитывать твое вычисляемое поле "CalcField1"

>Sandman25 ©   (09.02.04 13:05) [5]
вторая часть - вариант! только первый раз надо формировать условие where, чтобы запрос не возращал не одной записи.. Тогда возможно выполнять быстрее


 
Sergey13 ©   (2004-02-26 14:43) [7]

Если запрос динамический, то может проще прям в нем считать?
select Field1, Field2,(Field1+Field2) Field3 from Table

2Sandman25 ©   (09.02.04 13:05) [5]
Опять 25? Это как понимать? 8-)


 
Sandman25+1   (2004-02-26 15:04) [8]

[7] Sergey13 ©   (26.02.04 14:43)

Внимание на дату :)



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
9-1062240307
TButton
2003-08-30 14:45
2004.03.28
doCollision


9-1062407105
Spayker
2003-09-01 13:05
2004.03.28
Установка GlScene на Delphi7


9-1046688009
ogo
2003-03-03 13:40
2004.03.28
Стекло


14-1078392207
Zendor
2004-03-04 12:23
2004.03.28
update


14-1077717396
Saturn
2004-02-25 16:56
2004.03.28
Отношение к Библии и к религиям вобще!