mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 12:39:24 +02:00
+ if TBufDataset.PacketRecords is set to -1, all records are fetched
+ TBufDataset.RecNo now always returns 0 for new records + TBufDataset.Recordcount does not count a new record anymore + EOF and BOF must be true when a dataset is created + Close does not call CheckBrowseMode anymore + Add a check in MoveBy for distance=0 + MoveBy calls DoBeforeScroll before it does anything else + Send the right dataevent in MoveBy (bug 5048) + Check for an edit state in Post + Fixed NotInEditState error message + added the deConnectChange,deReconcileError,deDisabledStateChange TDataEvents + Do not send a deFieldListChange event when opening the dataset git-svn-id: trunk@3463 -
This commit is contained in:
parent
73e6645235
commit
8b189839aa
@ -27,7 +27,7 @@ end;
|
|||||||
|
|
||||||
procedure TBufDataset.SetPacketRecords(aValue : integer);
|
procedure TBufDataset.SetPacketRecords(aValue : integer);
|
||||||
begin
|
begin
|
||||||
if aValue > 0 then FPacketRecords := aValue
|
if (aValue = -1) or (aValue > 0) then FPacketRecords := aValue
|
||||||
else DatabaseError(SInvPacketRecordsValue);
|
else DatabaseError(SInvPacketRecordsValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -68,6 +68,7 @@ begin
|
|||||||
FLastRecBuf := FFirstRecBuf;
|
FLastRecBuf := FFirstRecBuf;
|
||||||
FCurrentRecBuf := FLastRecBuf;
|
FCurrentRecBuf := FLastRecBuf;
|
||||||
|
|
||||||
|
FAllPacketsFetched := False;
|
||||||
FOpen:=True;
|
FOpen:=True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -96,7 +97,7 @@ end;
|
|||||||
procedure TBufDataset.InternalLast;
|
procedure TBufDataset.InternalLast;
|
||||||
begin
|
begin
|
||||||
repeat
|
repeat
|
||||||
until getnextpacket < FPacketRecords;
|
until (getnextpacket < FPacketRecords) or (FPacketRecords = -1);
|
||||||
if FLastRecBuf <> FFirstRecBuf then
|
if FLastRecBuf <> FFirstRecBuf then
|
||||||
FCurrentRecBuf := FLastRecBuf;
|
FCurrentRecBuf := FLastRecBuf;
|
||||||
end;
|
end;
|
||||||
@ -225,9 +226,14 @@ var i : integer;
|
|||||||
pb : pchar;
|
pb : pchar;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if FAllPacketsFetched then
|
||||||
|
begin
|
||||||
|
result := 0;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
i := 0;
|
i := 0;
|
||||||
pb := pchar(pointer(FLastRecBuf)+sizeof(TBufRecLinkItem));
|
pb := pchar(pointer(FLastRecBuf)+sizeof(TBufRecLinkItem));
|
||||||
while (i < FPacketRecords) and (loadbuffer(pb) = grOk) do
|
while ((i < FPacketRecords) or (FPacketRecords = -1)) and (loadbuffer(pb) = grOk) do
|
||||||
begin
|
begin
|
||||||
FLastRecBuf^.next := pointer(IntAllocRecordBuffer);
|
FLastRecBuf^.next := pointer(IntAllocRecordBuffer);
|
||||||
FLastRecBuf^.next^.prior := FLastRecBuf;
|
FLastRecBuf^.next^.prior := FLastRecBuf;
|
||||||
@ -268,6 +274,7 @@ begin
|
|||||||
if not Fetch then
|
if not Fetch then
|
||||||
begin
|
begin
|
||||||
Result := grEOF;
|
Result := grEOF;
|
||||||
|
FAllPacketsFetched := True;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -611,7 +618,7 @@ var recnr : integer;
|
|||||||
begin
|
begin
|
||||||
if value > RecordCount then
|
if value > RecordCount then
|
||||||
begin
|
begin
|
||||||
repeat until (getnextpacket < FPacketRecords) or (value <= RecordCount);
|
repeat until (getnextpacket < FPacketRecords) or (value <= RecordCount) or (FPacketRecords = -1);
|
||||||
if value > RecordCount then
|
if value > RecordCount then
|
||||||
begin
|
begin
|
||||||
DatabaseError(SNoSuchRecord,self);
|
DatabaseError(SNoSuchRecord,self);
|
||||||
@ -634,7 +641,7 @@ Var SearchRecBuffer : PBufRecLinkItem;
|
|||||||
begin
|
begin
|
||||||
abuf := ActiveBuffer;
|
abuf := ActiveBuffer;
|
||||||
// If abuf isn't assigned, the recordset probably isn't opened.
|
// If abuf isn't assigned, the recordset probably isn't opened.
|
||||||
if assigned(abuf) and (FRecordCount>0) then
|
if assigned(abuf) and (FBRecordCount>0) and (state <> dsInsert) then
|
||||||
begin
|
begin
|
||||||
GetBookmarkData(abuf,@SearchRecBuffer);
|
GetBookmarkData(abuf,@SearchRecBuffer);
|
||||||
TmpRecBuffer := FFirstRecBuf;
|
TmpRecBuffer := FFirstRecBuf;
|
||||||
@ -646,7 +653,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
result := recnr;
|
result := recnr;
|
||||||
end
|
end
|
||||||
else result := -1;
|
else result := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TBufDataset.IsCursorOpen: Boolean;
|
function TBufDataset.IsCursorOpen: Boolean;
|
||||||
@ -658,8 +665,7 @@ end;
|
|||||||
Function TBufDataset.GetRecordCount: Longint;
|
Function TBufDataset.GetRecordCount: Longint;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if state <> dsInsert then Result := FBRecordCount
|
Result := FBRecordCount;
|
||||||
else Result := FBRecordCount+1;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function TBufDataset.Locate(const KeyFields: string; const KeyValues: Variant; options: TLocateOptions) : boolean;
|
Function TBufDataset.Locate(const KeyFields: string; const KeyValues: Variant; options: TLocateOptions) : boolean;
|
||||||
|
@ -34,6 +34,8 @@ begin
|
|||||||
FBuffers[0] := nil;
|
FBuffers[0] := nil;
|
||||||
FActiveRecord := 0;
|
FActiveRecord := 0;
|
||||||
FBufferCount := 0;
|
FBufferCount := 0;
|
||||||
|
FEOF := True;
|
||||||
|
FBOF := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -396,16 +398,14 @@ begin
|
|||||||
DoAfterOpen;
|
DoAfterOpen;
|
||||||
DoAfterScroll;
|
DoAfterScroll;
|
||||||
except
|
except
|
||||||
DoInternalClose(false);
|
DoInternalClose;
|
||||||
raise;
|
raise;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TDataset.DoInternalClose(DoCheck : Boolean);
|
Procedure TDataset.DoInternalClose;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if DoCheck then
|
|
||||||
CheckBrowsemode;
|
|
||||||
DoBeforeScroll;
|
DoBeforeScroll;
|
||||||
DoBeforeClose;
|
DoBeforeClose;
|
||||||
FreeFieldBuffers;
|
FreeFieldBuffers;
|
||||||
@ -822,7 +822,7 @@ begin
|
|||||||
DoInternalOpen;
|
DoInternalOpen;
|
||||||
end
|
end
|
||||||
else if not value and (Fstate <> dsinactive) then
|
else if not value and (Fstate <> dsinactive) then
|
||||||
DoInternalClose(True);
|
DoInternalClose;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDataset.Loaded;
|
procedure TDataset.Loaded;
|
||||||
@ -1697,10 +1697,11 @@ Var
|
|||||||
begin
|
begin
|
||||||
CheckBrowseMode;
|
CheckBrowseMode;
|
||||||
Result:=0; TheResult:=0;
|
Result:=0; TheResult:=0;
|
||||||
If ((Distance>0) and FEOF) or
|
DoBeforeScroll;
|
||||||
|
If (Distance = 0) or
|
||||||
|
((Distance>0) and FEOF) or
|
||||||
((Distance<0) and FBOF) then
|
((Distance<0) and FBOF) then
|
||||||
exit;
|
exit;
|
||||||
DoBeforeScroll;
|
|
||||||
Try
|
Try
|
||||||
Scrolled := 0;
|
Scrolled := 0;
|
||||||
If Distance>0 then
|
If Distance>0 then
|
||||||
@ -1711,10 +1712,6 @@ begin
|
|||||||
{$ifdef dsdebug}
|
{$ifdef dsdebug}
|
||||||
WriteLn('ActiveRecord=', FActiveRecord,' FEOF=',FEOF,' FBOF=',FBOF);
|
WriteLn('ActiveRecord=', FActiveRecord,' FEOF=',FEOF,' FBOF=',FBOF);
|
||||||
{$Endif}
|
{$Endif}
|
||||||
// If FRecordCount<>PrevRecordCount then
|
|
||||||
if Scrolled = 0 then
|
|
||||||
DataEvent(deDatasetChange,0)
|
|
||||||
else
|
|
||||||
DataEvent(deDatasetScroll,Scrolled);
|
DataEvent(deDatasetScroll,Scrolled);
|
||||||
DoAfterScroll;
|
DoAfterScroll;
|
||||||
Result:=TheResult;
|
Result:=TheResult;
|
||||||
@ -1772,7 +1769,9 @@ begin
|
|||||||
writeln ('Post: Browse mode set');
|
writeln ('Post: Browse mode set');
|
||||||
{$endif}
|
{$endif}
|
||||||
DoAfterPost;
|
DoAfterPost;
|
||||||
end;
|
end
|
||||||
|
else
|
||||||
|
DatabaseErrorFmt(SNotInEditState, [Name], Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TDataset.Prior;
|
Procedure TDataset.Prior;
|
||||||
@ -1926,7 +1925,7 @@ Procedure TDataset.UpdateRecord;
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
if not (State in dsEditModes) then
|
if not (State in dsEditModes) then
|
||||||
DatabaseError(SNotInEditState, Self);
|
DatabaseErrorFmt(SNotInEditState, [Name], Self);
|
||||||
DataEvent(deUpdateRecord, 0);
|
DataEvent(deUpdateRecord, 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ type
|
|||||||
TDataEvent = (deFieldChange, deRecordChange, deDataSetChange,
|
TDataEvent = (deFieldChange, deRecordChange, deDataSetChange,
|
||||||
deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState,
|
deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState,
|
||||||
deCheckBrowseMode, dePropertyChange, deFieldListChange, deFocusControl,
|
deCheckBrowseMode, dePropertyChange, deFieldListChange, deFocusControl,
|
||||||
deParentScroll);
|
deParentScroll,deConnectChange,deReconcileError,deDisabledStateChange);
|
||||||
|
|
||||||
TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
|
TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
|
||||||
TUpdateStatusSet = SET OF TUpdateStatus;
|
TUpdateStatusSet = SET OF TUpdateStatus;
|
||||||
@ -965,7 +965,7 @@ type
|
|||||||
FState : TDataSetState;
|
FState : TDataSetState;
|
||||||
Procedure DoInsertAppend(DoAppend : Boolean);
|
Procedure DoInsertAppend(DoAppend : Boolean);
|
||||||
Procedure DoInternalOpen;
|
Procedure DoInternalOpen;
|
||||||
Procedure DoInternalClose(DoCheck : Boolean);
|
Procedure DoInternalClose;
|
||||||
Function GetBuffer (Index : longint) : Pchar;
|
Function GetBuffer (Index : longint) : Pchar;
|
||||||
Function GetField (Index : Longint) : TField;
|
Function GetField (Index : Longint) : TField;
|
||||||
Procedure RegisterDataSource(ADatasource : TDataSource);
|
Procedure RegisterDataSource(ADatasource : TDataSource);
|
||||||
@ -1509,6 +1509,8 @@ type
|
|||||||
FCurrentUpdateBuffer : integer;
|
FCurrentUpdateBuffer : integer;
|
||||||
|
|
||||||
FFieldBufPositions : array of longint;
|
FFieldBufPositions : array of longint;
|
||||||
|
|
||||||
|
FAllPacketsFetched : boolean;
|
||||||
procedure CalcRecordSize;
|
procedure CalcRecordSize;
|
||||||
function LoadBuffer(Buffer : PChar): TGetResult;
|
function LoadBuffer(Buffer : PChar): TGetResult;
|
||||||
function GetFieldSize(FieldDef : TFieldDef) : longint;
|
function GetFieldSize(FieldDef : TFieldDef) : longint;
|
||||||
|
@ -2399,7 +2399,7 @@ end;
|
|||||||
Procedure Tfields.Changed;
|
Procedure Tfields.Changed;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) then
|
if (FDataSet <> nil) and not (csDestroying in FDataSet.ComponentState) and FDataset.Active then
|
||||||
FDataSet.DataEvent(deFieldListChange, 0);
|
FDataSet.DataEvent(deFieldListChange, 0);
|
||||||
If Assigned(FOnChange) then
|
If Assigned(FOnChange) then
|
||||||
FOnChange(Self);
|
FOnChange(Self);
|
||||||
|
Loading…
Reference in New Issue
Block a user