Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вычислимое поле во время выполнения [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо