home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 August
/
VPR9708A.ISO
/
D3TRIAL
/
INSTALL
/
DATA.Z
/
DB.INT
< prev
next >
Wrap
Text File
|
1997-03-21
|
36KB
|
989 lines
{*******************************************************}
{ }
{ Delphi Visual Component Library }
{ Core Database }
{ }
{ Copyright (c) 1995,97 Borland International }
{ }
{*******************************************************}
unit Db;
{$R-}
interface
uses Windows, SysUtils, Classes, Graphics;
const
{ TDataSet maximum number of record buffers }
dsMaxBufferCount = MAXINT div 8;
{ Maximum string field size }
dsMaxStringSize = 8192;
type
{ Misc Dataset types }
TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue);
TDataEvent = (deFieldChange, deRecordChange, deDataSetChange,
deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState,
deCheckBrowseMode, dePropertyChange, deFieldListChange, deFocusControl);
TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
{ Forward declarations }
TFieldDef = class;
TFieldDefs = class;
TField = class;
TDataLink = class;
TDataSource = class;
TDataSet = class;
{ Exception classes }
EDatabaseError = class(Exception);
{ TFieldDef }
TFieldClass = class of TField;
TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic,
ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor);
TFieldDef = class
public
constructor Create(Owner: TFieldDefs; const Name: string;
DataType: TFieldType; Size: Word; Required: Boolean; FieldNo: Integer);
destructor Destroy; override;
function CreateField(Owner: TComponent): TField;
property InternalCalcField: Boolean;
property DataType: TFieldType;
property FieldClass: TFieldClass;
property FieldNo: Integer;
property Name: string;
property Precision: Integer;
property Required: Boolean;
property Size: Word;
end;
{ TFieldDefs }
TFieldDefs = class
public
constructor Create(DataSet: TDataSet);
destructor Destroy; override;
procedure Add(const Name: string; DataType: TFieldType; Size: Word;
Required: Boolean);
procedure Assign(FieldDefs: TFieldDefs);
procedure Clear;
function Find(const Name: string): TFieldDef;
function IndexOf(const Name: string): Integer;
procedure Update;
property Count: Integer;
property Items[Index: Integer]: TFieldDef; default;
end;
{ TField }
TFieldKind = (fkData, fkCalculated, fkLookup, fkInternalCalc);
TFieldNotifyEvent = procedure(Sender: TField) of object;
TFieldGetTextEvent = procedure(Sender: TField; var Text: string;
DisplayText: Boolean) of object;
TFieldSetTextEvent = procedure(Sender: TField; const Text: string) of object;
TFieldRef = ^TField;
TFieldChars = set of Char;
PLookupListEntry = ^TLookupListEntry;
TLookupListEntry = record
Key: Variant;
Value: Variant;
end;
TLookupList = class(TObject)
public
constructor Create;
destructor Destroy; override;
procedure Add(const AKey, AValue: Variant);
procedure Clear;
function ValueOfKey(const AKey: Variant): Variant;
end;
TField = class(TComponent)
protected
function AccessError(const TypeName: string): EDatabaseError; dynamic;
procedure CheckInactive;
class procedure CheckTypeSize(Value: Integer); virtual;
procedure Change; virtual;
procedure DataChanged;
procedure DefineProperties(Filer: TFiler); override;
procedure FreeBuffers; virtual;
function GetAsBoolean: Boolean; virtual;
function GetAsCurrency: Currency; virtual;
function GetAsDateTime: TDateTime; virtual;
function GetAsFloat: Double; virtual;
function GetAsInteger: Longint; virtual;
function GetAsString: string; virtual;
function GetAsVariant: Variant; virtual;
function GetCanModify: Boolean; virtual;
function GetDataSize: Word; virtual;
function GetDefaultWidth: Integer; virtual;
function GetIsNull: Boolean; virtual;
function GetParentComponent: TComponent; override;
procedure GetText(var Text: string; DisplayText: Boolean); virtual;
function HasParent: Boolean; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure PropertyChanged(LayoutAffected: Boolean);
procedure ReadState(Reader: TReader); override;
procedure SetAsBoolean(Value: Boolean); virtual;
procedure SetAsCurrency(Value: Currency); virtual;
procedure SetAsDateTime(Value: TDateTime); virtual;
procedure SetAsFloat(Value: Double); virtual;
procedure SetAsInteger(Value: Longint); virtual;
procedure SetAsString(const Value: string); virtual;
procedure SetAsVariant(const Value: Variant); virtual;
procedure SetDataType(Value: TFieldType);
procedure SetSize(Value: Word); virtual;
procedure SetParentComponent(AParent: TComponent); override;
procedure SetText(const Value: string); virtual;
procedure SetVarValue(const Value: Variant); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure AssignValue(const Value: TVarRec);
procedure Clear; virtual;
procedure FocusControl;
function GetData(Buffer: Pointer): Boolean;
class function IsBlob: Boolean; virtual;
function IsValidChar(InputChar: Char): Boolean; virtual;
procedure RefreshLookupList;
procedure SetData(Buffer: Pointer);
procedure SetFieldType(Value: TFieldType); virtual;
procedure Validate(Buffer: Pointer);
property AsBoolean: Boolean;
property AsCurrency: Currency;
property AsDateTime: TDateTime;
property AsFloat: Double;
property AsInteger: Longint;
property AsString: string;
property AsVariant: Variant;
property AttributeSet: string;
property Calculated: Boolean default False;
property CanModify: Boolean;
property CurValue: Variant;
property DataSet: TDataSet;
property DataSize: Word;
property DataType: TFieldType;
property DisplayName: string;
property DisplayText: string;
property EditMask: string;
property EditMaskPtr: string;
property FieldNo: Integer;
property IsIndexField: Boolean;
property IsNull: Boolean;
property Lookup: Boolean;
property LookupList: TLookupList;
property NewValue: Variant;
property Offset: word;
property OldValue: Variant;
property Size: Word;
property Text: string;
property ValidChars: TFieldChars;
property Value: Variant;
published
property Alignment: TAlignment default taLeftJustify;
property CustomConstraint: string;
property ConstraintErrorMessage: string;
property DefaultExpression: string;
property DisplayLabel: string;
property DisplayWidth: Integer;
property FieldKind: TFieldKind;
property FieldName: string;
property HasConstraints: Boolean;
property Index: Integer;
property ImportedConstraint: string;
property LookupDataSet: TDataSet;
property LookupKeyFields: string;
property LookupResultField: string;
property KeyFields: string;
property LookupCache: Boolean default False;
property Origin: string;
property ReadOnly: Boolean default False;
property Required: Boolean default False;
property Visible: Boolean default True;
property OnChange: TFieldNotifyEvent;
property OnGetText: TFieldGetTextEvent;
property OnSetText: TFieldSetTextEvent;
property OnValidate: TFieldNotifyEvent;
end;
{ TStringField }
TStringField = class(TField)
protected
class procedure CheckTypeSize(Value: Integer); override;
function GetAsBoolean: Boolean; override;
function GetAsDateTime: TDateTime; override;
function GetAsFloat: Double; override;
function GetAsInteger: Longint; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
function GetDefaultWidth: Integer; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
function GetValue(var Value: string): Boolean;
procedure SetAsBoolean(Value: Boolean); override;
procedure SetAsDateTime(Value: TDateTime); override;
procedure SetAsFloat(Value: Double); override;
procedure SetAsInteger(Value: Longint); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: string;
published
property EditMask;
property Size default 20;
property Transliterate: Boolean default True;
end;
{ TNumericField }
TNumericField = class(TField)
protected
procedure RangeError(Value, Min, Max: Extended);
procedure SetDisplayFormat(const Value: string);
procedure SetEditFormat(const Value: string);
public
constructor Create(AOwner: TComponent); override;
published
property Alignment default taRightJustify;
property DisplayFormat: string;
property EditFormat: string;
end;
{ TIntegerField }
TIntegerField = class(TNumericField)
protected
function GetAsFloat: Double; override;
function GetAsInteger: Longint; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
function GetValue(var Value: Longint): Boolean;
procedure SetAsFloat(Value: Double); override;
procedure SetAsInteger(Value: Longint); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: Longint;
published
property MaxValue: Longint default 0;
property MinValue: Longint default 0;
end;
{ TSmallintField }
TSmallintField = class(TIntegerField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TWordField }
TWordField = class(TIntegerField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TAutoIncField }
TAutoIncField = class(TIntegerField)
public
constructor Create(AOwner: TComponent); override;
end;
{ TFloatField }
TFloatField = class(TNumericField)
protected
function GetAsFloat: Double; override;
function GetAsInteger: Longint; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
procedure SetAsFloat(Value: Double); override;
procedure SetAsInteger(Value: Longint); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: Double;
published
property Currency: Boolean default False;
property MaxValue: Double;
property MinValue: Double;
property Precision: Integer default 15;
end;
{ TCurrencyField }
TCurrencyField = class(TFloatField)
public
constructor Create(AOwner: TComponent); override;
published
property Currency default True;
end;
{ TBooleanField }
TBooleanField = class(TField)
protected
function GetAsBoolean: Boolean; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
function GetDefaultWidth: Integer; override;
procedure SetAsBoolean(Value: Boolean); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: Boolean;
published
property DisplayValues: string;
end;
{ TDateTimeField }
TDateTimeField = class(TField)
protected
function GetAsDateTime: TDateTime; override;
function GetAsFloat: Double; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
procedure SetAsDateTime(Value: TDateTime); override;
procedure SetAsFloat(Value: Double); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: TDateTime;
published
property DisplayFormat: string;
property EditMask;
end;
{ TDateField }
TDateField = class(TDateTimeField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TTimeField }
TTimeField = class(TDateTimeField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TBinaryField }
TBinaryField = class(TField)
protected
class procedure CheckTypeSize(Value: Integer); override;
function GetAsString: string; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
function GetAsVariant: Variant; override;
procedure SetAsString(const Value: string); override;
procedure SetText(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
published
property Size default 16;
end;
{ TBytesField }
TBytesField = class(TBinaryField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TVarBytesField }
TVarBytesField = class(TBytesField)
protected
function GetDataSize: Word; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TBCDField }
TBCDField = class(TNumericField)
protected
class procedure CheckTypeSize(Value: Integer); override;
function GetAsCurrency: Currency; override;
function GetAsFloat: Double; override;
function GetAsInteger: Longint; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetDataSize: Word; override;
function GetDefaultWidth: Integer; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
function GetValue(var Value: Currency): Boolean;
procedure SetAsCurrency(Value: Currency); override;
procedure SetAsFloat(Value: Double); override;
procedure SetAsInteger(Value: Longint); override;
procedure SetAsString(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
property Value: Currency;
published
property Currency: Boolean default False;
property MaxValue: Currency;
property MinValue: Currency;
property Size default 4;
end;
{ TBlobField }
TBlobType = ftBlob..ftTypedBinary;
TBlobField = class(TField)
protected
procedure AssignTo(Dest: TPersistent); override;
procedure FreeBuffers; override;
function GetAsString: string; override;
function GetAsVariant: Variant; override;
function GetBlobSize: Integer; virtual;
function GetIsNull: Boolean; override;
procedure GetText(var Text: string; DisplayText: Boolean); override;
procedure SetAsString(const Value: string); override;
procedure SetText(const Value: string); override;
procedure SetVarValue(const Value: Variant); override;
public
constructor Create(AOwner: TComponent); override;
procedure Assign(Source: TPersistent); override;
procedure Clear; override;
class function IsBlob: Boolean; override;
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
procedure SaveToStream(Stream: TStream);
procedure SetFieldType(Value: TFieldType); override;
property BlobSize: Integer;
property Modified: Boolean;
property Value: string;
property Transliterate: Boolean;
published
property BlobType: TBlobType;
property Size default 0;
end;
{ TMemoField }
TMemoField = class(TBlobField)
public
constructor Create(AOwner: TComponent); override;
published
property Transliterate default True;
end;
{ TGraphicField }
TGraphicField = class(TBlobField)
public
constructor Create(AOwner: TComponent); override;
end;
{ TIndexDef }
TIndexDefs = class;
TIndexOptions = set of (ixPrimary, ixUnique, ixDescending,
ixCaseInsensitive, ixExpression);
TIndexDef = class
public
constructor Create(Owner: TIndexDefs; const Name, Fields: string;
Options: TIndexOptions);
destructor Destroy; override;
property Expression: string;
property Fields: string;
property Name: string;
property Options: TIndexOptions;
property Source: string;
end;
{ TIndexDefs }
TIndexDefs = class
public
constructor Create(DataSet: TDataSet);
destructor Destroy; override;
procedure Add(const Name, Fields: string; Options: TIndexOptions);
procedure Assign(IndexDefs: TIndexDefs);
procedure Clear;
function FindIndexForFields(const Fields: string): TIndexDef;
function GetIndexForFields(const Fields: string;
CaseInsensitive: Boolean): TIndexDef;
function IndexOf(const Name: string): Integer;
procedure Update;
property Count: Integer;
property Items[Index: Integer]: TIndexDef; default;
property Updated: Boolean;
end;
{ TDataLink }
TDataLink = class(TPersistent)
protected
procedure ActiveChanged; virtual;
procedure CheckBrowseMode; virtual;
procedure DataSetChanged; virtual;
procedure DataSetScrolled(Distance: Integer); virtual;
procedure FocusControl(Field: TFieldRef); virtual;
procedure EditingChanged; virtual;
procedure LayoutChanged; virtual;
procedure RecordChanged(Field: TField); virtual;
procedure UpdateData; virtual;
public
constructor Create;
destructor Destroy; override;
function Edit: Boolean;
procedure UpdateRecord;
property Active: Boolean;
property ActiveRecord: Integer;
property BufferCount: Integer;
property DataSet: TDataSet;
property DataSource: TDataSource;
property DataSourceFixed: Boolean;
property Editing: Boolean;
property ReadOnly: Boolean;
property RecordCount: Integer;
end;
{ TDataSource }
TDataChangeEvent = procedure(Sender: TObject; Field: TField) of object;
TDataSource = class(TComponent)
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Edit;
function IsLinkedTo(DataSet: TDataSet): Boolean;
property State: TDataSetState;
published
property AutoEdit: Boolean default True;
property DataSet: TDataSet;
property Enabled: Boolean default True;
property OnStateChange: TNotifyEvent;
property OnDataChange: TDataChangeEvent;
property OnUpdateData: TNotifyEvent;
end;
{ TDataSetDesigner }
TDataSetDesigner = class(TObject)
public
constructor Create(DataSet: TDataSet);
destructor Destroy; override;
procedure BeginDesign;
procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
procedure EndDesign;
property DataSet: TDataSet;
end;
{ TCheckConstraint }
TCheckConstraint = class(TCollectionItem)
public
procedure Assign(Source: TPersistent); override;
function GetDisplayName: string; override;
published
property CustomConstraint: string;
property ErrorMessage: string;
property FromDictionary: Boolean;
property ImportedConstraint: string;
end;
{ TCheckConstraints }
TCheckConstraints = class(TCollection)
protected
function GetOwner: TPersistent; override;
public
constructor Create(Owner: TPersistent);
function Add: TCheckConstraint;
property Items[Index: Integer]: TCheckConstraint; default;
end;
{ TDataSet }
TBookmark = Pointer;
TBookmarkStr = string;
PBookmarkFlag = ^TBookmarkFlag;
TBookmarkFlag = (bfCurrent, bfBOF, bfEOF, bfInserted);
PBufferList = ^TBufferList;
TBufferList = array[0..dsMaxBufferCount - 1] of PChar;
TGetMode = (gmCurrent, gmNext, gmPrior);
TGetResult = (grOK, grBOF, grEOF, grError);
TResyncMode = set of (rmExact, rmCenter);
TDataAction = (daFail, daAbort, daRetry);
TUpdateKind = (ukModify, ukInsert, ukDelete);
TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);
TLocateOption = (loCaseInsensitive, loPartialKey);
TLocateOptions = set of TLocateOption;
TDataOperation = procedure of object;
TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction) of object;
TFilterOption = (foCaseInsensitive, foNoPartialCompare);
TFilterOptions = set of TFilterOption;
TFilterRecordEvent = procedure(DataSet: TDataSet;
var Accept: Boolean) of object;
TDataSet = class(TComponent)
procedure BeginInsertAppend;
procedure CheckCanModify;
procedure CheckFieldName(const FieldName: string);
procedure CheckFieldNames(const FieldNames: string);
procedure CheckOperation(Operation: TDataOperation;
ErrorEvent: TDataSetErrorEvent);
procedure CheckRequiredFields;
procedure DoInternalOpen;
procedure DoInternalClose;
procedure EndInsertAppend;
function GetActive: Boolean;
function GetBuffer(Index: Integer): PChar;
function GetField(Index: Integer): TField;
function GetFieldCount: Integer;
function GetFieldValue(const FieldName: string): Variant;
function GetFound: Boolean;
procedure MoveBuffer(CurIndex, NewIndex: Integer);
procedure RemoveDataSource(DataSource: TDataSource);
procedure RemoveField(Field: TField);
procedure SetActive(Value: Boolean);
procedure SetBufferCount(Value: Integer);
procedure SetField(Index: Integer; Value: TField);
procedure SetFieldDefs(Value: TFieldDefs);
procedure SetFieldValue(const FieldName: string; const Value: Variant);
procedure SetConstraints(const Value: TCheckConstraints);
procedure UpdateBufferCount;
procedure UpdateFieldDefs;
protected
procedure ActivateBuffers; virtual;
procedure BindFields(Binding: Boolean);
function BookmarkAvailable: Boolean;
function BCDToCurr(BCD: Pointer; var Curr: Currency): Boolean; virtual;
function CurrToBCD(const Curr: Currency; BCD: Pointer; Precision,
Decimals: Integer): Boolean; virtual;
procedure CalculateFields(Buffer: PChar); virtual;
procedure CheckActive; virtual;
procedure CheckInactive; virtual;
procedure ClearBuffers; virtual;
procedure ClearCalcFields(Buffer: PChar); virtual;
procedure CloseBlob(Field: TField); virtual;
procedure CloseCursor; virtual;
procedure CreateFields;
procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
procedure DestroyFields; virtual;
procedure DoAfterCancel; virtual;
procedure DoAfterClose; virtual;
procedure DoAfterDelete; virtual;
procedure DoAfterEdit; virtual;
procedure DoAfterInsert; virtual;
procedure DoAfterOpen; virtual;
procedure DoAfterPost; virtual;
procedure DoAfterScroll; virtual;
procedure DoBeforeCancel; virtual;
procedure DoBeforeClose; virtual;
procedure DoBeforeDelete; virtual;
procedure DoBeforeEdit; virtual;
procedure DoBeforeInsert; virtual;
procedure DoBeforeOpen; virtual;
procedure DoBeforePost; virtual;
procedure DoBeforeScroll; virtual;
procedure DoOnCalcFields; virtual;
procedure DoOnNewRecord; virtual;
function FieldByNumber(FieldNo: Integer): TField;
function FindRecord(Restart, GoForward: Boolean): Boolean; virtual;
procedure FreeFieldBuffers; virtual;
function GetBookmarkStr: TBookmarkStr; virtual;
procedure GetCalcFields(Buffer: PChar); virtual;
function GetCanModify: Boolean; virtual;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
function GetDataSource: TDataSource; virtual;
function GetFieldClass(FieldType: TFieldType): TFieldClass; virtual;
function GetStateFieldValue(State: TDataSetState; Field: TField): Variant; virtual;
function GetIsIndexField(Field: TField): Boolean; virtual;
function GetNextRecords: Integer; virtual;
function GetNextRecord: Boolean; virtual;
function GetPriorRecords: Integer; virtual;
function GetPriorRecord: Boolean; virtual;
function GetRecordCount: Integer; virtual;
function GetRecNo: Integer; virtual;
procedure InitFieldDefs; virtual;
procedure InitRecord(Buffer: PChar); virtual;
procedure InternalCancel; virtual;
procedure InternalEdit; virtual;
procedure InternalRefresh; virtual;
procedure Loaded; override;
procedure OpenCursor(InfoQuery: Boolean); virtual;
procedure RefreshInternalCalcFields(Buffer: PChar); virtual;
procedure RestoreState(const Value: TDataSetState);
procedure SetBookmarkStr(const Value: TBookmarkStr); virtual;
procedure SetBufListSize(Value: Integer);
procedure SetChildOrder(Component: TComponent; Order: Integer); override;
procedure SetCurrentRecord(Index: Integer); virtual;
procedure SetFiltered(Value: Boolean); virtual;
procedure SetFilterOptions(Value: TFilterOptions); virtual;
procedure SetFilterText(const Value: string); virtual;
procedure SetFound(const Value: Boolean);
procedure SetModified(Value: Boolean);
procedure SetName(const Value: TComponentName); override;
procedure SetStateFieldValue(State: TDataSetState; Field: TField; Value: Variant); virtual;
procedure SetOnFilterRecord(const Value: TFilterRecordEvent); virtual;
procedure SetRecNo(Value: Integer); virtual;
procedure SetState(Value: TDataSetState);
function SetTempState(const Value: TDataSetState): TDataSetState;
function TempBuffer: PChar;
procedure UpdateIndexDefs; virtual;
property ActiveRecord: Integer;
property CurrentRecord: Integer;
property BlobFieldCount: Integer;
property BookmarkSize: Integer;
property Buffers[Index: Integer]: PChar;
property BufferCount: Integer;
property CalcBuffer: PChar;
property CalcFieldsSize: Integer;
property InternalCalcFields: Boolean;
property Constraints: TCheckConstraints;
protected { abstract methods }
function AllocRecordBuffer: PChar; virtual; abstract;
procedure FreeRecordBuffer(var Buffer: PChar); virtual; abstract;
procedure GetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; virtual; abstract;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; virtual; abstract;
function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
function GetRecordSize: Word; virtual; abstract;
procedure InternalAddRecord(Buffer: Pointer; Append: Boolean); virtual; abstract;
procedure InternalClose; virtual; abstract;
procedure InternalDelete; virtual; abstract;
procedure InternalFirst; virtual; abstract;
procedure InternalGotoBookmark(Bookmark: Pointer); virtual; abstract;
procedure InternalHandleException; virtual; abstract;
procedure InternalInitFieldDefs; virtual; abstract;
procedure InternalInitRecord(Buffer: PChar); virtual; abstract;
procedure InternalLast; virtual; abstract;
procedure InternalOpen; virtual; abstract;
procedure InternalPost; virtual; abstract;
procedure InternalSetToRecord(Buffer: PChar); virtual; abstract;
function IsCursorOpen: Boolean; virtual; abstract;
procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;
procedure SetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
procedure SetFieldData(Field: TField; Buffer: Pointer); virtual; abstract;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ActiveBuffer: PChar;
procedure Append;
procedure AppendRecord(const Values: array of const);
function BookmarkValid(Bookmark: TBookmark): Boolean; virtual;
procedure Cancel; virtual;
procedure CheckBrowseMode;
procedure ClearFields;
procedure Close;
function ControlsDisabled: Boolean;
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; virtual;
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;
procedure CursorPosChanged;
procedure Delete;
procedure DisableControls;
procedure Edit;
procedure EnableControls;
function FieldByName(const FieldName: string): TField;
function FindField(const FieldName: string): TField;
function FindFirst: Boolean;
function FindLast: Boolean;
function FindNext: Boolean;
function FindPrior: Boolean;
procedure First;
procedure FreeBookmark(Bookmark: TBookmark); virtual;
function GetBookmark: TBookmark; virtual;
function GetCurrentRecord(Buffer: PChar): Boolean; virtual;
procedure GetFieldList(List: TList; const FieldNames: string);
procedure GetFieldNames(List: TStrings);
procedure GotoBookmark(Bookmark: TBookmark);
procedure Insert;
procedure InsertRecord(const Values: array of const);
function IsEmpty: Boolean;
function IsLinkedTo(DataSource: TDataSource): Boolean;
function IsSequenced: Boolean; virtual;
procedure Last;
function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean; virtual;
function Lookup(const KeyFields: string; const KeyValues: Variant;
const ResultFields: string): Variant; virtual;
function MoveBy(Distance: Integer): Integer;
procedure Next;
procedure Open;
procedure Post; virtual;
procedure Prior;
procedure Refresh;
procedure Resync(Mode: TResyncMode); virtual;
procedure SetFields(const Values: array of const);
procedure Translate(Src, Dest: PChar; ToOem: Boolean); virtual;
procedure UpdateCursorPos;
procedure UpdateRecord;
property BOF: Boolean;
property Bookmark: TBookmarkStr;
property CanModify: Boolean;
property DataSource: TDataSource;
property DefaultFields: Boolean;
property Designer: TDataSetDesigner;
property EOF: Boolean;
property FieldCount: Integer;
property FieldDefs: TFieldDefs;
property Fields[Index: Integer]: TField;
property FieldValues[const FieldName: string]: Variant; default;
property Found: Boolean;
property Modified: Boolean;
property RecordCount: Integer;
property RecNo: Integer;
property RecordSize: Word;
property State: TDataSetState;
property Filter: string;
property Filtered: Boolean default False;
property FilterOptions: TFilterOptions default [];
property Active: Boolean default False;
property AutoCalcFields: Boolean default True;
property BeforeOpen: TDataSetNotifyEvent;
property AfterOpen: TDataSetNotifyEvent;
property BeforeClose: TDataSetNotifyEvent;
property AfterClose: TDataSetNotifyEvent;
property BeforeInsert: TDataSetNotifyEvent;
property AfterInsert: TDataSetNotifyEvent;
property BeforeEdit: TDataSetNotifyEvent;
property AfterEdit: TDataSetNotifyEvent;
property BeforePost: TDataSetNotifyEvent;
property AfterPost: TDataSetNotifyEvent;
property BeforeCancel: TDataSetNotifyEvent;
property AfterCancel: TDataSetNotifyEvent;
property BeforeDelete: TDataSetNotifyEvent;
property AfterDelete: TDataSetNotifyEvent;
property BeforeScroll: TDataSetNotifyEvent;
property AfterScroll: TDataSetNotifyEvent;
property OnCalcFields: TDataSetNotifyEvent;
property OnDeleteError: TDataSetErrorEvent;
property OnEditError: TDataSetErrorEvent;
property OnFilterRecord: TFilterRecordEvent;
property OnNewRecord: TDataSetNotifyEvent;
property OnPostError: TDataSetErrorEvent;
end;
{ TDateTimeRec }
type
TDateTimeRec = record
case TFieldType of
ftDate: (Date: Longint);
ftTime: (Time: Longint);
ftDateTime: (DateTime: TDateTime);
end;
const
dsEditModes = [dsEdit, dsInsert, dsSetKey];
dsWriteModes = [dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue];
DefaultFieldClasses: array[ftUnknown..ftTypedBinary] of TFieldClass = (
nil, { ftUnknown }
TStringField, { ftString }
TSmallintField, { ftSmallint }
TIntegerField, { ftInteger }
TWordField, { ftWord }
TBooleanField, { ftBoolean }
TFloatField, { ftFloat }
TCurrencyField, { ftCurrency }
TBCDField, { ftBCD }
TDateField, { ftDate }
TTimeField, { ftTime }
TDateTimeField, { ftDateTime }
TBytesField, { ftBytes }
TVarBytesField, { ftVarBytes }
TAutoIncField, { ftAutoInc }
TBlobField, { ftBlob }
TMemoField, { ftMemo }
TGraphicField, { ftGraphic }
TBlobField, { ftFmtMemo }
TBlobField, { ftParadoxOle }
TBlobField, { ftDBaseOle }
TBlobField); { ftTypedBinary }
function ExtractFieldName(const Fields: string; var Pos: Integer): string;
procedure RegisterFields(const FieldClasses: array of TFieldClass);
procedure DatabaseError(const Message: string);
procedure DatabaseErrorFmt(const Message: string; const Args: array of const);
procedure DBError(Ident: Word);
procedure DBErrorFmt(Ident: Word; const Args: array of const);
procedure DisposeMem(var Buffer; Size: Integer);
function BuffersEqual(Buf1, Buf2: Pointer; Size: Integer): Boolean;
function GetFieldProperty(DataSet: TDataSet; Control: TComponent;
const FieldName: string): TField;
const
RegisterFieldsProc: procedure(const FieldClassess: array of TFieldClass) = nil;
implementation