|
@@ -21,6 +21,18 @@ type
|
|
|
procedure DropFieldDataset; override;
|
|
|
Function InternalGetNDataset(n : integer) : TDataset; override;
|
|
|
Function InternalGetFieldDataset : TDataSet; override;
|
|
|
+ public
|
|
|
+ function GetTraceDataset(AChange : Boolean) : TDataset; override;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TDbfTraceDataset }
|
|
|
+
|
|
|
+ TDbfTraceDataset = class(Tdbf)
|
|
|
+ protected
|
|
|
+ procedure SetCurrentRecord(Index: Longint); override;
|
|
|
+ procedure RefreshInternalCalcFields(Buffer: PChar); override;
|
|
|
+ procedure InternalInitFieldDefs; override;
|
|
|
+ procedure CalculateFields(Buffer: PChar); override;
|
|
|
end;
|
|
|
|
|
|
implementation
|
|
@@ -128,6 +140,54 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+function TDBFDBConnector.GetTraceDataset(AChange: Boolean): TDataset;
|
|
|
+var ADS, AResDS : TDbf;
|
|
|
+begin
|
|
|
+ ADS := GetNDataset(AChange,15) as TDbf;
|
|
|
+ AResDS := TDbfTraceDataset.Create(nil);
|
|
|
+ AResDS.FilePath:=ADS.FilePath;
|
|
|
+ AResDs.TableName:=ADS.TableName;
|
|
|
+ Result:=AResDS;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDbfTraceDataset }
|
|
|
+
|
|
|
+procedure TDbfTraceDataset.SetCurrentRecord(Index: Longint);
|
|
|
+begin
|
|
|
+ DataEvents := DataEvents + 'SetCurrentRecord' + ';';
|
|
|
+ inherited SetCurrentRecord(Index);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDbfTraceDataset.RefreshInternalCalcFields(Buffer: PChar);
|
|
|
+begin
|
|
|
+ DataEvents := DataEvents + 'RefreshInternalCalcFields' + ';';
|
|
|
+ inherited RefreshInternalCalcFields(Buffer);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDbfTraceDataset.InternalInitFieldDefs;
|
|
|
+var i : integer;
|
|
|
+ IntCalcFieldName : String;
|
|
|
+begin
|
|
|
+ // To fake a internal calculated field, set it's fielddef InternalCalcField
|
|
|
+ // property to true, before the dataset is opened.
|
|
|
+ // This procedure takes care of setting the automatically created fielddef's
|
|
|
+ // InternalCalcField property to true. (works for only one field)
|
|
|
+ IntCalcFieldName:='';
|
|
|
+ for i := 0 to FieldDefs.Count -1 do
|
|
|
+ if fielddefs[i].InternalCalcField then IntCalcFieldName := FieldDefs[i].Name;
|
|
|
+ inherited InternalInitFieldDefs;
|
|
|
+ if IntCalcFieldName<>'' then with FieldDefs.find(IntCalcFieldName) do
|
|
|
+ begin
|
|
|
+ InternalCalcField := True;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDbfTraceDataset.CalculateFields(Buffer: PChar);
|
|
|
+begin
|
|
|
+ DataEvents := DataEvents + 'CalculateFields' + ';';
|
|
|
+ inherited CalculateFields(Buffer);
|
|
|
+end;
|
|
|
+
|
|
|
initialization
|
|
|
RegisterClass(TDBFDBConnector);
|
|
|
end.
|