[fpc-pascal] Updated mysql units.

Michael Van Canneyt michael.vancanneyt at wisa.be
Fri Apr 30 11:54:31 EDT 1999




On Fri, 30 Apr 1999, Cliff Baeseman wrote:

> This will come in handy for lazarus in the future. I love mysql and intend
> to build the db components using it.

I have a TDatabaseManager working and functional, ready to be committed to
CVS (in the FCL).

It is a replacement for the BDE (which we all know and love so much :) )

It manages database types and associated queries, tables and stored procs.

At the bottom of this mail is the interface declaration;
from this it should be clear what I intend to do:

For each DB type (mysql, postgresql and interbase have FUNCTIONAL FPC units)
We declare 3 descendants from 
  TDataset (possibly TSQLdataset)
and a descendant from TDatabase, that implement the specific issues for the
DB server: So Something like

  TMysqlDatabase= class(Tdatabase)
  TMysqlQuery= class(TSQLdataset)
  TMysqltable= class(TSQLdataset)
  TMysqlstoredproc= class(TSQLdataset)

Then you do a
  DatabaseManager.RegisterDB('MySQL',TMySQLdatabase,TMySQLQuery,TMYSqlTable,TMySQLStoredProc,Params);
(params is a list with parameters needed to set up a connection,
 similar to the BDE alias stuff...)

After that, the DatabaseManager object takes care of creating database classes,
queries etc. RIGHT IN YOUR PROGRAM !! no need for the BDE Administrator.
(although the object could be used to construct one :) )

It's still in embryonal form, but I have it pretty much thought out.
The TDatabaseManager class already works fine with dummy classes.

What I need to do now is to define the functionality of TDatabase and TDataset
and TSQLdataset, so I can implement skeleton definitions. After that I will
commit the stuff.

I will probably use MySQL or interbase to work out the first classes.
(more likely MySQL, it is easier to work with...)

Interested people can contact me *IF* they want to help :-)

Michael.

TDatabaseManager class definition (to be enhanced still):
--------------------------8<-----------------------------

Type
 // Basic classes
 EDatabaseError = Class(Exception);

 TDataSet = Class(TComponent);    // Common dataset type
 TSQLDataset = Class(TDataSet);   // For SQL based databases (mysql, Postgres, interbase)
 TQuery = Class (TSQLDataset);    // Common Query class
 TDatabase = Class (TComponent);  // Common Database class
 
 // Class references for basic classes
 TDataSetClass = Class of TDataset;
 TDatabaseClass = Class of TDatabase;

 TDatabaseRecord = Record
   Name : ShortString;
   DatabaseClass : TDatabaseClass;
   TableType,QueryType,StoredProcType : TDatasetClass;
   Params : TStrings;
   end;
 PDatabaseREcord = ^TDatabaseRecord;
    
 EDataBaseManagerError = Class(EDatabaseError);   
 
 TDataBaseManager = Class (TComponent)
   Public
   Constructor Create (AOwner : TComponent);override;
   Destructor Destroy;override;
   Procedure RegisterDB (Const DBType : ShortString;
                           DBClass : TDatabaseClass;
                           DBTable,
                           DBQuery, 
                           DBStoredProc : TDataSetClass;
                           DBParams : TStrings);
   Function  CompatibleQueryClass(DBClass : TDatabaseClass) : TDataSetClass;
   Function  CompatibleStoredProcClass(DBClass : TDatabaseClass) : TDataSetClass;
   Function  CompatibleTableClass(DBClass : TDatabaseClass) : TDataSetClass;
   Procedure CreateDataBase (DBType : Shortstring;Var DB : TDatabase);
   Procedure CreateTable (DB : TDatabase; Var Table : TDataset);
   Procedure CreateQuery (DB : TDatabase; Var Query : TDataset);
   Procedure CreateStoredProc (DB : TDatabase; Var StoredProc : TDataset);
   // Properties
   Property DatabaseCount : Longint Read GetCount;
   Property Databases[Index : Longint] : ShortString Read GetDatabase;
   Property DataBaseType[Index : Longint] : TDatabaseClass Read GetDatabaseClass;
   Property QueryType[Index : Longint] : TDatasetClass Read GetQueryClass;
   Property StoredProcType[Index : Longint] : TDatasetClass Read GetStoredProcClass;
   Property TableType[Index : Longint] : TDatasetClass Read GetTableClass;
   end;






More information about the Lazarus mailing list