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

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

Наверх




Память: 0.47 MB
Время: 0.063 c
1-1109075955
Nad89
2005-02-22 15:39
2005.03.06
Кликнуть по ссылке в TWebBrowser


1-1108123963
Aleksandr.
2005-02-11 15:12
2005.03.06
Как разрулить работу потока в вызовах его методов?


1-1109007955
Коля
2005-02-21 20:45
2005.03.06
чем отличается Delphi Enterprise


6-1104006670
Matrex
2004-12-25 23:31
2005.03.06
Как определить группу в которой находится юзер?


1-1108804186
ПроНыРа
2005-02-19 12:09
2005.03.06
ХР и Delphi