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

Динамически добавить вычисляемое поле   Найти похожие ветки 

 
Vladimir_Shk2   (2004-03-06 13:37) [0]

Я написал что-то вроде:

procedure AddCalcField(DS : Tdataset);
var Fld : TField;
begin
   Fld:=TDateTimeField.Create(DS);
   Fld.FieldKind:=ftCalculated;
   Fld.Name:="чё-то";
   DS.Fields.Add(Fld);
end;

Процедура выполняется без ошибок, но после ее выполнения, судя по всему датасет разрушается, потому что исчезают поля которые там были, обращение к ним дает ошибку типа "Field not found".

Я пробовал вместо DS.Fields.Add(Fld) выполнить Fld.Dataset:=DS, так как прочитал в справке, что Add выполняется автоматически. Но эффект получился тот же самый.

Вопрос: можно ли в run-time корректно добавить вычисляемое (ftCalculated) поле в ADO датасет?


 
asp ©   (2004-03-06 14:26) [1]

Потому что прежние поля наверняка не были созданы явно.


 
just me   (2004-03-06 15:14) [2]

var
 fld    : TField;
 nIndex : integer;
begin
 DS.Close();
 fld := TIntegerField.Create(Self);
 fld.FieldName := "bla-bla-bla";
 fld.FieldKind := fkCalculated;
 fld.Name := "bla-bla-bla";
 fld.DataSet := DS;
 for nIndex := 0 to DS.FieldDefs.Count - 1 do
   DS.FieldDefs.Items[nIndex].CreateField(DS);
 DS.FieldDefs.UpDate();
 DS.Open();


 
Vladimir_Shk ©   (2004-03-06 21:07) [3]

2 just me
Спасибо за помощь, окончательно код выглядит так:

procedure AddCalcFields(Source,Dest : TDataset);
var i,j : integer;
   Fld : TField;
begin
   Dest.FieldDefs.Update; // иначе в цикле[j] Count = 0
   for i:=0 to Source.FieldCount - 1 do begin
       if Source.Fields[i].FieldKind = fkCalculated then begin
           Fld:=TDateTimeField.Create(Dest);
           Fld.FieldKind:=fkCalculated;
           Fld.FieldName:=Source.Fields[i].FieldName;
           Fld.Name:=Source.Fields[i].Name;
           for j:=0 to Dest.FieldDefs.Count - 1 do
               Dest.FieldDefs.Items[j].CreateField(Dest);
           Fld.DataSet:=Dest; // если добавлять перед циклом[j]
           // то, датасет портится.
       end;
   end;
end;



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

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



Память: 0.45 MB
Время: 0.02 c
1-1079591756
Rem
2004-03-18 09:35
2004.04.04
Автозапуск с Flash-карты


6-1075445567
AlexTregubov
2004-01-30 09:52
2004.04.04
Как изменить IP адрес DNS сервера


1-1079119001
ДухКороляАртура
2004-03-12 22:16
2004.04.04
Текст


14-1078624091
Pahan_
2004-03-07 04:48
2004.04.04
Подскажите надежный алгоритм шифрования


11-1058373492
Dr. Sergey
2003-07-16 20:38
2004.04.04
Проблемы при разработке многомодульных программ




   Наверх