Главная страница
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.034 c
14-1078385774
TUser
2004-03-04 10:36
2004.03.28
Linux for чайник


1-1078591736
Ivolg
2004-03-06 19:48
2004.03.28
Удаление


1-1078394428
BlackTiger
2004-03-04 13:00
2004.03.28
Подозрительная конструкция какая-то. (record + TStrings)


1-1078349850
reef
2004-03-04 00:37
2004.03.28
Error creating form "Access violation at XXXXX in vcl50.bpl"


6-1073645802
vivk
2004-01-09 13:56
2004.03.28
Узнать IP клиента