Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

Как создать вычисляемое поле в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.039 c
14-1108111766
Dimedrol
2005-02-11 11:49
2005.03.06
Вот страничку себе сделал :-)


3-1107891165
Нонэйм
2005-02-08 22:32
2005.03.06
Проверка на кратность в триггере


1-1108972230
DimonS
2005-02-21 10:50
2005.03.06
Вопрос по временным промежуткам


4-1106293891
AlexandrK
2005-01-21 10:51
2005.03.06
Как показать на панели задач ВСЕ ОКНА приложения


14-1108375786
Dimedrol
2005-02-14 13:09
2005.03.06
Windows XP, boot = чорный экран + мышь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский