You've already forked lazarus-ccr
TParadoxDataset: Add bookmark support.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6907 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -190,7 +190,7 @@ type
|
|||||||
procedure InternalEdit; override;
|
procedure InternalEdit; override;
|
||||||
procedure InternalFirst; override;
|
procedure InternalFirst; override;
|
||||||
procedure InternalGotoBookmark(ABookmark: Pointer); override;
|
procedure InternalGotoBookmark(ABookmark: Pointer); override;
|
||||||
procedure InternalHandleException; override;
|
// procedure InternalHandleException; override;
|
||||||
procedure InternalInitFieldDefs; override;
|
procedure InternalInitFieldDefs; override;
|
||||||
procedure InternalInitRecord(Buffer: PChar); override;
|
procedure InternalInitRecord(Buffer: PChar); override;
|
||||||
procedure InternalLast; override;
|
procedure InternalLast; override;
|
||||||
@ -203,6 +203,8 @@ type
|
|||||||
procedure SetRecNo(Value: Integer); override;
|
procedure SetRecNo(Value: Integer); override;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
function BookmarkValid(ABookmark: TBookmark): Boolean; override;
|
||||||
|
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; override;
|
||||||
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
|
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
|
||||||
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
|
||||||
procedure SetFieldData({%H-}Field: TField; {%H-}Buffer: Pointer); override;
|
procedure SetFieldData({%H-}Field: TField; {%H-}Buffer: Pointer); override;
|
||||||
@ -242,10 +244,8 @@ type
|
|||||||
// property OnPostError;
|
// property OnPostError;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
implementation
|
||||||
Forms;
|
|
||||||
|
|
||||||
{ TParadoxDataset }
|
{ TParadoxDataset }
|
||||||
|
|
||||||
@ -255,6 +255,7 @@ begin
|
|||||||
FHeader := nil;
|
FHeader := nil;
|
||||||
FTargetEncoding := Uppercase(EncodingUTF8);
|
FTargetEncoding := Uppercase(EncodingUTF8);
|
||||||
FInputEncoding := '';
|
FInputEncoding := '';
|
||||||
|
BookmarkSize := SizeOf(LongInt);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TParadoxDataset.AllocRecordBuffer: PChar;
|
function TParadoxDataset.AllocRecordBuffer: PChar;
|
||||||
@ -265,6 +266,26 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TParadoxDataset.BookmarkValid(ABookmark: TBookmark): Boolean;
|
||||||
|
begin
|
||||||
|
Result := Assigned(ABookmark) and (Length(ABookMark) <> 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TParadoxDataset.CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint;
|
||||||
|
var
|
||||||
|
idx1, idx2: LongWord;
|
||||||
|
begin
|
||||||
|
idx1 := PLongWord(Bookmark1)^;
|
||||||
|
idx2 := PLongWord(Bookmark2)^;
|
||||||
|
if idx1 > idx2 then
|
||||||
|
Result := +1
|
||||||
|
else
|
||||||
|
if idx1 = idx2 then
|
||||||
|
Result := 0
|
||||||
|
else
|
||||||
|
Result := -1
|
||||||
|
end;
|
||||||
|
|
||||||
function TParadoxDataset.CreateBlobStream(Field: TField;
|
function TParadoxDataset.CreateBlobStream(Field: TField;
|
||||||
Mode: TBlobStreamMode): TStream;
|
Mode: TBlobStreamMode): TStream;
|
||||||
var
|
var
|
||||||
@ -344,7 +365,12 @@ end;
|
|||||||
|
|
||||||
procedure TParadoxDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
|
procedure TParadoxDataset.GetBookmarkData(Buffer: PChar; Data: Pointer);
|
||||||
begin
|
begin
|
||||||
//TODO
|
PLongWord(Data)^ := PRecInfo(Buffer + FHeader^.RecordSize)^.RecordNumber;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TParadoxDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
|
||||||
|
begin
|
||||||
|
Result := PRecInfo(Buffer + FHeader^.RecordSize)^.BookmarkFlag;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TParadoxDataset.GetCanModify: Boolean;
|
function TParadoxDataset.GetCanModify: Boolean;
|
||||||
@ -577,14 +603,16 @@ end;
|
|||||||
|
|
||||||
procedure TParadoxDataset.InternalGotoBookmark(ABookmark: Pointer);
|
procedure TParadoxDataset.InternalGotoBookmark(ABookmark: Pointer);
|
||||||
begin
|
begin
|
||||||
SetRecNo(PLongWord(ABookmark)^);
|
if BookmarkValid(ABookmark) then
|
||||||
|
SetRecNo(PLongWord(ABookmark)^);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{
|
||||||
procedure TParadoxDataset.InternalHandleException;
|
procedure TParadoxDataset.InternalHandleException;
|
||||||
begin
|
begin
|
||||||
Application.HandleException(Self);
|
Application.HandleException(Self);
|
||||||
end;
|
end;
|
||||||
|
}
|
||||||
procedure TParadoxDataset.InternalInitFieldDefs;
|
procedure TParadoxDataset.InternalInitFieldDefs;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
@ -769,12 +797,13 @@ end;
|
|||||||
|
|
||||||
procedure TParadoxDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
|
procedure TParadoxDataset.SetBookmarkData(Buffer: PChar; Data: Pointer);
|
||||||
begin
|
begin
|
||||||
//TODO
|
// The BookMarkData is the RecNo: no need to set nothing;
|
||||||
end;
|
{
|
||||||
|
if Data <> nil then
|
||||||
function TParadoxDataset.GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;
|
PRecInfo(Buffer + FHeader^.RecordSize)^.RecordNumber := PLongWord(Data)^
|
||||||
begin
|
else
|
||||||
Result := PRecInfo(Buffer + FHeader^.RecordSize)^.BookmarkFlag;
|
PRecInfo(Buffer + FHeader^.RecordSize)^.RecordNumber := 0;
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TParadoxDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
|
procedure TParadoxDataset.SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);
|
||||||
|
Reference in New Issue
Block a user