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