Class TDBF (unit DBF)

Inherits from

TDataSet

Constructors


constructor Create(AOwner:tComponent);

____________________________________________________________________________ TDBF.


Functions

procedure CreateTable;

____________________________________________________________________________ TDBF.

Procedure PackTable;

____________________________________________________________________________ TDBF.

Procedure SortTable(SortFields : Array of String);

____________________________________________________________________________ TDBF.

Procedure UnsortTable;

____________________________________________________________________________ TDBF.

function AllocRecordBuffer: PChar;

TDataSet virtual abstract method

____________________________________________________________________________ TDBF.


function FFieldSize(FType:char;FWidth:integer):integer;

FFieldType := ftString

function FFieldType(F : char):TFieldType;

Number of deleted records

Returns the Type of the field


procedure FreeRecordBuffer(var Buffer: PChar);

____________________________________________________________________________ TDBF.

procedure GetBookmarkData(Buffer: PChar; Data: Pointer);

____________________________________________________________________________ TDBF.

function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;

____________________________________________________________________________ TDBF.

function GetFieldData(Field: TField; Buffer: Pointer): Boolean;

____________________________________________________________________________ TDBF.

function GetRecNo: Integer;

____________________________________________________________________________ TDBF.

function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult;

____________________________________________________________________________ TDBF.

function GetRecordCount: Integer;

TDataSet virtual method (optional

____________________________________________________________________________ TDBF.


function GetRecordSize: Word;

//////////////////////////////////////// //// Part III: //// Record buffers and field management //////////////////////////////////////// ____________________________________________________________________________ TDBF.

procedure InternalAddRecord(Buffer: Pointer; Append: Boolean);

____________________________________________________________________________ TDBF.

procedure InternalClose;

____________________________________________________________________________ TDBF.

procedure InternalDelete;

____________________________________________________________________________ TDBF.

procedure InternalFirst;

____________________________________________________________________________ TDBF.

procedure InternalGotoBookmark(Bookmark: Pointer);

////////////////////////////////////// //// Part II: //// Bookmarks management and movement ////////////////////////////////////// ____________________________________________________________________________ TDBF.

procedure InternalHandleException;

____________________________________________________________________________ TDBF.

procedure InternalInitFieldDefs;

____________________________________________________________________________ TDBF.

procedure InternalInitRecord(Buffer: PChar);

____________________________________________________________________________ TDBF.

procedure InternalLast;

____________________________________________________________________________ TDBF.

procedure InternalOpen;

/////////////////////////////////////////////// //// Part I: //// Initialization, opening, and closing /////////////////////////////////////////////// ____________________________________________________________________________ TDBF.

procedure InternalPost;

____________________________________________________________________________ TDBF.

procedure InternalSetToRecord(Buffer: PChar);

____________________________________________________________________________ TDBF.

function IsCursorOpen: Boolean;

____________________________________________________________________________ TDBF.

procedure SetBookmarkData(Buffer: PChar; Data: Pointer);

____________________________________________________________________________ TDBF.

procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);

____________________________________________________________________________ TDBF.

procedure SetFieldData(Field: TField; Buffer: Pointer);

____________________________________________________________________________ TDBF.

procedure SetRecNo(Value: Integer);

____________________________________________________________________________ TDBF.

Procedure WriteHeader;

____________________________________________________________________________ TDBF.

Procedure _AppendRecord(Buffer:PChar);

____________________________________________________________________________ TDBF.

Function _CompareRecords(SortFields:Array of String;Rec1,Rec2:Integer):Integer;

____________________________________________________________________________ TDBF.

Procedure _ReadRecord(Buffer:PChar;IntRecNum:Integer);

type PBDescribField = ^TBDescribField; TBDescribField = packed Record Name : Array[0.

Procedure _SwapRecords(Rec1,REc2:Integer);

____________________________________________________________________________ TDBF.

Procedure _WriteRecord(Buffer:PChar;IntRecNum:Integer);

____________________________________________________________________________ TDBF.

Properties

property Active :

redeclared data set properties

property AfterCancel :


property AfterClose :


property AfterDelete :


property AfterEdit :


property AfterInsert :


property AfterOpen :


property AfterPost :


property AfterScroll :


property BeforeCancel :


property BeforeClose :


property BeforeDelete :


property BeforeEdit :


property BeforeInsert :


property BeforeOpen :


property BeforePost :


property BeforeScroll :


property DBFHeader : tDBFHeader


property Filtered :


property ReadOnly : Boolean


property TableName : string


Events

event OnCalcFields :


event OnDeleteError :


event OnEditError :


event OnFilterRecord :


event OnNewRecord :


event OnPostError :


Variables

BofCrack : Integer;

current record (0 to FRecordCount - 1

EofCrack : Integer;

before the first record (crack

FCurrentRecord : Integer;

offset of RecInfo in record buffer

fDBFHeader : TdbfHeader;

table path and file name

fDeletedCount : Integer;

Position in file where data starts

FFileDecimals : TList;

field widths in record

FFileOffset : TList;

field decimals in record

FFileWidth : TList;

status

FIsTableOpen : Boolean;

after the last record (crack

fReadOnly : Boolean;

field offsets in record

FRecordBufferSize : Integer;

the size of the actual data

FRecordCount : Integer;

The size of the record header

fRecordHeaderSize : Integer;

record data

FRecordInfoOffset : Integer;

data + housekeeping (TRecInfo

FRecordSize : Integer;

current number of record

fStartData : Integer;

Enhancements

FStream : TStream;


FTableName : string;

the physical table


Constructors


constructor Create(AOwner:tComponent);

____________________________________________________________________________ TDBF.Create


Functions


procedure CreateTable;

____________________________________________________________________________ TDBF.CreateTable I: Create a new table/file


Procedure PackTable;

____________________________________________________________________________ TDBF.PackTable Enhancement: Remove all deleted items from the table.


Procedure SortTable(SortFields : Array of String);

____________________________________________________________________________ TDBF.SortTable Enhancement: Sort the table by the fields passed.


Procedure UnsortTable;

____________________________________________________________________________ TDBF.UnsortTable Used to help test the sort routine. Attempts to generate a random dispersment of the records in the dataset.


function AllocRecordBuffer: PChar;

TDataSet virtual abstract method

____________________________________________________________________________ TDBF.AllocRecordBuffer / III: Allocate a buffer for the record


function FFieldSize(FType:char;FWidth:integer):integer;

FFieldType := ftString


function FFieldType(F : char):TFieldType;

Number of deleted records

Returns the Type of the field


procedure FreeRecordBuffer(var Buffer: PChar);

____________________________________________________________________________ TDBF.FreeRecordBuffer III: Free the buffer


procedure GetBookmarkData(Buffer: PChar; Data: Pointer);

____________________________________________________________________________ TDBF.GetBookmarkData II: read the bookmark data from record buffer


function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag;

____________________________________________________________________________ TDBF.GetBookmarkFlag II: retrieve bookmarks flags from buffer


function GetFieldData(Field: TField; Buffer: Pointer): Boolean;

____________________________________________________________________________ TDBF.GetFieldData III: Move data from record buffer to field


function GetRecNo: Integer;

____________________________________________________________________________ TDBF.GetRecNo II (optional): Get the number of the current record


function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult;

____________________________________________________________________________ TDBF.GetRecord III: Retrieve data for current, previous, or next record (eventually moving to it) and return the status


function GetRecordCount: Integer;

TDataSet virtual method (optional

____________________________________________________________________________ TDBF.GetRecordCount II (optional): Record count


function GetRecordSize: Word;

//////////////////////////////////////// //// Part III: //// Record buffers and field management //////////////////////////////////////// ____________________________________________________________________________ TDBF.GetRecordSize / III: Determine the size of each record buffer in memory


procedure InternalAddRecord(Buffer: Pointer; Append: Boolean);

____________________________________________________________________________ TDBF.InternalAddRecord III: Add the current data to the file


procedure InternalClose;

____________________________________________________________________________ TDBF.InternalClose I: close the table/file


procedure InternalDelete;

____________________________________________________________________________ TDBF.InternalDelete III: Delete the current record


procedure InternalFirst;

____________________________________________________________________________ TDBF.InternalFirst II: Go to a special position before the first record


procedure InternalGotoBookmark(Bookmark: Pointer);

////////////////////////////////////// //// Part II: //// Bookmarks management and movement ////////////////////////////////////// ____________________________________________________________________________ TDBF.InternalGotoBookmark II: set the requested bookmark as current record


procedure InternalHandleException;

____________________________________________________________________________ TDBF.InternalHandleException default exception handling


procedure InternalInitFieldDefs;

____________________________________________________________________________ TDBF.InternalInitFieldDefs I: define the fields


procedure InternalInitRecord(Buffer: PChar);

____________________________________________________________________________ TDBF.InternalInitRecord III: Initialize the record (set to zero


procedure InternalLast;

____________________________________________________________________________ TDBF.InternalLast II: Go to a special position after the last record


procedure InternalOpen;

/////////////////////////////////////////////// //// Part I: //// Initialization, opening, and closing /////////////////////////////////////////////// ____________________________________________________________________________ TDBF.InternalOpen I: open the table/file


procedure InternalPost;

____________________________________________________________________________ TDBF.InternalPost III: Write the current data to the file


procedure InternalSetToRecord(Buffer: PChar);

____________________________________________________________________________ TDBF.InternalSetToRecord II: same as above (but passes a buffer


function IsCursorOpen: Boolean;

____________________________________________________________________________ TDBF.IsCursorOpen I: is table open


procedure SetBookmarkData(Buffer: PChar; Data: Pointer);

____________________________________________________________________________ TDBF.SetBookmarkData II: set the bookmark data in the buffer


procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag);

____________________________________________________________________________ TDBF.SetBookmarkFlag II: change the bookmark flags in the buffer


procedure SetFieldData(Field: TField; Buffer: Pointer);

____________________________________________________________________________ TDBF.SetFieldData III: Move data from field to record buffer


procedure SetRecNo(Value: Integer);

____________________________________________________________________________ TDBF.SetRecNo II (optional): Move to the given record number


Procedure WriteHeader;

____________________________________________________________________________ TDBF.WriteHeader


Procedure _AppendRecord(Buffer:PChar);

____________________________________________________________________________ TDBF._AppendRecord


Function _CompareRecords(SortFields:Array of String;Rec1,Rec2:Integer):Integer;

____________________________________________________________________________ TDBF._CompareRecords Compare two records. Returns -1 if REC1 < REC2, 0 if REC1 = REC2, or 1 if REC1 > REC2.


Procedure _ReadRecord(Buffer:PChar;IntRecNum:Integer);

type PBDescribField = ^TBDescribField; TBDescribField = packed Record Name : Array[0..27] of Char; DataType : TFieldType; DataSize : Integer; Size : Integer; Precision : Integer; end; // **************************************************************************** // Low Level Routines for accessing an internal record // ____________________________________________________________________________ // TDBF._ReadRecord


Procedure _SwapRecords(Rec1,REc2:Integer);

____________________________________________________________________________ TDBF._SwapRecords Enhancement: Quick swap of two records. Used primarily for sorting.


Procedure _WriteRecord(Buffer:PChar;IntRecNum:Integer);

____________________________________________________________________________ TDBF._WriteRecord


Properties


property Active :

redeclared data set properties


property AfterCancel :


property AfterClose :


property AfterDelete :


property AfterEdit :


property AfterInsert :


property AfterOpen :


property AfterPost :


property AfterScroll :


property BeforeCancel :


property BeforeClose :


property BeforeDelete :


property BeforeEdit :


property BeforeInsert :


property BeforeOpen :


property BeforePost :


property BeforeScroll :


property DBFHeader : tDBFHeader


property Filtered :


property ReadOnly : Boolean


property TableName : string


Events


event OnCalcFields :


event OnDeleteError :


event OnEditError :


event OnFilterRecord :


event OnNewRecord :


event OnPostError :


Variables


BofCrack : Integer;

current record (0 to FRecordCount - 1


EofCrack : Integer;

before the first record (crack


FCurrentRecord : Integer;

offset of RecInfo in record buffer


fDBFHeader : TdbfHeader;

table path and file name


fDeletedCount : Integer;

Position in file where data starts


FFileDecimals : TList;

field widths in record


FFileOffset : TList;

field decimals in record


FFileWidth : TList;

status


FIsTableOpen : Boolean;

after the last record (crack


fReadOnly : Boolean;

field offsets in record


FRecordBufferSize : Integer;

the size of the actual data


FRecordCount : Integer;

The size of the record header


fRecordHeaderSize : Integer;

record data


FRecordInfoOffset : Integer;

data + housekeeping (TRecInfo


FRecordSize : Integer;

current number of record


fStartData : Integer;

Enhancements


FStream : TStream;


FTableName : string;

the physical table