![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычислимое поле во время выполнения [D6, MSSQL]
Костян © (2002-06-20 14:47:00)Подскажите, пожалуйста как создать вычислимое поле во время выполнения. Делаю так:
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;
Не работает - пишет, что поле не может быть вычислимым.
А не создаю во время разработки, потому что формирую запрос динамически.
Костян (2002-06-21 10:17:00) [1]Итоговый листинг (добил ;)). Может кому понадобится...(задача не из самых редких)
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;
Спасибо тем, кто помог добиться этого результата.
fool (2002-06-20 15:45:00) [2]Создай во време разработки, открой *.dfm и глянь че надо и в какой последовательности
Костян (2002-06-20 15:24:00) [3]TF.Calculated тоже пробовал...не вышло. Может правда не в той последовательности пытался...
fool (2002-06-20 15:14:00) [4]TF.Calculated := True ? после TF.FieldKind:=fkCalculated;