⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ibxdatadriverdesigneh.pas

📁 EHlib CN For Delphi2009
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*******************************************************}
{                                                       }
{                     EhLib v4.0                        }
{                                                       }
{            TIBXDesignDataBaseEh (Build 4.0.19)        }
{                                                       }
{     Copyright (c) 2004-2005 by Dmitry V. Bolshakov    }
{                                                       }
{*******************************************************}

unit IBXDataDriverDesignEh;

{$I EHLIB.INC}

interface

uses Windows, SysUtils, Classes, Controls, DB,
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
{$IFDEF EH_LIB_5} Contnrs, {$ENDIF}
  ToolCtrlsEh, DBCommon, MemTableDataEh, DataDriverEh, IBDatabase,
  IBQuery, IBTable, IBStoredProc, SQLDriverEditEh, IBXDataDriverEh,
  ComCtrls, MemTableEh, Forms, UpdateSQLEditEh, Dialogs
//design-time  ,Ibdatabaseedit
{$IFDEF DESIGNTIME}
  {$IFDEF CIL}
   ,Borland.Vcl.Design.Ibdatabaseedit
  {$ELSE}
   ,Ibdatabaseedit
  {$ENDIF}
{$ENDIF}
  ;

type

{ IIBXDesignDataBaseEh }

  IIBXDesignDataBaseEh = interface
  ['{9E53BD33-4E5E-414F-9E4A-4980A8F7637A}']
    function GetDatabase: TIBDatabase;
  end;

{ TIBXDesignDataBaseEh }

  TIBXDesignDataBaseEh = class(TDesignDataBaseEh, IIBXDesignDataBaseEh)
  private
    FTablesMT: TMemTableEh;
    FColumnsMT: TMemTableEh;
    FDatabase: TIBDatabase;
    FTransaction: TIBTransaction;
    FTreeNodeMan: TCustomDBService;
    FDBService: TCustomDBService;
    FUpdateObjectsList: TStringList;
    FApplicationDatabase: TIBDatabase;
    procedure SetApplicationDatabase(const Value: TIBDatabase);
  protected
    function GetConnected: Boolean; override;
    procedure SetConnected(const Value: Boolean); override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    constructor Create;
    destructor Destroy; override;
    function GetEngineName: String; override;
    function ServerTypeName: String;
    function CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh; override;
    function DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean; override;
    function Execute(Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer; override;
    function GetDatabase: TIBDatabase;
    function BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean; override;
    function CreateReader(SQL: String; FParams: TParamsArr): TDataSet; override;
    function BuildObjectTree(List: TList): Boolean; override;
//    function BuildInformixObjectTree(TreeView: TTreeView): Boolean;
    function BuildInterbaseObjectTree2(List: TList): Boolean;
    function BuildOracleObjectTree(TreeView: TTreeView): Boolean;
    function SupportCustomSQLDataDriver: Boolean; override;
    function GetFieldList(const TableName: string; DataSet: TDataSet): Boolean; override;
    function GetSpecParamsList: String; override;
    function GetCustomDBService: TCustomDBService; override;
    function GetIncrementObjectsList: TStrings; override;
    procedure EditDatabaseParams; override;
    property ApplicationDatabase: TIBDatabase read FApplicationDatabase write SetApplicationDatabase;
  end;

  TIBXAccessEngineEh = class(TAccessEngineEh)
    function AccessEngineName: String; override;
//    function CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh): TDesignDataBaseEh; override;
    function CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh;
      DBServiceClass: TCustomDBServiceClass; DataBaseName: String): TDesignDataBaseEh; override;
  end;

procedure RegisterIBXAccessEngines;
procedure UnregisterIBXAccessEngines;

procedure Register;

implementation

uses
{$IFDEF DESIGNTIME}
	MemTableDesignEh,
{$IFDEF CIL}
  Borland.Vcl.Design.DesignIntf,
{$ELSE}
  {$IFDEF EH_LIB_6}
     DesignIntf,
  {$ELSE} //EH_LIB_6
      DsgnIntf,
  {$ENDIF}
  DBReg,
{$ENDIF}
{$ENDIF}
DesignConnectionListEh;

function CreateDesignDataBase(DataDriver: TIBXDataDriverEh): TComponent;
var
  DesignDataBase: TIBXDesignDataBaseEh;
//  SourceIBDatabase: TIBDatabase;
begin
  DesignDataBase :=  TIBXDesignDataBaseEh.Create;
//  SourceIBDatabase := TIBDatabase.Create(nil);
  if DataDriver.Database <> nil then
  begin
    DesignDataBase.FDatabase.DataBaseName := DataDriver.Database.DataBaseName;
    DesignDataBase.FDatabase.Params := DataDriver.Database.Params;
    DesignDataBase.FDatabase.SQLDialect := DataDriver.Database.SQLDialect;
    DesignDataBase.ApplicationDatabase := DataDriver.Database;
  end;
{$IFDEF DESIGNTIME}
    EditIBDatabase(DesignDataBase.FDatabase);
{$ENDIF}
//    SourceIBDatabase.FDBEDataBase.DatabaseName := GetUnicalDataBaseName;
  Result := DesignDataBase;
