Search Results for

    Show / Hide Table of Contents

    Написание собственных движков баз данных

    FastReport позволяет строить отчеты не только на основе данных, определенных в приложении. Вы также можете определить свои собственные источники данных (подключения к БД, таблицы, запросы) прямо в отчете. В комплекте с FastReport идут движки для ADO, BDE, IBX, DBX, FIB. Вы можете создать собственный движок и подключить его к FastReport.

    На рисунке показана иерархия классов, предназначенных для создания движков баз данных. Зеленым цветом выделены компоненты нового движка.

    Как видно, стандартный набор компонентов движка БД включает в себя Database, Table и Query. Вы можете реализовать все эти компоненты, или только некоторые из них (например, многие БД не имеют компонента типа Table). Также вы можете реализовать компоненты, не входящие в стандартный набор (например, аналог StoredProc).

    Рассмотрим подробнее базовые классы.

    TfrxDialogComponent - базовый класс для всех невизуальных компонентов, которые могут быть помещены в отчет FastReport. В нем не определено каких-либо важных свойств и методов.

    Класс TfrxCustomDatabase является базовым для написания компонент типа TDatabase.

      TfrxCustomDatabase = class(TfrxDialogComponent)
      protected
        procedure SetConnected(Value: Boolean); virtual;
        procedure SetDatabaseName(const Value: String); virtual;
        procedure SetLoginPrompt(Value: Boolean); virtual;
        procedure SetParams(Value: TStrings); virtual;
        function GetConnected: Boolean; virtual;
        function GetDatabaseName: String; virtual;
        function GetLoginPrompt: Boolean; virtual;
        function GetParams: TStrings; virtual;
      public
        procedure SetLogin(const Login, Password: String); virtual;
        property Connected: Boolean read GetConnected write SetConnected default False;
        property DatabaseName: String read GetDatabaseName write SetDatabaseName;
        property LoginPrompt: Boolean read GetLoginPrompt write SetLoginPrompt default True;
        property Params: TStrings read GetParams write SetParams;
      end;
    

    В классе определены следующие свойства:

    • Connected – является ли подключение к БД активным;

    • DatabaseName – имя БД;

    • LoginPrompt – надо ли запрашивать пароль при поключении к БД;

    • Params – параметры подключения.

    От данного класса наследуется компонент типа TDatabase. Для его реализации необходимо перекрыть все виртуальные методы и вынести нужные свойства в секцию published. Также необходимо добавить свойства, специфичные для вашего компонента.

    Классы TfrxDataset, TfrxCustomDBDataset, TfrxDBDataset обеспечивают функции доступа к данным. Ядро FastReport использует эти компоненты для навигации и обращения к полям набора данных. В данном случае они являются частью общей иерархии и не представляют интереса.

    TfrxCustomDataSet - базовый класс для компонентов БД, производных от TDataSet. От этого класса наследуются компоненты - аналоги Query, Table, StoredProc. По сути, класс представляет собой обертку над TDataSet.

      TfrxCustomDataset = class(TfrxDBDataSet)
      protected
        procedure SetMaster(const Value: TDataSource); virtual;
        procedure SetMasterFields(const Value: String); virtual;
      public
        property DataSet: TDataSet;
        property Fields: TFields readonly;
        property MasterFields: String;
        property Active: Boolean;
        property DBConnected: Boolean;
      published
        property Filter: String;
        property Filtered: Boolean;
        property Master: TfrxDBDataSet;
      end;
    

    В классе определены следующие свойства:

    • DataSet - ссылка на внутренний объект типа TDataSet;

    • Fields - ссылка на DataSet.Fields;

    • Active - активен ли набор данных;

    • DBConnected – подключен ли набор данных к компоненту TfrxXXXDatabase;

    • Filter - выражение для фильтрации;

    • Filtered - активна ли фильтрация;

    • Master – ссылка на источник данных, являющийся основным. Применяется для связей типа master-detail.

    • MasterFields – список пар полей вида field1=field2. Применяется для связей типа master-detail.

    TfrxCustomTable - базовый класс для компонентов БД типа Table. Класс является оберткой над компонентом типа Table.

      TfrxCustomTable = class(TfrxCustomDataset)
      protected
        function GetIndexFieldNames: String; virtual;
        function GetIndexName: String; virtual;
        function GetTableName: String; virtual;
        procedure SetIndexFieldNames(const Value: String); virtual;
        procedure SetIndexName(const Value: String); virtual;
        procedure SetTableName(const Value: String); virtual;
      published
        property MasterFields;
        property TableName: String read GetTableName write SetTableName;
        property IndexName: String read GetIndexName write SetIndexName;
        property IndexFieldNames: String read GetIndexFieldNames write SetIndexFieldNames;
      end;
    

    В классе определены следующие свойства:

    • TableName – имя таблицы;

    • IndexName – имя индекса;

    • IndexFieldNames – имена индексных полей.

    От данного класса наследуется компонент типа Table. Для его реализации необходимо определить недостающие свойства, как правило, Database. Также необходимо перекрыть виртуальные методы из классов TfrxCustomDataset, TfrxCustomTable.

    TfrxCustomQuery - базовый класс для компонентов БД типа Query. Класс является оберткой над компонентом типа Query.

      TfrxCustomQuery = class(TfrxCustomDataset)
      protected
        procedure SetSQL(Value: TStrings); virtual; abstract;
        function GetSQL: TStrings; virtual; abstract;
      public
        procedure UpdateParams; virtual; abstract;
      published
        property Params: TfrxParams;
        property SQL: TStrings;
      end;
    

    В классе определены свойства, общие для всех компонентов Query - SQL и Params. Т.к. разные компоненты Query имеют разную реализацию параметров (например, TParams, TParameters), свойство Params имеет тип TfrxParams и является оберткой над конкретным типом параметров.

    В данном классе определены следующие методы:

    • SetSQL - должен установить свойство SQL компонента типа Query;

    • GetSQL - должен вернуть свойство SQL компонента типа Query;

    • UpdateParams - должен скопировать значения параметров в компонент типа Query. Если компонент Query имеет параметры типа TParams, то копирование осуществляется стандартной процедурой frxParamsToTParams.

    Рассмотрим создание движка БД на примере IBX. Полный исходный текст движка можно найти в каталоге SOURCE\IBX. Здесь мы будем приводить выдержки из исходного текста с комментариями и некоторыми поправками.

    Компоненты IBX, вокруг которых мы будем строить обертку - TIBDatabase, TIBTable, TIBQuery. Соответственно, наши компоненты будут называться TfrxIBXDatabase, TfrxIBXTable, TfrxIBXQuery.

    Back to top © 1998-2024 Copyright ООО «Быстрые отчеты»