Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизВычисляемые поля Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c