⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsdbgrid.pas

📁 企业进销存管理系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
     working with the BDE.}

    TtsRowProp = record
        Selected: Boolean;
        SelectedSaved: Boolean;
        Prop: TtsDBRowElement;
        PropSaved: Boolean;
    end;

    PtsPropArray = ^TtsPropArray;
    TtsPropArray = array[1..(MaxListSize div ((SizeOf(TtsRowProp) div SizeOf(Longint)) + 1))] of TtsRowProp;

    TtsGridData = class(TObject)
    protected
        FGrid: TtsCustomDBGrid;
        FDataset: TDataset;
        FDatalink: TtsGridDataLink;
        FCanDisableControls: Integer;
        FControlsDisabled: Boolean;
        FQueryText: string;
        FQueryParams: TParams;
        FFieldLayout: TList;
        FPropBuffer: PtsPropArray;
        FPropBufSize: Integer;
        FPropBufferCleared: Boolean;
        FIndexName: string;
        FIndexFieldNames: string;

        procedure ResetFieldLayout;
        procedure SaveFieldLayout;
        function  FieldLayoutChanged: Boolean;
        function  FieldOrderChanged: Boolean;
        function  DatasetIndexName: string;
        function  DatasetIndexFieldNames: string;
        function  IndexChanged: Boolean;
        procedure SaveCurIndex;
        procedure InitGridDataSet; virtual;
        function  CompareBkm(Bkm1, Bkm2: TBookmarkStr): Integer;
        function  CheckCompareBkmPos(var BkmPos1, BkmPos2: TtsBkmPos;
                                     var Found: Boolean): Integer;
        function  CompareBkmPos(var BkmPos1, BkmPos2: TtsBkmPos): Integer;
        function  GreaterEqualBkmPos(var BkmPos1, BkmPos2: TtsBkmPos): Boolean;
        function  LessEqualBkmPos(var BkmPos1, BkmPos2: TtsBkmPos): Boolean;
        function  GreaterBkmPos(var BkmPos1, BkmPos2: TtsBkmPos): Boolean;
        function  LessBkmPos(var BkmPos1, BkmPos2: TtsBkmPos): Boolean;
        function  RecIDRow(ID: Variant): Integer;
        function  BkmPosBookmark(const BkmPos: TtsBkmPos; var Bkm: TBookmarkStr): Boolean;
        function  ActualBkmPos(BkmPos: TtsBkmPos): TtsBkmPos;
        function  GetRecNo: Integer;
        procedure SetRecNo(Value: Integer);
        procedure CheckDisableControls;
        procedure SetCanDisableControls(Value: Boolean);
        function  GetCanDisableControls: Boolean;
        procedure CheckDatalinkBufferOk(OldSize: Integer);
        procedure SetDatasetBufferCount(BufSize: Integer);
        procedure LinkActive(Value: Boolean); virtual;
        procedure ClearPropBuffer(FromRow, ToRow: Integer; Reset: Boolean);
        procedure ResizePropBuffer(NewSize: Integer);

        function  GetBufferRows: Integer; virtual; abstract;
        function  GetActive: Boolean; virtual; abstract;
        procedure MoveFirst; virtual; abstract;
        procedure MoveLast; virtual; abstract;
        procedure SetActiveRecord(Value: Integer); virtual; abstract;
        function  GetActiveRecord: Integer; virtual; abstract;
        function  GetActiveRecordNumber: Longint; virtual; abstract;
        function  GetActiveBookmark: TBookmarkStr; virtual; abstract;
        function  GetRecCount: Longint; virtual; abstract;
        function  FirstRow: Longint; virtual; abstract;
        function  CurrentBufRow: Integer; virtual; abstract;
        function  BufferPos(Bkm: TBookmarkStr): Integer; virtual; abstract;
        function  BufferRow(Bkm: TBookmarkStr): Integer; virtual; abstract;
        function  BufferBkmPos(BkmPos: TtsBkmPos): Integer; virtual; abstract;
        function  MoveActive(Count: Longint; var MovedBy: Longint): Longint; virtual; abstract;
        function  GetBookmark(BufRow: Integer): TBookmarkStr; virtual; abstract;
        function  GetRecId(BufRow: Integer): Variant; virtual; abstract;
        function  GetRecordId(BufRow: Integer): Variant; virtual; abstract;
        function  ResizeBuffer(NewSize: Integer; var Redraw: Boolean): Boolean; virtual; abstract;
        function  OnLastRecord: Boolean; virtual; abstract;
        function  NextBookmark(Bkm: TBookmarkStr; var NextBkm: TBookmarkStr): Boolean; virtual; abstract;
        function  PrevBookmark(Bkm: TBookmarkStr; var PrevBkm: TBookmarkStr): Boolean; virtual; abstract;
        function  PrevBkmPos(const BkmPos: TtsBkmPos): TtsBkmPos; virtual; abstract;
        function  NextBkmPos(const BkmPos: TtsBkmPos): TtsBkmPos; virtual; abstract;
        function  CheckPrevBkmPos(const BkmPos: TtsBkmPos): TtsBkmPos; virtual; abstract;
        function  CheckNextBkmPos(const BkmPos: TtsBkmPos): TtsBkmPos; virtual; abstract;
        function  FirstBookmark: TBookmarkStr; virtual; abstract;
        function  LastBookmark: TBookmarkStr; virtual; abstract;
        function  IsSequenced: Boolean; virtual;
        function  FirstBkmPos: TtsBkmPos; virtual;
        function  LastBkmPos: TtsBkmPos; virtual;
        function  BufferPositionChanged(Value: TtsDatasetPosition): Boolean; virtual;
        function  GetDatasetPosition: TtsDatasetPosition; virtual;
        procedure SetDatasetPosition(Value: TtsDatasetPosition); virtual;
        function  MoveBy(Count: Longint): Longint; virtual; abstract;
        function  GetAtEnd: Boolean; virtual; abstract;
        procedure SetAtEnd(Value: Boolean); virtual; abstract;
        function  GetAtStart: Boolean; virtual; abstract;
        procedure SetAtStart(Value: Boolean); virtual; abstract;
        function  MoveToRecord(Bkm: TBookmarkStr): Boolean; virtual; abstract;
        procedure RereadBuffer(TopRow: Longint; ForceRead: Boolean); virtual; abstract;
        procedure SetProperties(Reread: Boolean); virtual; abstract;
        function  BookmarkValue(Fieldno: Longint; Bkm: TBookmarkStr): Variant; virtual; abstract;
        function  GetBookmarkRecID(RecBkm: TBookmarkStr; BufRownr: Integer): Variant; virtual; abstract;
        function  GetBkmValueAndRecordID(Fieldno: Integer; Bkm: TBookmarkStr; var FieldValue: Variant): Variant; virtual; abstract;
        function  DoRecCount(ReCount: Boolean): Longint; virtual; abstract;
        function  FindKey(Value: string; Fieldno: Integer; CompareType: TtsComboCompareType;
                          ParentGrid: TtsCustomDBGrid; FullCmpLen: Boolean; var Found: Boolean): TBookmarkStr; virtual; abstract;
        function  LocateValue(FromBkm, ToBkm: TBookmarkStr; Value: string; Fieldno: Integer;
                              CompareType: TtsComboCompareType; ParentGrid: TtsCustomDBGrid;
                              FullCmpLen: Boolean; var Found: Boolean): TBookmarkStr; virtual; abstract;
        function  GetPreviousBkms(var FromBkm: TBookmarkStr; ToBkm: TBookmarkStr; BkmList: TtsSelectedList;
                                  StepSize: Integer; SelectingAll: Boolean; var Found: Boolean;
                                  var Count, Total: Longint; var Canceled: Boolean): Boolean; virtual; abstract;
        function  GetNextBkms(var FromBkm: TBookmarkStr; ToBkm: TBookmarkStr; BkmList: TtsSelectedList;
                              StepSize: Integer; SelectingAll: Boolean; var Found: Boolean;
                              var Count, Total: Longint; var Canceled: Boolean): Boolean; virtual; abstract;
        procedure SetBookmarkPos(Value: TBookmarkStr); virtual; abstract;
        function  GetBookmarkPos: TBookmarkStr; virtual; abstract;

        property Dataset: TDataset read FDataset write FDataset;
        property Datalink: TtsGridDataLink read FDatalink write FDatalink;
        property BufferRows: Integer read GetBufferRows;
        property Active: Boolean read GetActive;
        property ActiveRecord: Integer read GetActiveRecord write SetActiveRecord;
        property ActiveBookmark: TBookmarkStr read GetActiveBookmark;
        property ActiveRecordNumber: Longint read GetActiveRecordNumber;
        property RecCount: Longint read GetRecCount;
        property RecId[BufRow: Integer]: Variant read GetRecId;
        property Bookmark[BufRow: Integer]: TBookmarkStr read GetBookmark;
        property RecordId[BufRow: Integer]: Variant read GetRecordId;
        property RecNo: Integer read GetRecNo write SetRecNo;
        property CanDisableControls: Boolean read GetCanDisableControls write SetCanDisableControls;
        property DatasetPosition: TtsDatasetPosition read GetDatasetPosition write SetDatasetPosition;
        property AtEnd: Boolean read GetAtEnd write SetAtEnd;
        property AtStart: Boolean read GetAtStart write SetAtStart;
        property BookmarkPos: TBookmarkStr read GetBookmarkPos write SetBookmarkPos;

    public
        constructor Create(Grid: TtsCustomDBGrid);
        destructor  Destroy; override;
    end;

    {TtsScrollDataset}
    {The ScrollDataset provides independant scrolling behaviour of the
     TtsCustomDBGrid. It maintains a clone of the original dataset which can be
     positioned independantly from the dataset. All data for the grid comes
     from the clone, except for records being edited. Edited values are read
     from and written to the original dataset.}

    PBookmarkStr = ^TBookmarkStr;

    TtsScrollDataset = class(TtsGridData)
    protected
        FHandle: HDBICur;
        FCursorProps: CurProps;
        FActive: Boolean;
        FBuffer: PChar;
        FOldBuffer: PChar;
        FReadBuffer: PChar;
        FTempBuffer: PChar;
        FLookupBuffer: PChar;
        FBufRowSize: Integer;
        FBufRecSize: Integer;
        FBufBookmarkSize: Integer;
        FBufBkmInfoSize: Integer;
        FRecInfoStart: Integer;
        FBufRecIDSize: Integer;
        FRecIDStart: Integer;
        FPBkmStart: Integer;
        FBufPBkmSize: Integer;
        FLookupSize: Integer;
        FLookupStart: Integer;
        FRecNoStatus: TRecNoStatus;
        FBufRows: Integer;
        FOldBufRows: Integer;
        FBufFirstRow: Longint;
        FBufLastRow: Longint;
        FCursorRow: Longint;
        FCursorPosition: TtsCursorPosition;
        FRecCount: Longint;
        FRowsCounted: Longint;
        FCountPos: Longint;
        FCountDirection: TtsCountDirection;
        FActiveBufIndex: Integer;
        FAtStart: Boolean;
        FAtEnd: Boolean;
        FBeenAtEnd: Boolean;
        FRepositioned: Boolean;
        FRepositionDirection: TtsCountDirection;
        FInsertBkm: TBookmarkStr;
        FActiveBookmark: TBookmarkStr;
        FRecordInserted: Boolean;
        FOnInsertRecord: Boolean;
        FEnableCheckRowsCount: Integer;
        FFilter: string;
        FFiltered: Boolean;
        FFilterOptions: TFilterOptions;
        FMasterSource: TDataSource;
        FMasterFields: string;
        FMasterFieldValues: Variant;
        FRecordTypes: Byte;

        function  CheckErr(Err: DbiResult): Boolean;
        function  DatasetHandle: HDBICur;
        function  DatasetLocale: TLocale;
        procedure InitLookupFields(var LengthOfFields: Integer);
        procedure InitGridDataSet; override;
        procedure ResetRecCount;
        procedure InitBuffer;
        function  PBookmark(BufRow: Integer): PBookmarkStr;
        function  PRecordId(BufRow: Integer): PVariant;
        procedure SetRecId(BufRow: Integer; Value: Variant);
        function  GetRecId(BufRow: Integer): Variant; override;
        procedure ClearRecIds(First, Last: Integer; Assign: Boolean);
        procedure ClearBkm(First, Last: Integer; Assign: Boolean);
        procedure CreateBuffer(Size: Integer);
        procedure FreeBuffer;
        function  RecordBuffer(BufRow: Integer): PChar;
        function  GetRecCount: Longint; override;
        function  GetBufRecCount: Integer;
        function  GetActiveRecordBuffer: PChar;
        function  GetActiveBookmark: TBookmarkStr; override;
        procedure SetActiveBookmark(Value: TBookmarkStr);
        procedure GetLookupFields(BufRow: Integer);
        procedure FetchRecordId(BufRow: Integer; Bkm: TBookmarkStr);
        function  GetRecord(BufRow: Integer; Direction: Integer): DbiResult;
        procedure CheckOnInsertRecord(BufRow: Integer);
        function  CheckInsertPassed(var Err: DbiResult; FirstBkm, LastBkm: TBookmarkStr;
                                    Direction: Integer; WasOnInsert: Boolean): Boolean;
        function  CheckInsertedRecord(PrevBkm, CurBkm: TBookmarkStr; BufRow: Integer;
                                      Direction: Integer): Boolean;
        function  GetRecords(StartRow, EndRow: Integer; Direction: Integer;
                             var Count: Longint): DbiResult;
        procedure SetToFirst(ReadData: Boolean);
        procedure SetToEnd(ReadData: Boolean);
        function  SetToRecord(BufRow: Integer): DbiResult;
        function  DoRecCount(ReCount: Boolean): Longint; override;
        procedure MoveBuffer(ToIndex, FromIndex, Count: Integer);
        procedure CheckCountPosition(Err: DbiResult; Count: Integer);
        procedure CheckCursorPosition(Err: DbiResult);
        procedure CheckRowCount(Err: DbiResult);
        procedure AdjustCountOnInsert;
        procedure AdjustCountOnCancel;
        procedure AdjustBufRange;
        function  CheckAtStart: Boolean;
        function  CheckAtEnd: Boolean;
        function  GetAtEnd: Boolean; override;
        procedure SetAtEnd(Value: Boolean); override;
        function  GetAtStart: Boolean; override;
        procedure SetAtStart(Value: Boolean); override;
        function  GetActive: Boolean; override;
        function  OnLastRecord: Boolean; override;
        function  IsSequenced: Boolean; override;
        function  MoveSequenced(Count: Longint; var MoveCount: Longint;
                                var Err: DbiResult): Boolean;
        function  MoveRelative(Count: Longint; var MoveCount: Longint): DbiResult;
        function  MoveForward(Count: Longint): Longint;
        function  MoveBackward(Count: Longint): Longint;
        function  MoveActiveBackward(Count: Longint; var MovedBy: Longint): Longint;
        function  MoveActiveForward(Count: Longint; var MovedBy: Longint): Longint;
        procedure SetActiveRecord(Value: Integer); override;
        function  GetActiveRecord: Integer; override;
        function  GetActiveRecordNumber: Longint; override;
        function  GetRowCountKnown: Boolean;
        function  GetBufferRows: Integer; override;
        function  GetBufferBookmark(BufRow: Integer): TBookmarkStr;
        function  GetBookmark(BufRow: Integer): TBookmarkStr; override;
        function  GetSeqNumber(BufRow: Integer): Longint;
        function  GetRecordId(BufRow: Integer): Variant; override;
        function  FindKey(Value: string; Fieldno: Integer; CompareType: TtsComboCompareType;
                          ParentGrid: TtsCustomDBGrid; FullCmpLen: Boolean; var Found: Boolean): TBookmarkStr; override;
        function  LocateValue(FromBkm, ToBkm: TBookmarkStr; Value: string;
                              Fieldno: Integer; CompareType: TtsComboCompareType;
                              ParentGrid: TtsCustomDBGrid; FullCmpLen: Boolean; var Found: Boolean): TBookmarkStr; override;
        function  GetPreviousBkms(var FromBkm: TBookmarkStr; ToBkm: TBookmarkStr; BkmList: TtsSelectedList;
                                  StepSize: Integer; SelectingAll: B

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -