![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание вычисляемого поля
Pk © (2003-02-10 11:45:00)создаю его так:
procedure createfild;
var f:TField;
begin
f:=TField.Create(DataModule1.Query1);
f.Calculated:=true;
f.Name:="Pole1";
DataModule1.Query1.Fields.Add(f);
end;
затем в программе:
DataModule1.Query1.close;- вылетает исключение: "поле "" не может быть вычисляемым или lookup".
DataModule1.Query1.sql.text:="select * from table1";
createfild;
DataModule1.Query1.open
passm (2003-02-10 13:56:00) [1]var
f: TIntegerField;
begin
f:= TIntegerField.Create(Application);
f.FieldName:= "FIELD1";
f.FieldKind:= fkCalculated;
f.DataSet:= Query1;
Query1.Open
end;
VAleksey (2003-02-10 13:50:00) [2]Все поля необходимые в запросе создай сначала, потом открывай.
Shaman (2003-02-10 13:20:00) [3]У тебя скорее всего в возвращаемом наборе присутствует поле с имененм "Pole1".
Pk (2003-02-10 13:17:00) [4]забыл сказать: в процедуру createfild добавил F.DataSet:=DataModule1.Query1 - а то появлялось сообщение что поле Pole1 не имеет датасета
кто знает что я не так делаю?
Pk (2003-02-10 13:10:00) [5]Использую типизированое поле. Эта ошибка исчезла но возникает другая. Если я создаю поле при открытом запросе вываливается исключение - при открытом наборе даных даную операцию невозможно выполнить, а если я при закрытом создаю это поле то сразу после его создания выполняется событие OnCalculateFields и исключение вылетает уже там (что естествено так как датасет закрыт и все поля на основании которых вычисляется данное, неизвестны)
passm (2003-02-10 12:25:00) [6]Стоп! А почему TField? Это абстрактное поле. Используй конкретное (TIntegerField, TStringField, TFloatField...)
И сначала открывай запрос, а потом уж добаляй поле.
Pk (2003-02-10 11:57:00) [7]
> passm © (10.02.03 11:53
f.FieldName :="Pole1"; - результат все тот же. поле "Pole1" не может быть вычисляемым или lookup.
passm (2003-02-10 11:53:00) [8]Pk (10.02.03 11:45)> f.FieldName = ?