![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычисляемые поля
kiril- © (2004-02-09 12:17:00)Дело в следующем:
есть динамический запрос, напр 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+1 (2004-02-26 15:04:00) [1][7] Sergey13 © (26.02.04 14:43)
Внимание на дату :)
Sergey13 (2004-02-26 14:43:00) [2]Если запрос динамический, то может проще прям в нем считать?
select Field1, Field2,(Field1+Field2) Field3 from Table
2Sandman25 © (09.02.04 13:05) [5]
Опять 25? Это как понимать? 8-)
AlexA (2004-02-26 14:31:00) [3]Предлагаю другой вариант
SQL.Add('select Field1, Field2, 0 as total from Table');
и поле 'total' пересчитывать согласно твоему алгоритму.
А меня к тебя вопрос: Как ты собиралься пересчитывать твое вычисляемое поле 'CalcField1'
>Sandman25 © (09.02.04 13:05) [5]
вторая часть - вариант! только первый раз надо формировать условие where, чтобы запрос не возращал не одной записи.. Тогда возможно выполнять быстрее
Sandman25 (2004-02-09 13:05:00) [4]Тип из запроса в общем случае не определить никак. Нужно обращаться к системным таблицам СУБД + делать анализ конструкций типа CAST(myfield as integer)*Month(myDate). Оно Вам надо? :)
Или можно выполнить запрос без вычисляемого поля, перебрать все поля, запомнить их тип/размер, закрыть запрос и открыть заново, предварительно создав все эти поля и дополнительное (вычисляемое) поле. Только скорость упадет примерно вдвое.
kiril- (2004-02-09 12:59:00) [5]Ясно, а как тогда выяснить список полей в динамическом запросе и их тип?
Sandman25 (2004-02-09 12:56:00) [6]Если у Вас запросы могут быть разными, то да. Только все равно придется откуда-то брать тип/размер полей.
Если запрос заранее известен, то можно жестко задать имена и типы константами.
kiril- (2004-02-09 12:50:00) [7]А как? Смому идти по всему запросу, вычисляя имена полей?
Sandman25 (2004-02-09 12:20:00) [8]Надо добавить и все остальные поля из запроса: field1, field2.