end;

procedure SetDesignIBXDataBaseProcEh(DataDriver: TCustomSQLDataDriverEh);
var
  i: Integer;
  DesignDataBase: TComponent;
begin
  if DataDriver.DesignDataBase = nil then
  begin
    for i := 0 to GetDesignDataBaseList.Count-1 do
      if TDesignDataBaseEh(GetDesignDataBaseList[i]).DesignDataBaseConnetionEqual(DataDriver) then
      begin
        DataDriver.DesignDataBase := TComponent(GetDesignDataBaseList[i]);
        Exit;
      end;

    if GetDesignDataBaseList.Count > 0 then
    begin
      DesignDataBase := SelectDesignConnectionListEh(DesignDataBaseList);
      if (DesignDataBase <> nil) and (DesignDataBase <> DataDriver.DesignDataBase) then
        DataDriver.DesignDataBase := DesignDataBase;
    end else
      DataDriver.DesignDataBase := CreateDesignDataBase(TIBXDataDriverEh(DataDriver));
  end;
end;

procedure RegisterIBXAccessEngines;
begin
  RegisterDesignDataBuilderProcEh(TIBXDataDriverEh, SetDesignIBXDataBaseProcEh);
  RegisterAccessEngine('IBX', TIBXAccessEngineEh.Create);
end;

procedure UnregisterIBXAccessEngines;
begin
  UnregisterDesignDataBuilderProcEh(TIBXDataDriverEh);
  UnregisterAccessEngine('IBX');
//  UnregisterDBServiceEngine(Engine, BDEUniService);
end;

function GetServerName(IBDatabase: TIBDatabase; var ServerName: String): Boolean;
begin
  ServerName := 'INTERBASE';//AnsiUpperCase(IBDatabase.DriverName);
  Result := True;
end;

{
var
  DataBaseInc: Integer = 0;

function GetUnicalDataBaseName: String;
begin
  Inc(DataBaseInc);
  Result := 'IBXDataDriverEhDataBaseName' + IntToStr(DataBaseInc);
end;
}

{ TIBXDesignDataBaseEh }

function TIBXDesignDataBaseEh.BuildObjectTree(List: TList): Boolean;
begin
  Result := False;
//  TreeView.Items.Clear;
  if ServerTypeName = 'INFORMIX' then
//    Result := BuildInformixObjectTree(TreeView)
  else if ServerTypeName = 'INTERBASE' then
    Result := BuildInterbaseObjectTree2(List)
  else
    Result := False;
end;

function TIBXDesignDataBaseEh.BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
  Result := EditDataDriverUpdateSQL(DataDriver as TCustomSQLDataDriverEh);// UpdateSQLEditEh
end;

constructor TIBXDesignDataBaseEh.Create;
begin
  inherited Create;
  FDatabase := TIBDatabase.Create(Application);
  FTransaction := TIBTransaction.Create(Application);
  FTransaction.DefaultDatabase := FDatabase;
  FTablesMT := TMemTableEh.Create(nil);
  FColumnsMT := TMemTableEh.Create(nil);
  FDBService := TInterbaseDBService.Create(Self)
end;

destructor TIBXDesignDataBaseEh.Destroy;
begin
  if not (csDestroying in Application.ComponentState) then
    FDatabase.Free;
  if not (csDestroying in Application.ComponentState) then
    FTransaction.Free;
  FTablesMT.Free;
  FColumnsMT.Free;
  FTreeNodeMan.Free;
  FreeAndNil(FDBService);
  FreeAndNil(FUpdateObjectsList);
  inherited Destroy;
end;

function TIBXDesignDataBaseEh.CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh;
begin
  Result := TIBXDataDriverEh.Create(nil);
  Result.SelectCommand := RTDataDriver.SelectCommand;
  Result.UpdateCommand := RTDataDriver.UpdateCommand;
  Result.InsertCommand := RTDataDriver.InsertCommand;
  Result.DeleteCommand := RTDataDriver.DeleteCommand;
  Result.GetrecCommand := RTDataDriver.GetrecCommand;
  TIBXDataDriverEh(Result).SpecParams := TIBXDataDriverEh(RTDataDriver).SpecParams;
//  TIBXDataDriverEh(Result).Database := FDatabase;
end;

function TIBXDesignDataBaseEh.DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
  Result := False;
  if DataDriver is TIBXDataDriverEh then
  begin
    if TIBXDataDriverEh(DataDriver).Database <> nil then
      Result := (ApplicationDatabase = TIBXDataDriverEh(DataDriver).Database);
  end;
end;

function TIBXDesignDataBaseEh.Execute(Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
  Result := -1;
  FreeOnEof := True;
  with Command do
    case CommandType of
      cthSelectQuery, cthUpdateQuery:
        begin
          Cursor := TIBQuery.Create(nil);
          with Cursor as TIBQuery do
          begin
            Database := FDatabase;
            SQL := Command.CommandText;
            Params := Command.GetParams;
            if CommandType = cthSelectQuery then
              Open
            else
            begin
              ExecSQL;
              Result := RowsAffected;
            end;
          end;
        end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -