Главная страница
    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
4-1106725156
tradakad
2005-01-26 10:39
2005.03.06
маска для вводимого в EditBox текста


3-1106922398
LEONardo
2005-01-28 17:26
2005.03.06
Изменять данные после SQL запроса


3-1107417717
denis24
2005-02-03 11:01
2005.03.06
возврат пустых записей


1-1108993267
Mouserx
2005-02-21 16:41
2005.03.06
Скроллинг при добавлении текста в Memo


14-1108648310
diww
2005-02-17 16:51
2005.03.06
организация мальчишника





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский