Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
4-1074360470
FVova
2004-01-17 20:27
2004.03.28
Отслеживать запуск программ


7-1072876337
Alibaba
2003-12-31 16:12
2004.03.28
Thread


14-1078390662
wHammer
2004-03-04 11:57
2004.03.28
RAlib


3-1077868874
din
2004-02-27 11:01
2004.03.28
Sql запрос


14-1078085685
Zacho
2004-02-29 23:14
2004.03.28
FIDO-gate




   Наверх