Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как создать вычисляемые поля во время исполнения программы

Delphi , Базы данных , Поля

Как создать вычисляемые поля во время исполнения программы

Автор: Nomadic

Смотрите книгу "Developing Custom Delphi Components" от Рэя Конопки.

Здесь немного исправленный пример из этой книги -


function TMyClass.CreateCalcField(const AFieldName: string;
  AFieldClass: TFieldClass; ASize: Word): TField;
begin
  Result := FDataSet.FindField(AFieldName); // Field may already exists!
  if Result <> nil then
    Exit;
  if AFieldClass = nil then
  begin
    DBErrorFmt(SUnknownFieldType, [AFieldName]);
  end;
  Result := FieldClass.Create(Owner);
  with Result do
  try
    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 := FDataset;
    Name := FDataSet.Name + AFieldName;
  except
    Free; // We must release allocated memory on error!
    raise;
  end;
end;

Программный код, который вы предоставили, - это функция, созданная для создания поля расчета в программе Delphi. Поля расчета - это специальный тип полей базы данных, позволяющий приложению выполнять расчеты или преобразования над данными, хранящимися в них.

Вот подробное описание того, что функция делает:

  1. Она принимает три параметра: AFieldName, AFieldClass и ASize.
    • AFieldName - имя поля, которое создается.
    • AFieldClass - класс поля (например, TStringField, TBCDField и т.д.).
    • ASize - размер поля (пригоден только для определенных типов полей, таких как строковые или двоичные поля).
  2. Она сначала пытается найти поле с тем же именем, что и AFieldName. Если она находит, то функция выходит из себя.
  3. Если не находит, она проверяет, является ли AFieldClass равным nil. Если это так, она выбрасывает ошибку.
  4. Если AFieldClass не равно nil, она создает новый экземпляр указанного класса с помощью метода Create и присваивает его Result.
  5. Затем она устанавливает различные свойства нового поля:
    • FieldName: Имя поля (устанавливается в AFieldName).
    • Calculated: Установлен в True, чтобы указать, что это поле расчета.
    • DataSet: Устанавливает дата-сет для поля (в этом случае - FDataSet, которая предположительно является экземпляром TDataSet или одного из его подклассов).
    • Name: Устанавливает имя поля в виде комбинации имени дата-сета и указанного AFieldName.
  6. Наконец, она пытается установить размер поля в зависимости от типа поля (например, строкового или двоичного). Если возникает ошибка при этом процессе, она освобождает зарезервированное память и снова выбрасывает исключение.

Обратите внимание, что этот код предполагает, что FDataSet является экземпляром TDataSet или одного из его подклассов. Он также предполагает, что AFieldClass - это валидный класс типа (например, TStringField, TBCDField и т.д.).

Вот альтернативное решение с использованием встроенной поддержки Delphi для полей расчета:

function TMyClass.CreateCalcField(const AFieldName: string): TField;
begin
  Result := FDataSet.FieldCreate(AFieldName, ftCalculated);
  if Result = nil then
    raise DBErrorFmt(SUnknownFieldType, [AFieldName]);
end;

В этом альтернативном решении функция CreateCalcField создает новое поле расчета с указанным именем и устанавливает его тип в ftCalculated. Если не находит поля с тем же именем, она выбрасывает ошибку. Заметьте, что вам не нужно указывать класс поля или размер поля явно, потому что Delphi заботится о этих деталях для вас.

В статье описывается создание вычисляемых полей в программе с использованием функции TMyClass, которая позволяет создавать поля динамически во время исполнения программы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Поля ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:24:10/0.0059249401092529/1