Форум: "Базы";
Текущий архив: 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