Вниз
Скачать: CL | DM;

Вычислимое поле во время выполнения   Найти похожие ветки 

 
Костян   (2002-06-20 14:47) [0]

Подскажите, пожалуйста как создать вычислимое поле во время выполнения. Делаю так:

procedure TForm1.Button1Click(Sender: TObject);
var TF: TField;
begin
TF:=TField.Create(Query1);
TF.SetFieldType(ftInteger);
TF.FieldName:="NID";
TF.FieldKind:=fkCalculated;
Database1.Open;
TF.DataSet:=Query1;
Query1.Open;
Query1.Fields.Add(TF);
end;


Не работает - пишет, что поле не может быть вычислимым.
А не создаю во время разработки, потому что формирую запрос динамически.


 
fool ©   (2002-06-20 15:14) [1]

TF.Calculated := True ? после TF.FieldKind:=fkCalculated;


 
Костян   (2002-06-20 15:24) [2]

TF.Calculated тоже пробовал...не вышло. Может правда не в той последовательности пытался...


 
fool ©   (2002-06-20 15:45) [3]

Создай во време разработки, открой *.dfm и глянь че надо и в какой последовательности


 
Костян   (2002-06-21 10:17) [4]

Итоговый листинг (добил ;)). Может кому понадобится...(задача не из самых редких)

procedure TForm1.Button1Click(Sender: TObject);
var TF: TField;
i: Integer;
begin
Query1.Close;
Query1.Prepare;

TF:=TIntegerField.Create(Query1);
TF.FieldName:="NID";
TF.Calculated:=True;
TF.FieldKind:=fkCalculated;
TF.Name:=Query1.Name+TF.FieldName;
TF.DataSet:=Query1;
Query1.FieldDefs.Update;

for i:=0 to Query1.FieldDefs.Count-1 do
begin

if Query1.FieldDefs[i].FieldClass.ClassNameIs("TAutoIncField") then
TF:=TAutoIncField.Create(Query1)
else
if Query1.FieldDefs[i].FieldClass.ClassNameIs("TStringField") then
TF:=TStringField.Create(Query1)
else
if Query1.FieldDefs[i].FieldClass.ClassNameIs("TDateTimeField") then
TF:=TDateTimeField.Create(Query1)
else
if Query1.FieldDefs[i].FieldClass.ClassNameIs("TIntegerField") then
TF:=TIntegerField.Create(Query1)
else
if Query1.FieldDefs[i].FieldClass.ClassNameIs("TFloatField") then
TF:=TFloatField.Create(Query1)
else
if Query1.FieldDefs[i].FieldClass.ClassNameIs("TCurrencyField") then
TF:=TCurrencyField.Create(Query1);
TF.FieldName:=Query1.FieldDefs[i].Name;
TF.Name:=Query1.Name+TF.FieldName;
TF.DataSet:=Query1;
Query1.FieldDefs.Update;
end;
Query1.Open;
end;

procedure TForm1.Query1AfterClose(DataSet: TDataSet);
begin
Query1.Fields.Clear;
end;


Спасибо тем, кто помог добиться этого результата.



Страницы: 1 вся ветка

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



Память: 0.46 MB
Время: 0.007 c
3-47142
jen_bond
2002-06-24 13:40
2002.07.15
DBComboBox


1-47581
kolobok11
2002-06-26 16:46
2002.07.15
Функции Win API > EnterCriticalSection, LeaveCriticalSection ?


14-47787
Дмитрий Баранов
2002-06-11 10:05
2002.07.15
Ленинградцы, помогите:)


7-47816
Ezh
2002-04-19 12:18
2002.07.15
Печать из StringGrid


14-47784
bbKOT
2002-06-15 13:05
2002.07.15
Что с бойцовским клубом?




   Наверх