📄 adodatadrivereh.pas
字号:
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;
procedure TADOCommandEh.SetParamCheck(const Value: Boolean);
begin
FCommand.ParamCheck := Value;
end;
function TADOCommandEh.GetParameters: TParameters;
begin
Result := FCommand.Parameters;
end;
procedure TADOCommandEh.SetParameters(const Value: TParameters);
begin
FCommand.Parameters := Value;
end;
function TADOCommandEh.GetParams: TParams;
begin
if not Assigned(FParams) then
FParams := TParams.Create(Self);
FParams.Assign(Parameters);
Result := FParams;
end;
procedure TADOCommandEh.SetParams(AParams: TParams);
begin
Parameters.Assign(AParams);
end;
{ TADODataDriverEh }
(*
var
DataBaseInc: Integer = 0;
function GetUnicalDataBaseName: String;
begin
Inc(DataBaseInc);
Result := 'ADODataDriverEhDataBaseName' + IntToStr(DataBaseInc);
end;
*)
constructor TADODataDriverEh.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TADODataDriverEh.Destroy;
begin
inherited Destroy;
end;
function TADODataDriverEh.ExecuteCommand(Command: TCustomSQLCommandEh;
var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
if Assigned(OnExecuteCommand)
then Result := OnExecuteCommand(Self, TADOCommandEh(Command), Cursor, FreeOnEof)
else Result := DefaultExecuteCommand(Command, Cursor, FreeOnEof);
end;
function TADODataDriverEh.CreateDesignCopy: TCustomSQLDataDriverEh;
begin
Result := TADODataDriverEh.Create(nil);
Result.SelectCommand := SelectCommand;
Result.UpdateCommand := UpdateCommand;
Result.InsertCommand := InsertCommand;
Result.DeleteCommand := DeleteCommand;
Result.GetrecCommand := GetrecCommand;
TADODataDriverEh(Result).SpecParams := SpecParams;
// TADODataDriverEh(Result).DatabaseName :=
// (DesignDataBase as IDBXDesignDataBaseEh).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;
function TADODataDriverEh.CreateCommand: TCustomSQLCommandEh;
begin
Result := TADOCommandEh.Create(Self);
end;
procedure TADODataDriverEh.GetBackUpdatedValues(MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
if Assigned(FOnGetBackUpdatedValues)
then OnGetBackUpdatedValues(Self, MemRec, TADOCommandEh(Command), ResDataSet)
else DefaultGetUpdatedServerValues(MemRec, Command, ResDataSet);
// DoServerSpecOperations(MemRec, Command, ResDataSet);
end;
(*
//DB2
procedure DoDB2ServerSpecOperations(DataDriver: TADODataDriverEh; MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
end;
//InterBase
procedure DoInterBaseServerSpecOperations(DataDriver: TADODataDriverEh; MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
const
SGENSQL = 'SELECT GEN_ID(%s, %d) FROM RDB$DATABASE'; {do not localize}
var
Generator, GeneratorField: String;
q: TADOQuery;
begin
{ TODO : May be better to use Memrec.UpdateStatus = Inserted ? }
if Command <> DataDriver.InsertCommand then Exit;
Generator := DataDriver.SpecParams.Values['GENERATOR'];
GeneratorField := DataDriver.SpecParams.Values['GENERATOR_FIELD'];
if MemRec.DataStruct.FindField(GeneratorField) = nil then
GeneratorField := '';
if (Generator <> '') and (GeneratorField <> '') then
begin
q := TADOQuery.Create(nil);
try
q.Connection := DataDriver.ADOConnection;
q.SQL.Text := Format(SGENSQL, [Generator, 0]);
q.Open;
// Get current GENERATOR value
MemRec.DataValues[GeneratorField, dvvValueEh] := q.Fields[0].Value;
finally
q.Free;
end;
end;
end;
//Oracle
procedure DoOracleServerSpecOperations(DataDriver: TADODataDriverEh; MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
const
SEQSQL = 'SELECT %s.curval FROM dual'; {do not localize}
var
Sequence, SequenceField: String;
q: TADOQuery;
begin
if Command <> DataDriver.InsertCommand then Exit;
Sequence := DataDriver.SpecParams.Values['SEQUENCE'];
SequenceField := DataDriver.SpecParams.Values['SEQUENCE_FIELD'];
if MemRec.DataStruct.FindField(SequenceField) = nil then
SequenceField := '';
if (Sequence <> '') and (SequenceField <> '') and
(ResDataSet is TCustomADODataSet) and (TCustomADODataSet(ResDataSet).Connection <> nil) then
begin
q := TADOQuery.Create(nil);
try
q.Connection := TCustomADODataSet(ResDataSet).Connection;
q.SQL.Text := Format(SEQSQL, [Sequence, 0]);
q.Open;
// Get current Sequence value
MemRec.DataValues[SequenceField, dvvValueEh] := q.Fields[0].Value;
finally
q.Free;
end;
end;
end;
//Sybase
procedure DoSybaseServerSpecOperations(DataDriver: TADODataDriverEh; MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
end;
//Informix
procedure DoInformixServerSpecOperations(DataDriver: TADODataDriverEh; MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
end;
procedure TADODataDriverEh.DoServerSpecOperations(MemRec: TMemoryRecordEh;
Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
//var
// DbType: String;
begin
if (ADOConnection = nil) then
Exit;
if @FGetADODataDriverServerSpecOperationsPrg <> nil then
FGetADODataDriverServerSpecOperationsPrg(Self).GetBackUpdatedValues(MemRec, Command, ResDataSet);
// TODO : How to get name of server type from ADOConnection? 'Interbase, Oracle, MSSQL ....'
{
//DbType := UpperCase(ADOConnection.DriverName);
DbType := '';
if DbType = 'INFROMIX' then
DoInformixServerSpecOperations(Self, MemRec, Command, ResDataSet)
else if DbType = 'DB2' then
DoDB2ServerSpecOperations(Self, MemRec, Command, ResDataSet)
else if DbType = 'INTRBASE' then
DoInterBaseServerSpecOperations(Self, MemRec, Command, ResDataSet)
else if DbType = 'ORACLE' then
DoOracleServerSpecOperations(Self, MemRec, Command, ResDataSet)
else if DbType = 'SYBASE' then
DoSybaseServerSpecOperations(Self, MemRec, Command, ResDataSet);
}
end;
*)
procedure TADODataDriverEh.SetConnection(const Value: TADOConnection);
begin
if FADOConnection <> Value then
begin
FADOConnection := Value;
if FADOConnection <> nil then
FADOConnection.FreeNotification(Self);
end;
end;
procedure TADODataDriverEh.SetAutoIncFields(Fields: TFields; DataStruct: TMTDataStructEh);
var
AutoIncFieldName: String;
AutoIncField: TMTDataFieldEh;
begin
AutoIncFieldName := SpecParams.Values['AUTO_INCREMENT_FIELD'];
AutoIncField := nil;
if AutoIncFieldName <> '' then
AutoIncField := DataStruct.FindField(AutoIncFieldName);
if (AutoIncField <> nil) and (AutoIncField is TMTNumericDataFieldEh) then
// TMTNumericDataFieldEh(AutoIncField).NumericDataType := fdtAutoIncEh;
TMTNumericDataFieldEh(AutoIncField).AutoIncrement := True;
end;
procedure TADODataDriverEh.AssignCommandParameter(
Command: TADOCommandEh; MemRecord: TMemoryRecordEh;
DataValueVersion: TDataValueVersionEh; Parameter: TParameter);
begin
if Assigned(OnAssignCommandParameter)
then OnAssignCommandParameter(Self, Command, MemRecord, DataValueVersion, Parameter)
else DefaultAssignCommandParameter(Command, MemRecord, DataValueVersion, Parameter);
end;
procedure TADODataDriverEh.DefaultAssignCommandParameter(
Command: TADOCommandEh; MemRecord: TMemoryRecordEh;
DataValueVersion: TDataValueVersionEh; Parameter: TParameter);
var
FIndex: Integer;
begin
FIndex := MemRecord.DataStruct.FieldIndex(Parameter.Name);
if FIndex >= 0 then
begin
{ TODO : Check DataType as in TParam.AssignFieldValue }
if Command.ParamCheck then
Parameter.DataType := MemRecord.DataStruct[FIndex].DataType;
Parameter.Value := MemRecord.DataValues[Parameter.Name, DataValueVersion];
end
else if (UpperCase(Copy(Parameter.Name,1, Length('OLD_'))) = 'OLD_') then
begin
FIndex := MemRecord.DataStruct.FieldIndex(Copy(Parameter.Name, 5, 255));
if FIndex >= 0 then
begin
if Command.ParamCheck then
Parameter.DataType := MemRecord.DataStruct[FIndex].DataType;
Parameter.Value := MemRecord.DataValues[Copy(Parameter.Name, 5, 255), dvvOldestValue];
end
end;
end;
procedure TADODataDriverEh.SetConnectionString(const Value: WideString);
begin
FConnectionString := Value;
end;
function TADODataDriverEh.HaveDataConnection: Boolean;
begin
if (Assigned(ADOConnection) and ADOConnection.Connected) or
(ConnectionString <> '')
then Result := True
else Result := inherited HaveDataConnection();
end;
procedure TADODataDriverEh.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and
(AComponent <> nil) and
(FADOConnection = AComponent)
then
FADOConnection := nil;
end;
function TADODataDriverEh.GetDeleteCommand: TADOCommandEh;
begin
Result := TADOCommandEh(inherited DeleteCommand);
end;
function TADODataDriverEh.GetGetrecCommand: TADOCommandEh;
begin
Result := TADOCommandEh(inherited GetrecCommand);
end;
function TADODataDriverEh.GetInsertCommand: TADOCommandEh;
begin
Result := TADOCommandEh(inherited InsertCommand);
end;
function TADODataDriverEh.GetSelectCommand: TADOCommandEh;
begin
Result := TADOCommandEh(inherited SelectCommand);
end;
function TADODataDriverEh.GetUpdateCommand: TADOCommandEh;
begin
Result := TADOCommandEh(inherited UpdateCommand);
end;
procedure TADODataDriverEh.SetDeleteCommand(const Value: TADOCommandEh);
begin
inherited DeleteCommand := Value;
end;
procedure TADODataDriverEh.SetGetrecCommand(const Value: TADOCommandEh);
begin
inherited GetrecCommand := Value;
end;
procedure TADODataDriverEh.SetInsertCommand(const Value: TADOCommandEh);
begin
inherited InsertCommand := Value;
end;
procedure TADODataDriverEh.SetSelectCommand(const Value: TADOCommandEh);
begin
inherited SelectCommand := Value;
end;
procedure TADODataDriverEh.SetUpdateCommand(const Value: TADOCommandEh);
begin
inherited UpdateCommand := Value;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -