📄 bdedatadrivereh.pas
字号:
{*******************************************************}
{ }
{ EhLib vX.X }
{ }
{ TBDEDataDriverEh component (Build 11) }
{ }
{ Copyright (c) 2003,04 by Dmitry V. Bolshakov }
{ }
{*******************************************************}
unit BDEDataDriverEh {$IFDEF CIL} platform{$ENDIF};
{$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, DBTables;
type
TBDEDataDriverEh = class;
{ TBDECommandEh }
TBDECommandEh = class(TBaseSQLCommandEh)
private
function GetDataDriver: TBDEDataDriverEh;
public
function Execute(var Cursor: TDataSet; var FreeOnEof: Boolean): Integer; override;
property DataDriver: TBDEDataDriverEh read GetDataDriver;
published
property Params;
property ParamCheck;
property CommandText;
property CommandType;
end;
{ TBDEDataDriverEh }
TBDEDataDriverEh = class(TBaseSQLDataDriverEh)
private
FDatabaseName: string;
FSpecParams: TStrings;
FSessionName: string;
function GetDBSession: TSession;
procedure SetDatabaseName(const Value: string);
procedure SetSessionName(const Value: string);
procedure SetSpecParams(const Value: TStrings);
protected
function CreateSelectCommand: TCustomSQLCommandEh; override;
function CreateUpdateCommand: TCustomSQLCommandEh; override;
function CreateInsertCommand: TCustomSQLCommandEh; override;
function CreateDeleteCommand: TCustomSQLCommandEh; override;
function CreateGetrecCommand: TCustomSQLCommandEh; override;
procedure SetAutoIncFields(Fields: TFields; DataStruct: TMTDataStructEh); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function CreateDesignCopy: TCustomSQLDataDriverEh; override;
function CreateDesignDataBase: IInterface; override;
procedure GetBackUpdatedValues(MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet); override;
procedure DoServerSpecOperations(MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet); virtual;
property DBSession: TSession read GetDBSession;
property SessionName: string read FSessionName write SetSessionName;
published
property DatabaseName: string read FDatabaseName write SetDatabaseName;
property SelectCommand;
property SelectSQL;
property UpdateCommand;
property UpdateSQL;
property InsertCommand;
property InsertSQL;
property DeleteCommand;
property DeleteSQL;
property GetrecCommand;
property GetrecSQL;
property ProviderDataSet;
property KeyFields;
property SpecParams: TStrings read FSpecParams write SetSpecParams;
property OnExecuteCommand;
property OnBuildDataStruct;
property OnGetBackUpdatedValues;
property OnProduceDataReader;
property OnAssignFieldValue;
property OnReadRecord;
property OnRefreshRecord;
property OnUpdateRecord;
property OnAssignCommandParam;
property OnUpdateError;
end;
implementation
uses
{$IFDEF CIL}
System.Text,
{$ENDIF}
BDE;
{ TBDECommandEh }
function TBDECommandEh.Execute(var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
var
ACursor: TDataSet;
begin
Result := -1;
Cursor := nil;
FreeOnEof := False;
ACursor := nil;
try
case CommandType of
cthSelectQuery, cthUpdateQuery:
begin
ACursor := TQuery.Create(nil);
with ACursor as TQuery do
begin
DataBaseName := DataDriver.DatabaseName;
SQL := Self.CommandText;
Params := Self.Params;
if CommandType = cthSelectQuery then
Open
else
begin
ExecSQL;
Result := RowsAffected;
end;
Self.Params := Params;
end;
end;
cthTable:
begin
ACursor := TTable.Create(nil);
with ACursor as TTable do
begin
DataBaseName := DataDriver.DatabaseName;
TableName := Self.CommandText.Text;
Params := Self.Params;
Open;
Self.Params := Params;
end;
end;
cthStoredProc:
begin
ACursor := TStoredProc.Create(nil);
with ACursor as TStoredProc do
begin
DataBaseName := DataDriver.DatabaseName;
StoredProcName := Self.CommandText.Text;
Params := Self.Params;
ExecProc;
//?? Result := RowsAffected;
Self.Params := Params;
end;
end;
end;
if ACursor.Active then
begin
Cursor := ACursor;
FreeOnEof := True;
ACursor := nil;
end
finally
if ACursor <> nil then
ACursor.Free;
end;
end;
function TBDECommandEh.GetDataDriver: TBDEDataDriverEh;
begin
Result := TBDEDataDriverEh(inherited DataDriver);
end;
{ TBDEDataDriverEh }
var
DataBaseInc: Integer = 0;
function GetUnicalDataBaseName: String;
begin
Inc(DataBaseInc);
Result := 'BDEDataDriverEhDataBaseName' + IntToStr(DataBaseInc);
end;
constructor TBDEDataDriverEh.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSpecParams := TStringList.Create;
end;
destructor TBDEDataDriverEh.Destroy;
begin
FSpecParams.Free;
inherited Destroy;
end;
function TBDEDataDriverEh.CreateDesignCopy: TCustomSQLDataDriverEh;
begin
Result := TBDEDataDriverEh.Create(nil);
Result.SelectCommand := SelectCommand;
Result.UpdateCommand := UpdateCommand;
Result.InsertCommand := InsertCommand;
Result.DeleteCommand := DeleteCommand;
Result.GetrecCommand := GetrecCommand;
// TBDEDataDriverEh(Result).DatabaseName :=
// (DesignDataBase as IBDEDesignDataBaseEh).GetDataBase.DatabaseName;
end;
type
TDBDescription = record
szName : String; { Logical name (Or alias) }
szText : String; { Descriptive text }
szPhyName : String; { Physical name/path }
szDbType : String; { Database type }
end;
{$IFDEF CIL}
function StrToOem(const AnsiStr: string): string;
var
Len: Cardinal;
Buffer: StringBuilder;
begin
Len := Length(AnsiStr);
if Len > 0 then
begin
Buffer := StringBuilder.Create(Len);
CharToOemA(AnsiStr, Buffer);
Result := Buffer.ToString;
end;
end;
{$ELSE}
function StrToOem(const AnsiStr: string): string;
begin
SetLength(Result, Length(AnsiStr));
if Length(Result) > 0 then
CharToOem(PChar(AnsiStr), PChar(Result));
end;
{$ENDIF}
function GetDatabaseDesc(DBName: String; var Description: TDBDescription): Boolean;
var
Desc: DBDesc;
begin
Result := False;
{$IFDEF CIL}
if DbiGetDatabaseDesc(StrToOem(DBName), Desc) <> 0 then Exit;
{$ELSE}
if DbiGetDatabaseDesc(PChar(StrToOem(DBName)), @Desc) <> 0 then Exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -