|
@@ -495,6 +495,7 @@ type
|
|
procedure DataEvent(Event: TDataEvent; Info: Ptrint); override;
|
|
procedure DataEvent(Event: TDataEvent; Info: Ptrint); override;
|
|
procedure BeforeRefreshOpenCursor; virtual;
|
|
procedure BeforeRefreshOpenCursor; virtual;
|
|
procedure DoFilterRecord(out Acceptable: Boolean); virtual;
|
|
procedure DoFilterRecord(out Acceptable: Boolean); virtual;
|
|
|
|
+ procedure CreateFieldDefs; virtual;
|
|
{abstracts, must be overidden by descendents}
|
|
{abstracts, must be overidden by descendents}
|
|
function Fetch : boolean; virtual;
|
|
function Fetch : boolean; virtual;
|
|
function LoadField(FieldDef : TFieldDef;buffer : pointer; out CreateBlob : boolean) : boolean; virtual;
|
|
function LoadField(FieldDef : TFieldDef;buffer : pointer; out CreateBlob : boolean) : boolean; virtual;
|
|
@@ -2683,7 +2684,24 @@ end;
|
|
procedure TCustomBufDataset.CreateDataset;
|
|
procedure TCustomBufDataset.CreateDataset;
|
|
begin
|
|
begin
|
|
CheckInactive;
|
|
CheckInactive;
|
|
- CreateFields;
|
|
|
|
|
|
+ if not ((FieldCount=0) or (FieldDefs.Count=0)) then
|
|
|
|
+ begin
|
|
|
|
+ Open;
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
|
|
+ if (FieldDefs.Count>0) then
|
|
|
|
+ begin
|
|
|
|
+ CreateFields;
|
|
|
|
+ Open;
|
|
|
|
+ end
|
|
|
|
+ else if (fields.Count>0) then
|
|
|
|
+ begin
|
|
|
|
+ CreateFieldDefs;
|
|
|
|
+ BindFields(True);
|
|
|
|
+ Open;
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ raise Exception.Create(SErrNoFieldsDefined);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TCustomBufDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
|
|
function TCustomBufDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
|
|
@@ -2866,6 +2884,17 @@ begin
|
|
Acceptable := Boolean((FParser.ExtractFromBuffer(GetCurrentBuffer))^);
|
|
Acceptable := Boolean((FParser.ExtractFromBuffer(GetCurrentBuffer))^);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TCustomBufDataset.CreateFieldDefs;
|
|
|
|
+
|
|
|
|
+Var
|
|
|
|
+ I : longint;
|
|
|
|
+ FieldDef: TFieldDef;
|
|
|
|
+begin
|
|
|
|
+ For I:=0 to FieldCount-1 do
|
|
|
|
+ with Fields.Fields[I] do if FieldKind=fkData then
|
|
|
|
+ FieldDefs.Add(FieldName,DataType,Size,Required);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TCustomBufDataset.SetFilterText(const Value: String);
|
|
procedure TCustomBufDataset.SetFilterText(const Value: String);
|
|
begin
|
|
begin
|
|
if Value = Filter then
|
|
if Value = Filter then
|
|
@@ -2897,6 +2926,8 @@ end;
|
|
procedure TCustomBufDataset.InternalRefresh;
|
|
procedure TCustomBufDataset.InternalRefresh;
|
|
var StoreDefaultFields: boolean;
|
|
var StoreDefaultFields: boolean;
|
|
begin
|
|
begin
|
|
|
|
+ if length(FUpdateBuffer)>0 then
|
|
|
|
+ DatabaseError(SErrApplyUpdBeforeRefresh);
|
|
StoreDefaultFields:=DefaultFields;
|
|
StoreDefaultFields:=DefaultFields;
|
|
SetDefaultFields(False);
|
|
SetDefaultFields(False);
|
|
FreeFieldBuffers;
|
|
FreeFieldBuffers;
|