?? ibxdatadriverdesigneh.pas
字號:
{*******************************************************}
{ }
{ 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 + -