Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: 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 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
1-47431
plash07
2002-07-01 11:30
2002.07.15
Как преобразовать текстовую строку в строку типа Пр.


8-47617
Yoga
2002-02-28 22:39
2002.07.15
Графика


4-47910
stainer a
2002-05-10 08:00
2002.07.15
сообщение em_settextex


6-47631
minstrel
2002-04-25 18:25
2002.07.15
Модемное соединение


14-47742
SleD
2002-06-03 19:40
2002.07.15
---|Ветка была без названия|---