📄 adodatadrivereh.pas
字号:
{*******************************************************}
{ }
{ EhLib vX.X }
{ }
{ TADODataDriverEh component (not ready) }
{ }
{ Copyright (c) 2004 by Dmitry V. Bolshakov }
{ }
{*******************************************************}
unit ADODataDriverEh;
{$I EHLIB.INC}
interface
uses Windows, SysUtils, Classes, Controls, DB,
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
{$IFDEF EH_LIB_5} Contnrs, {$ENDIF}
ToolCtrlsEh, MemTableDataEh, DataDriverEh, ADODB;
type
TAssignParameterEhEvent = procedure (Command: TCustomSQLCommandEh;
MemRecord: TMemoryRecordEh; DataValueVersion: TDataValueVersionEh;
Parameter: TParameter) of object;
TADODataDriverEh = class;
TADODBCommandEh = class(TADOCommand)
protected
property ComponentRef;
end;
{ TADOCommandEh }
TADOCommandEh = class(TCustomSQLCommandEh)
private
FOnAssignParameter: TAssignParameterEhEvent;
FCommand: TADODBCommandEh;
function GetParamCheck: Boolean;
function GetParameters: TParameters;
function GetDataDriver: TADODataDriverEh;
protected
procedure CommandTextChanged(Sender: TObject); override;
procedure SetParamCheck(const Value: Boolean); virtual;
procedure SetParameters(const Value: TParameters); virtual;
public
constructor Create(ADataDriver: TADODataDriverEh);
destructor Destroy; override;
function Execute(var Cursor: TDataSet; var FreeOnEof: Boolean): Integer; override;
procedure Assign(Source: TPersistent); override;
procedure DefaultRefreshParameter(MemRecord: TMemoryRecordEh;
DataValueVersion: TDataValueVersionEh; Parameter: TParameter); virtual;
procedure RefreshParams(MemRecord: TMemoryRecordEh; DataValueVersion: TDataValueVersionEh); override;
property DataDriver: TADODataDriverEh read GetDataDriver;
property OnAssignParameter: TAssignParameterEhEvent read FOnAssignParameter write FOnAssignParameter;
published
property CommandText;
property CommandType;
property Parameters: TParameters read GetParameters write SetParameters;
property ParamCheck: Boolean read GetParamCheck write SetParamCheck default True;
end;
{ TADODataDriverEh }
TADODataDriverEh = class(TCustomSQLDataDriverEh)
private
FSpecParams: TStrings;
FADOConnection: TADOConnection;
FOnAssignCommandParameter: TAssignParameterEhEvent;
FConnectionString: WideString;
procedure SetSpecParams(const Value: TStrings);
procedure SetConnection(const Value: TADOConnection);
procedure SetConnectionString(const Value: WideString);
protected
function CreateSelectCommand: TCustomSQLCommandEh; override;
function CreateUpdateCommand: TCustomSQLCommandEh; override;
function CreateInsertCommand: TCustomSQLCommandEh; override;
function CreateDeleteCommand: TCustomSQLCommandEh; override;
function CreateGetrecCommand: TCustomSQLCommandEh; override;
procedure AssignCommandParameter(Command: TADOCommandEh;
MemRecord: TMemoryRecordEh; DataValueVersion: TDataValueVersionEh; Parameter: TParameter); virtual;
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;
procedure DefaultAssignCommandParameter(Command: TADOCommandEh;
MemRecord: TMemoryRecordEh; DataValueVersion: TDataValueVersionEh; Parameter: TParameter); virtual;
published
property ADOConnection: TADOConnection read FADOConnection write SetConnection;
property ConnectionString: WideString read FConnectionString write SetConnectionString;
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 OnAssignCommandParameter: TAssignParameterEhEvent read FOnAssignCommandParameter write FOnAssignCommandParameter;
property OnUpdateError;
end;
implementation
{ TADOCommandEh }
constructor TADOCommandEh.Create(ADataDriver: TADODataDriverEh);
begin
inherited Create(ADataDriver);
FCommand := TADODBCommandEh.Create(ADataDriver);
FCommand.ComponentRef := ADataDriver;
end;
destructor TADOCommandEh.Destroy;
begin
FCommand.Free;
inherited Destroy;
end;
procedure TADOCommandEh.Assign(Source: TPersistent);
begin
inherited Assign(Source);
if Source is TBaseSQLCommandEh then
with (Source as TBaseSQLCommandEh) do
begin
Self.ParamCheck := ParamCheck;
Self.Parameters := Parameters;
end;
end;
procedure TADOCommandEh.CommandTextChanged(Sender: TObject);
begin
inherited CommandTextChanged(Sender);
FCommand.CommandText := CommandText.Text;
// if not (csReading in DataDriver.ComponentState) then
// if ParamCheck then
// Parameters.ParseSQL(CommandText.Text, True);
end;
procedure TADOCommandEh.RefreshParams(MemRecord: TMemoryRecordEh;
DataValueVersion: TDataValueVersionEh);
var
I: Integer;
begin
for I := 0 to Parameters.Count - 1 do
begin
if Assigned(OnAssignParameter)
then OnAssignParameter(Self, MemRecord, DataValueVersion, Parameters[I])
else DefaultRefreshParameter(MemRecord, DataValueVersion, Parameters[I]);
end;
end;
procedure TADOCommandEh.DefaultRefreshParameter(MemRecord: TMemoryRecordEh;
DataValueVersion: TDataValueVersionEh; Parameter: TParameter);
begin
DataDriver.AssignCommandParameter(Self, MemRecord, DataValueVersion, Parameter);
end;
function TADOCommandEh.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 := TADOQuery.Create(nil);
with ACursor as TADOQuery do
begin
Connection := DataDriver.ADOConnection;
ConnectionString := DataDriver.ConnectionString;
SQL := Self.CommandText;
Parameters.Assign(Self.Parameters);
if CommandType = cthSelectQuery then
Open
else
begin
ExecSQL;
Result := RowsAffected;
end;
Self.Parameters.Assign(Parameters);
end;
end;
cthTable:
begin
ACursor := TADOTable.Create(nil);
with ACursor as TADOTable do
begin
Connection := DataDriver.ADOConnection;
ConnectionString := DataDriver.ConnectionString;
TableName := Self.CommandText.Text;
Parameters.Assign(Self.Parameters);
Open;
Self.Parameters.Assign(Parameters);
end;
end;
cthStoredProc:
begin
ACursor := TADOStoredProc.Create(nil);
with ACursor as TADOStoredProc do
begin
Connection := DataDriver.ADOConnection;
ConnectionString := DataDriver.ConnectionString;
ProcedureName := Self.CommandText.Text;
Parameters.Assign(Self.Parameters);
ExecProc;
//?? Result := RowsAffected;
Self.Parameters.Assign(Parameters);
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 TADOCommandEh.GetDataDriver: TADODataDriverEh;
begin
Result := TADODataDriverEh(inherited DataDriver);
end;
function TADOCommandEh.GetParamCheck: Boolean;
begin
Result := FCommand.ParamCheck;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -