📄 dbxdatadriverdesigneh.pas
字号:
{*******************************************************}
{ }
{ EhLib v4.0 }
{ }
{ TDBXDesignDataBaseEh (Build 4.1.21) }
{ }
{ Copyright (c) 2004-2005 by Dmitry V. Bolshakov }
{ }
{*******************************************************}
unit DBXDataDriverDesignEh;
{$I EHLIB.INC}
interface
{$IFDEF CIL}
{$R DBXDataDriverEh.TDBXDataDriverEh.bmp}
{$ENDIF}
uses Windows, SysUtils, Classes, Controls, DB,
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
{$IFDEF EH_LIB_5} Contnrs, {$ENDIF}
ToolCtrlsEh, DBCommon, MemTableDataEh, DataDriverEh, SqlExpr,
SQLDriverEditEh, DBXDataDriverEh, ComCtrls, MemTableEh,
//design-time
{$IFDEF DESIGNTIME}
{$IFDEF CIL}
Borland.Vcl.Design.DBConnEd,
Borland.Vcl.Design.ComponentDesigner,
{$ELSE}
DBConnEd,
ComponentDesigner,
{$ENDIF}
{$ENDIF}
UpdateSQLEditEh, Forms, Dialogs;
type
{ IDBXDesignDataBaseEh }
IDBXDesignDataBaseEh = interface
['{9E53BD33-4E5E-414F-9E4A-4980A8F7637A}']
function GetSQLConnection: TSQLConnection;
end;
{ TDBXDesignDataBaseEh }
TDBXDesignDataBaseEh = class(TDesignDataBaseEh, IDBXDesignDataBaseEh)
private
FTablesMT: TMemTableEh;
FColumnsMT: TMemTableEh;
FSQLConnection: TSQLConnection;
FTreeNodeMan: TCustomDBService;
FDBService: TCustomDBService;
FApplicationConnection: TSQLConnection;
procedure SetApplicationConnection(const Value: TSQLConnection);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function GetConnected: Boolean; override;
procedure SetConnected(const Value: Boolean); override;
public
constructor Create;
destructor Destroy; override;
function GetEngineName: String; override;
function GetDBServiceClass: TCustomDBServiceClass;
function GetServerTypeName: String; override;
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 GetSQLConnection: TSQLConnection;
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(List: TList): Boolean;
function SupportCustomSQLDataDriver: Boolean; override;
function GetFieldList(const TableName: string; DataSet: TDataSet): Boolean; override;
procedure EditDatabaseParams; override;
property ApplicationConnection: TSQLConnection read FApplicationConnection write SetApplicationConnection;
end;
TDBXAccessEngineEh = class(TAccessEngineEh)
function AccessEngineName: String; override;
// function CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh): TDesignDataBaseEh; override;
function CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh;
DBServiceClass: TCustomDBServiceClass; DataBaseName: String): TDesignDataBaseEh; override;
end;
procedure RegisterDBXAccessEngines;
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: TDBXDataDriverEh): TComponent;
var
DesignDataBase: TDBXDesignDataBaseEh;
// SourceSQLConnection: TSQLConnection;
begin
DesignDataBase := TDBXDesignDataBaseEh.Create;
// SourceSQLConnection := TSQLConnection.Create(nil);
if DataDriver.SQLConnection <> nil then
begin
DesignDataBase.FSQLConnection.ConnectionName := DataDriver.SQLConnection.ConnectionName;
DesignDataBase.FSQLConnection.DriverName := DataDriver.SQLConnection.DriverName;
DesignDataBase.FSQLConnection.GetDriverFunc := DataDriver.SQLConnection.GetDriverFunc;
DesignDataBase.FSQLConnection.KeepConnection := DataDriver.SQLConnection.KeepConnection;
DesignDataBase.FSQLConnection.LibraryName := DataDriver.SQLConnection.LibraryName;
DesignDataBase.FSQLConnection.LoadParamsOnConnect := DataDriver.SQLConnection.LoadParamsOnConnect;
DesignDataBase.FSQLConnection.LoginPrompt := DataDriver.SQLConnection.LoginPrompt;
DesignDataBase.FSQLConnection.Params := DataDriver.SQLConnection.Params;
DesignDataBase.FSQLConnection.TableScope := DataDriver.SQLConnection.TableScope;
DesignDataBase.FSQLConnection.VendorLib := DataDriver.SQLConnection.VendorLib;
DesignDataBase.FSQLConnection.Connected := True;
DesignDataBase.ApplicationConnection := DataDriver.SQLConnection;
end;
// SourceSQLConnection.FDBEDataBase.DatabaseName := GetUnicalDataBaseName;
{$IFDEF DESIGNTIME}
EditConnection(DesignDataBase.FSQLConnection);
{$ENDIF}
Result := DesignDataBase;
end;
procedure SetDesignDBXDataBaseProcEh(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(TDBXDataDriverEh(DataDriver));
end;
end;
procedure RegisterDBXAccessEngines;
begin
RegisterDesignDataBuilderProcEh(TDBXDataDriverEh, SetDesignDBXDataBaseProcEh);
RegisterAccessEngine('DBX', TDBXAccessEngineEh.Create);
end;
procedure UnregisterDBXAccessEngines;
begin
UnregisterDesignDataBuilderProcEh(TDBXDataDriverEh);
UnregisterAccessEngine('DBX');
end;
function GetServerName(SQLConnection: TSQLConnection; var ServerName: String): Boolean;
begin
ServerName := AnsiUpperCase(SQLConnection.DriverName);
Result := True;
end;
var
DataBaseInc: Integer = 0;
function GetUnicalDataBaseName: String;
begin
Inc(DataBaseInc);
Result := 'DBXDataDriverEhDataBaseName' + IntToStr(DataBaseInc);
end;
{ TDBXDesignDataBaseEh }
function TDBXDesignDataBaseEh.BuildObjectTree(List: TList): Boolean;
var
NList: Tlist;
begin
Result := False;
if GetDBServiceClass <> nil then
FDBService := GetDBServiceClass.Create(Self);
if FDBService <> nil then
begin
// if FTreeNodeMan <> nil then
// FTreeNodeMan.Free;
// FTreeNodeMan := TInterbaseDBService.Create(Self);
NList := FDBService.CreateRootNodes;
List.Assign(NList, laCopy);
NList.Free;
Result := True;
end;
Exit;
// TreeView.Items.Clear;
if GetServerTypeName = 'INFORMIX' then
// Result := BuildInformixObjectTree(TreeView)
else if GetServerTypeName = 'INTERBASE' then
Result := BuildInterbaseObjectTree2(List)
else
Result := False;
end;
function TDBXDesignDataBaseEh.BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
Result := EditDataDriverUpdateSQL(DataDriver as TCustomSQLDataDriverEh);// UpdateSQLEditEh
end;
constructor TDBXDesignDataBaseEh.Create;
begin
inherited Create;
FSQLConnection := TSQLConnection.Create(Application);
FTablesMT := TMemTableEh.Create(nil);
FColumnsMT := TMemTableEh.Create(nil);
end;
destructor TDBXDesignDataBaseEh.Destroy;
begin
if not (csDestroying in Application.ComponentState) then
FSQLConnection.Free;
FTablesMT.Free;
FColumnsMT.Free;
FTreeNodeMan.Free;
inherited Destroy;
end;
function TDBXDesignDataBaseEh.CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh;
begin
Result := TDBXDataDriverEh.Create(nil);
Result.SelectCommand := RTDataDriver.SelectCommand;
Result.UpdateCommand := RTDataDriver.UpdateCommand;
Result.InsertCommand := RTDataDriver.InsertCommand;
Result.DeleteCommand := RTDataDriver.DeleteCommand;
Result.GetrecCommand := RTDataDriver.GetrecCommand;
TDBXDataDriverEh(Result).SpecParams := TDBXDataDriverEh(RTDataDriver).SpecParams;
TDBXDataDriverEh(Result).SQLConnection := FSQLConnection;
end;
function TDBXDesignDataBaseEh.DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
Result := False;
if DataDriver is TDBXDataDriverEh then
begin
if TDBXDataDriverEh(DataDriver).SQLConnection <> nil then
Result := (ApplicationConnection = TDBXDataDriverEh(DataDriver).SQLConnection);
end;
end;
function TDBXDesignDataBaseEh.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 := TSQLQuery.Create(nil);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -