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

Как создать вычисляемое поле в run-time?   Найти похожие ветки 

 
DmitryNekl   (2005-02-07 09:51) [0]

Здравствуйте, мастера! Надеюсь на Вашу помощь.

Код создания формы:

var phones: TClientDataSet;

procedure TForm1.FormCreate(Sender: TObject);

function CreateCalcField(const AFieldName: string; AFieldClass: TFieldClass; ASize: Word): TField;
begin
 Result := phones.FindField(AFieldName);
 with Result do
 begin
   FieldName := AFieldName;
   if (Result is TStringField) or (Result is TBCDField) or
     (Result is TBlobField) or (Result is TBytesField) or
     (Result is TVarBytesField) then
   begin
     Size := ASize;
   end;
   Calculated := True;
   //DataSet := phones; //пробовал расскомментировать
   //Name := phones.Name + AFieldName; // тоже пробовал
 end;
end;

begin
 ...
 phones.OnCalcFields:=CalcFieldCalc;
 if not FileExists(phones.FileName) then
 begin
   phones.FieldDefs.Clear;
   phones.FieldDefs.Add("id", ftInteger);
   phones.FieldDefs.Add("vid", ftInteger);
   phones.FieldDefs.Add("number", ftString, 20);
   phones.FieldDefs.Add("Calcul", ftString, 20);
   phones.CreateDataSet;
 end;

 CreateCalcField("Calcul", TStringField, 20);

 phones.Open;
 phones.SaveToFile();

Вот в таком виде вываливается на третьей с конца строчке вываливается по Access Violation. Если третью с конца строчку перенести в конец, то вываливается с сообщением "Не могу выполнить операцию на открытом датасете".

Подскажите, пожалуйста, в чем ошибка? И как создать-таки вычисяемое поле в моем случае?


 
Johnmen ©   (2005-02-07 10:09) [1]

Сначала создаётся поле, потом добавляется в коллекцию.
with TStringField.Create(phones) do begin
 FieldName := "YourField";
 FieldKind:= fkCalculated;
 DataSet := phones;  
 Name := Dataset.Name + FieldName;
 .......
 phones.FieldDefs.Add(Name, ftString, 20, false);
 end;


 
DmitryNekl   (2005-02-07 11:01) [2]

Спасибо огромное, все заработало! :)



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

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



Память: 0.45 MB
Время: 0.033 c
1-1108801032
Bogdan
2005-02-19 11:17
2005.03.06
Image


8-1099908539
Змей
2004-11-08 13:08
2005.03.06
обратный Timer


11-1090839820
Юрий Ж.
2004-07-26 15:03
2005.03.06
А че бобик сдох?


3-1107446707
fess
2005-02-03 19:05
2005.03.06
blob -> Query


1-1108728732
Cosinus
2005-02-18 15:12
2005.03.06
Обращение к объектам, расположенным на MDIChild из MdiMain




   Наверх