datadrivereh.pas
来自「EHLIB控件源码,很好用的表格控件,可进行统计求和功能.」· PAS 代码 · 共 1,855 行 · 第 1/5 页
PAS
1,855 行
AssignFieldValue(MemRecord.DataStruct.MemTableData, MemRecord, i,
dvvOldestValue, RecDataSet)
{ begin
Field := RecDataSet.FindField(MemRecord.DataStruct[i].FieldName);
if Field <> nil then
MemRecord.Value[i, dvtOldestValue] := Field.Value;
end;}
finally
if AFreeOnEof then
RecDataSet.Free;
end;
end;
end;
function TCustomSQLDataDriverEh.DoUpdateRecord(MemTableData: TMemTableDataEh; MemRec: TMemoryRecordEh): Integer;
var
Command: TCustomSQLCommandEh;
ResDataSet: TDataSet;
AFreeOnEof: Boolean;
begin
Result := 0;
if ResolveToDataSet then
Result := inherited DefaultUpdateRecord(MemTableData, MemRec)
else
begin
Command := nil;
if ((MemRec.UpdateStatus = usModified) and (dsoDynamicSQLUpdateEh in DynaSQLParams.Options))
or ((MemRec.UpdateStatus = usInserted) and (dsoDynamicSQLInsertEh in DynaSQLParams.Options))
or ((MemRec.UpdateStatus = usDeleted) and (dsoDynamicSQLDeleteEh in DynaSQLParams.Options)) then
begin
GenerateDynamicSQLCommand(MemRec, ServiceCommand);
Command := ServiceCommand;
end else
case MemRec.UpdateStatus of
usModified: Command := UpdateCommand;
usInserted: Command := InsertCommand;
usDeleted: Command := DeleteCommand;
end;
if Command = nil then Exit;
Command.RefreshParams(MemRec, dvvValueEh);
Result := ExecuteCommand(Command, ResDataSet, AFreeOnEof);
GetBackUpdatedValues(MemRec, Command, ResDataSet);
if AFreeOnEof then
ResDataSet.Free;
// MemRec.MergeChanges;
end
end;
function TCustomSQLDataDriverEh.DefaultUpdateRecord(MemTableData: TMemTableDataEh;
MemRec: TMemoryRecordEh): Integer;
var
Processed: Boolean;
begin
Result := 0;
Processed := False;
if Assigned(FDefaultSQLDataDriverResolver) then
FDefaultSQLDataDriverResolver.UpdateRecord(Self, MemTableData, MemRec, Processed);
if not Processed then
begin
if InternalGetServerSpecOperations <> nil
then Result := InternalGetServerSpecOperations.UpdateRecord(Self, MemTableData, MemRec)
else Result := DoUpdateRecord(MemTableData, MemRec);
end;
end;
procedure TCustomSQLDataDriverEh.GetBackUpdatedValues(MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
if Assigned(FOnGetBackUpdatedValues)
then OnGetBackUpdatedValues(Self, MemRec, Command, ResDataSet)
else DefaultGetUpdatedServerValues(MemRec, Command, ResDataSet);
end;
procedure TCustomSQLDataDriverEh.DefaultGetUpdatedServerValues(
MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
var
Processed: Boolean;
begin
Processed := False;
if Assigned(FDefaultSQLDataDriverResolver) then
FDefaultSQLDataDriverResolver.GetBackUpdatedValues(Self, MemRec, Command, ResDataSet, Processed);
if not Processed and (InternalGetServerSpecOperations <> nil) then
InternalGetServerSpecOperations.GetBackUpdatedValues(MemRec, Command, ResDataSet);
end;
function TCustomSQLDataDriverEh.CreateDeleteCommand: TCustomSQLCommandEh;
begin
Result := CreateCommand;
end;
function TCustomSQLDataDriverEh.CreateInsertCommand: TCustomSQLCommandEh;
begin
Result := CreateCommand;
end;
function TCustomSQLDataDriverEh.CreateSelectCommand: TCustomSQLCommandEh;
begin
Result := CreateCommand;
end;
function TCustomSQLDataDriverEh.CreateGetrecCommand: TCustomSQLCommandEh;
begin
Result := CreateCommand;
end;
function TCustomSQLDataDriverEh.CreateUpdateCommand: TCustomSQLCommandEh;
begin
Result := CreateCommand;
end;
{
function TCustomSQLDataDriverEh.GetReaderDataSet: TDataSet;
begin
if ProviderDataSet <> nil
then Result := inherited GetReaderDataSet
else Result := FReaderDataSet;
end;
}
function TCustomSQLDataDriverEh.GetDefaultCommandTypeFor(Command: TCustomSQLCommandEh): TSQLCommandTypeEh;
begin
if (Command = SelectCommand) or (Command = GetrecCommand)
then Result := cthSelectQuery
else Result := cthUpdateQuery;
end;
procedure RegisterDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass;
DesignDataBaseProc: TSetDesignDataBaseProcEh);
var
ExistsIdx: Integer;
begin
if DesignDataBuilderClasses = nil then
begin
DesignDataBuilderClasses := TList.Create;
DesignDataBuilderProcs := TList.Create;
end;
ExistsIdx := DesignDataBuilderClasses.IndexOf(TObject(DataDriverClass));
if ExistsIdx >= 0 then
DesignDataBuilderProcs[ExistsIdx] := @DesignDataBaseProc
else
begin
DesignDataBuilderClasses.Add(TObject(DataDriverClass));
DesignDataBuilderProcs.Add(@DesignDataBaseProc);
end;
end;
procedure UnregisterDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass);
var
ExistsIdx: Integer;
begin
if DesignDataBuilderClasses = nil then Exit;
ExistsIdx := DesignDataBuilderClasses.IndexOf(TObject(DataDriverClass));
if ExistsIdx >= 0 then
begin
DesignDataBuilderClasses.Delete(ExistsIdx);
DesignDataBuilderProcs.Delete(ExistsIdx);
end;
end;
function GetDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass):
TSetDesignDataBaseProcEh;
function GetDatasetFeaturesDeep(ARootClass, AClass: TClass): Integer;
begin
Result := 0;
while True do
begin
if ARootClass = AClass then
Exit;
Inc(Result);
AClass := AClass.ClassParent;
if AClass = nil then
begin
Result := MAXINT;
Exit;
end;
end;
end;
var
Deep, MeenDeep, i: Integer;
TargetClass: TSQLDataDriverEhClass;
begin
Result := nil;
if DesignDataBuilderClasses = nil then Exit;
MeenDeep := MAXINT;
for i := 0 to DesignDataBuilderClasses.Count - 1 do
begin
if DataDriverClass.InheritsFrom(TSQLDataDriverEhClass(DesignDataBuilderClasses[i])) then
begin
TargetClass := TSQLDataDriverEhClass(DesignDataBuilderClasses[i]);
Deep := GetDatasetFeaturesDeep(TargetClass, DataDriverClass);
if Deep < MeenDeep then
begin
MeenDeep := Deep;
Result := TSetDesignDataBaseProcEh(DesignDataBuilderProcs[i]);
end;
end;
end;
end;
function TCustomSQLDataDriverEh.CreateDesignDataBase: TComponent;
begin
Result := nil;
end;
procedure TCustomSQLDataDriverEh.AssignFromDesignDriver(DesignDataDriver: TCustomSQLDataDriverEh);
begin
SelectCommand := DesignDataDriver.SelectCommand;
UpdateCommand := DesignDataDriver.UpdateCommand;
InsertCommand := DesignDataDriver.InsertCommand;
DeleteCommand := DesignDataDriver.DeleteCommand;
GetrecCommand := DesignDataDriver.GetrecCommand;
end;
function TCustomSQLDataDriverEh.CreateDesignCopy: TCustomSQLDataDriverEh;
begin
Result := TCustomSQLDataDriverEh.Create(nil);
Result.SelectCommand := SelectCommand;
Result.UpdateCommand := UpdateCommand;
Result.InsertCommand := InsertCommand;
Result.DeleteCommand := DeleteCommand;
Result.GetrecCommand := GetrecCommand;
end;
function TCustomSQLDataDriverEh.GetSelectSQL: TStrings;
begin
Result := SelectCommand.CommandText;
end;
procedure TCustomSQLDataDriverEh.SetSelectSQL(const Value: TStrings);
begin
SelectCommand.CommandText := Value;
end;
function TCustomSQLDataDriverEh.GetDeleteSQL: TStrings;
begin
Result := DeleteCommand.CommandText;
end;
procedure TCustomSQLDataDriverEh.SetDeleteSQL(const Value: TStrings);
begin
DeleteCommand.CommandText := Value;
end;
function TCustomSQLDataDriverEh.GetGetrecSQL: TStrings;
begin
Result := GetrecCommand.CommandText;
end;
procedure TCustomSQLDataDriverEh.SetGetrecSQL(const Value: TStrings);
begin
GetrecCommand.CommandText := Value;
end;
function TCustomSQLDataDriverEh.GetInsertSQL: TStrings;
begin
Result := InsertCommand.CommandText;
end;
procedure TCustomSQLDataDriverEh.SetInsertSQL(const Value: TStrings);
begin
InsertCommand.CommandText := Value;
end;
function TCustomSQLDataDriverEh.GetUpdateSQL: TStrings;
begin
Result := UpdateCommand.CommandText;
end;
procedure TCustomSQLDataDriverEh.SetUpdateSQL(const Value: TStrings);
begin
UpdateCommand.CommandText := Value;
end;
function TCustomSQLDataDriverEh.GetDesignDataBase: TComponent;
var
SetBaseProc: TSetDesignDataBaseProcEh;
begin
Result := nil;
SetBaseProc := GetDesignDataBuilderProcEh(TSQLDataDriverEhClass(ClassType));
if @SetBaseProc = nil then Exit;
SetBaseProc(Self);
Result := FDesignDataBase;
end;
procedure TCustomSQLDataDriverEh.SetDesignDataBase(const Value: TComponent);
begin
if FDesignDataBase <> Value then
begin
FDesignDataBase := Value;
if Value <> nil then Value.FreeNotification(Self);
end;
end;
procedure TCustomSQLDataDriverEh.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and
(AComponent <> nil) and
(FDesignDataBase = AComponent)
then
FDesignDataBase := nil;
end;
function TCustomSQLDataDriverEh.RefreshReaderParamsFromCursor(DataSet: TDataSet): Boolean;
var
FParams: TParams;
Field: TField;
I: Integer;
begin
if (ProviderDataSet <> nil) then
Result := inherited RefreshReaderParamsFromCursor(DataSet)
else
begin
Result := False;
FParams := SelectCommand.GetParams;
if FParams <> nil then
for I := 0 to FParams.Count - 1 do
begin
Field := DataSet.FindField(FParams[I].Name);
if (Field <> nil) and not VarEquals(Field.Value, FParams[I].Value) then
begin
Result := True;
Break;
end;
end;
end;
end;
procedure TCustomSQLDataDriverEh.SetReaderParamsFromCursor(DataSet: TDataSet);
var
I: Integer;
FParams: TParams;
begin
if (ProviderDataSet <> nil) then
inherited SetReaderParamsFromCursor(DataSet)
else
begin
FParams := SelectCommand.GetParams;
if FParams <> nil then
begin
DataSet.FieldDefs.Update;
for I := 0 to FParams.Count - 1 do
with FParams[I] do
begin
// if not Bound then
// begin
AssignField(DataSet.FieldByName(Name));
Bound := False;
// end;
end;
end;
SelectCommand.SetParams(FParams);
end;
end;
procedure TCustomSQLDataDriverEh.SetSpecParams(const Value: TStrings);
begin
FSpecParams.Assign(Value);
end;
function TCustomSQLDataDriverEh.HaveDataConnection: Boolean;
begin
Result := False;
end;
function TCustomSQLDataDriverEh.CreateCommand: TCustomSQLCommandEh;
begin
Result := TCustomSQLComman
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?