home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 October / tst.iso / programs / borland / RUNIMAGE / DELPHI40 / DOC / DB.INT < prev    next >
Encoding:
Text File  |  1998-06-17  |  52.7 KB  |  1,471 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {       Core Database                                   }
  6. {                                                       }
  7. {       Copyright (c) 1995,98 Inprise Corporation       }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Db;
  12.  
  13. {$R-}
  14.  
  15. interface
  16.  
  17. uses Windows, SysUtils, Classes, Graphics;
  18.  
  19. const
  20.  
  21. { Maximum string field size }
  22.  
  23.   dsMaxStringSize = 8192;
  24.  
  25. type
  26.  
  27. { Misc DataSet types }
  28.  
  29.   TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
  30.     dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
  31.     dsInternalCalc);
  32.  
  33.   TDataEvent = (deFieldChange, deRecordChange, deDataSetChange,
  34.     deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState,
  35.     deCheckBrowseMode, dePropertyChange, deFieldListChange,
  36.     deFocusControl, deParentScroll);
  37.  
  38.   TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
  39.   TUpdateStatusSet = set of TUpdateStatus;
  40.  
  41.   TUpdateMode = (upWhereAll, upWhereChanged, upWhereKeyOnly);
  42.  
  43. { Forward declarations }
  44.  
  45.   TField = class;
  46.   TObjectField = class;
  47.   TDataLink = class;
  48.   TDataSource = class;
  49.   TDataSet = class;
  50.   TFieldDefs = class;
  51.   TIndexDefs = class;
  52.  
  53. { Exception classes }
  54.  
  55.   EDatabaseError = class(Exception);
  56.  
  57. { TNamedItem }
  58.  
  59.   TNamedItem = class(TCollectionItem)
  60.   protected
  61.     function GetDisplayName: string; override;
  62.     procedure SetDisplayName(const Value: string); override;
  63.   published
  64.     property Name: string;
  65.   end;
  66.  
  67. { TDefCollection }
  68.  
  69.   TDefUpdateMethod = procedure of object;
  70.  
  71.   TDefCollection = class(TOwnedCollection)
  72.   protected
  73.     procedure DoUpdate(Sender: TObject);
  74.     procedure SetItemName(AItem: TCollectionItem); override;
  75.     procedure Update(AItem: TCollectionItem); override;
  76.     procedure UpdateDefs(AMethod: TDefUpdateMethod);
  77.     property OnUpdate: TNotifyEvent;
  78.   public
  79.     constructor Create(ADataSet: TDataSet; AOwner: TPersistent;
  80.       AClass: TCollectionItemClass);
  81.     function Find(const AName: string): TNamedItem;
  82.     procedure GetItemNames(List: TStrings);
  83.     function IndexOf(const AName: string): Integer;
  84.     property DataSet: TDataSet;
  85.     property Updated: Boolean;
  86.   end;
  87.  
  88. { TFieldDef }
  89.  
  90.   TFieldClass = class of TField;
  91.  
  92.   TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
  93.     ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
  94.     ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
  95.     ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,
  96.     ftLargeint, ftADT, ftArray, ftReference, ftDataSet);
  97.  
  98.   TFieldAttribute = (faHiddenCol, faReadonly, faRequired, faLink, faUnNamed);
  99.   TFieldAttributes = set of TFieldAttribute;
  100.  
  101.   TFieldDef = class(TNamedItem)
  102.   protected
  103.     procedure DefineProperties(Filer: TFiler); override;
  104.   public
  105.     constructor Create(Owner: TFieldDefs; const Name: string;
  106.       DataType: TFieldType; Size: Word; Required: Boolean; FieldNo: Integer); reintroduce; overload;
  107.     destructor Destroy; override;
  108.     function AddChild: TFieldDef;
  109.     procedure Assign(Source: TPersistent); override;
  110.     function CreateField(Owner: TComponent; ParentField: TObjectField = nil;
  111.       const FieldName: string = ''; CreateChildren: Boolean = True): TField;
  112.     function HasChildDefs: Boolean;
  113.     property FieldClass: TFieldClass;
  114.     property FieldNo: Integer;
  115.     property InternalCalcField: Boolean;
  116.     property ParentDef: TFieldDef;
  117.     property Required: Boolean;
  118.   published
  119.     property Attributes: TFieldAttributes default [];
  120.     property ChildDefs: TFieldDefs;
  121.     property DataType: TFieldType default ftUnknown;
  122.     property Precision: Integer default 0;
  123.     property Size: Word default 0;
  124.   end;
  125.  
  126. { TFieldDefs }
  127.  
  128.   TFieldDefs = class(TDefCollection)
  129.   protected
  130.     procedure FieldDefUpdate(Sender: TObject);
  131.     procedure ChildDefUpdate(Sender: TObject);
  132.     procedure SetItemName(AItem: TCollectionItem); override;
  133.   public
  134.     constructor Create(AOwner: TPersistent);
  135.     function AddFieldDef: TFieldDef;
  136.     function Find(const Name: string): TFieldDef;
  137.     procedure Update; reintroduce;
  138.     { procedure Add kept for compatability - AddFieldDef is the better way }
  139.     procedure Add(const Name: string; DataType: TFieldType; Size: Word;
  140.       Required: Boolean);
  141.     property HiddenFields: Boolean;
  142.     property Items[Index: Integer]: TFieldDef; default;
  143.     property ParentDef: TFieldDef;
  144.   end;
  145.  
  146. { TIndexDef }
  147.  
  148.   TIndexOption = (ixPrimary, ixUnique, ixDescending, ixCaseInsensitive,
  149.     ixExpression, ixNonMaintained);
  150.   TIndexOptions = set of TIndexOption;
  151.  
  152.   TIndexDef = class(TNamedItem)
  153.   public
  154.     constructor Create(Owner: TIndexDefs; const Name, Fields: string;
  155.       Options: TIndexOptions); reintroduce; overload;
  156.     procedure Assign(ASource: TPersistent); override;
  157.     property FieldExpression: string;
  158.   published
  159.     property CaseInsFields: string;
  160.     property DescFields: string;
  161.     property Expression: string;
  162.     property Fields: string;
  163.     property Options: TIndexOptions default [];
  164.     property Source: string;
  165.     property GroupingLevel: Integer default 0;
  166.   end;
  167.  
  168. { TIndexDefs }
  169.  
  170.   TIndexDefs = class(TDefCollection)
  171.   protected
  172.     { TODO: Finish these for design environment use
  173.     function GetAttrCount: Integer; override;
  174.     function GetAttr(Index: Integer): string; override;
  175.     function GetItemAttr(Index, ItemIndex: Integer): string; override; }
  176.   public
  177.     constructor Create(ADataSet: TDataSet);
  178.     function AddIndexDef: TIndexDef;
  179.     function Find(const Name: string): TIndexDef;
  180.     procedure Update; reintroduce;
  181.     function FindIndexForFields(const Fields: string): TIndexDef;
  182.     function GetIndexForFields(const Fields: string;
  183.       CaseInsensitive: Boolean): TIndexDef;
  184.     { procedure Add kept for compatability - AddIndexDef is the better way }
  185.     procedure Add(const Name, Fields: string; Options: TIndexOptions);
  186.     property Items[Index: Integer]: TIndexDef; default;
  187.   end;
  188.  
  189. { TFlatList }
  190.  
  191.   TFlatList = class(TStringList)
  192.   protected
  193.     procedure ListChanging(Sender: TObject);
  194.     function FindItem(const Name: string; MustExist: Boolean): TObject;
  195.     function GetCount: Integer; override;
  196.     function GetUpdated: Boolean; virtual;
  197.     procedure UpdateList; virtual; abstract;
  198.     property Updated: Boolean;
  199.     property Locked: Boolean;
  200.   public
  201.     constructor Create(ADataSet: TDataSet);
  202.     procedure Update;
  203.     property DataSet: TDataSet;
  204.   end;
  205.  
  206. { TFieldDefList }
  207.  
  208.   TFieldDefList = class(TFlatList)
  209.   protected
  210.     function GetUpdated: Boolean; override;
  211.     procedure UpdateList; override;
  212.   public
  213.     function FieldByName(const Name: string): TFieldDef;
  214.     function Find(const Name: string): TFieldDef; reintroduce;
  215.     property FieldDefs[Index: Integer]: TFieldDef; default;
  216.   end;
  217.  
  218. { TFieldList }
  219.  
  220.   TFieldList = class(TFlatList)
  221.   protected
  222.     procedure UpdateList; override;
  223.   public
  224.     function FieldByName(const Name: string): TField;
  225.     function Find(const Name: string): TField; reintroduce;
  226.     property Fields[Index: Integer]: TField; default;
  227.   end;
  228.  
  229. { TFields }
  230.  
  231.   TFieldKind = (fkData, fkCalculated, fkLookup, fkInternalCalc, fkAggregate);
  232.   TFieldKinds = set of TFieldKind;
  233.  
  234.   TFields = class(TObject)
  235.   protected
  236.     procedure Changed;
  237.     procedure CheckFieldKind(FieldKind: TFieldKind; Field: TField);
  238.     function GetCount: Integer;
  239.     function GetField(Index: Integer): TField;
  240.     procedure SetFieldIndex(Field: TField; Value: Integer);
  241.     property SparseFields: Integer;
  242.     property OnChange: TNotifyEvent;
  243.     property ValidFieldKinds: TFieldKinds;
  244.   public
  245.     constructor Create(ADataSet: TDataSet);
  246.     destructor Destroy; override;
  247.     procedure Add(Field: TField);
  248.     procedure CheckFieldName(const FieldName: string);
  249.     procedure CheckFieldNames(const FieldNames: string);
  250.     procedure Clear;
  251.     function FindField(const FieldName: string): TField;
  252.     function FieldByName(const FieldName: string): TField;
  253.     function FieldByNumber(FieldNo: Integer): TField;
  254.     procedure GetFieldNames(List: TStrings);
  255.     function IndexOf(Field: TField): Integer;
  256.     procedure Remove(Field: TField);
  257.     property Count: Integer;
  258.     property DataSet: TDataSet;
  259.     property Fields[Index: Integer]: TField; default;
  260.   end;
  261.  
  262. { TField }
  263.  
  264.   TProviderFlag = (pfInUpdate, pfInWhere, pfInKey, pfHidden);
  265.   TProviderFlags = set of TProviderFlag;
  266.  
  267.   TFieldNotifyEvent = procedure(Sender: TField) of object;
  268.   TFieldGetTextEvent = procedure(Sender: TField; var Text: string;
  269.     DisplayText: Boolean) of object;
  270.   TFieldSetTextEvent = procedure(Sender: TField; const Text: string) of object;
  271.   TFieldRef = ^TField;
  272.   TFieldChars = set of Char;
  273.  
  274.   PLookupListEntry = ^TLookupListEntry;
  275.   TLookupListEntry = record
  276.     Key: Variant;
  277.     Value: Variant;
  278.   end;
  279.  
  280.   TLookupList = class(TObject)
  281.   public
  282.     constructor Create;
  283.     destructor Destroy; override;
  284.     procedure Add(const AKey, AValue: Variant);
  285.     procedure Clear;
  286.     function ValueOfKey(const AKey: Variant): Variant;
  287.   end;
  288.  
  289.   TField = class(TComponent)
  290.   protected
  291.     function AccessError(const TypeName: string): EDatabaseError; dynamic;
  292.     procedure Bind(Binding: Boolean); virtual;
  293.     procedure CheckInactive;
  294.     class procedure CheckTypeSize(Value: Integer); virtual;
  295.     procedure Change; virtual;
  296.     procedure DataChanged;
  297.     procedure DefineProperties(Filer: TFiler); override;
  298.     procedure FreeBuffers; virtual;
  299.     function GetAsBoolean: Boolean; virtual;
  300.     function GetAsByteArray: Variant; virtual;
  301.     function GetAsCurrency: Currency; virtual;
  302.     function GetAsDateTime: TDateTime; virtual;
  303.     function GetAsFloat: Double; virtual;
  304.     function GetAsInteger: Longint; virtual;
  305.     function GetAsString: string; virtual;
  306.     function GetAsVariant: Variant; virtual;
  307.     function GetCanModify: Boolean; virtual;
  308.     function GetClassDesc: string;
  309.     function GetDataSize: Word; virtual;
  310.     function GetDefaultWidth: Integer; virtual;
  311.     function GetFieldNo: Integer; virtual;
  312.     function GetHasConstraints: Boolean; virtual;
  313.     function GetIsNull: Boolean; virtual;
  314.     function GetSize: Word; virtual;
  315.     procedure GetText(var Text: string; DisplayText: Boolean); virtual;
  316.     procedure Notification(AComponent: TComponent;
  317.       Operation: TOperation); override;
  318.     procedure PropertyChanged(LayoutAffected: Boolean);
  319.     procedure ReadState(Reader: TReader); override;
  320.     procedure SetAsBoolean(Value: Boolean); virtual;
  321.     procedure SetAsByteArray(const Value: Variant); virtual;
  322.     procedure SetAsCurrency(Value: Currency); virtual;
  323.     procedure SetAsDateTime(Value: TDateTime); virtual;
  324.     procedure SetAsFloat(Value: Double); virtual;
  325.     procedure SetAsInteger(Value: Longint); virtual;
  326.     procedure SetAsString(const Value: string); virtual;
  327.     procedure SetAsVariant(const Value: Variant); virtual;
  328.     procedure SetDataSet(ADataSet: TDataSet); virtual;
  329.     procedure SetDataType(Value: TFieldType);
  330.     procedure SetFieldKind(Value: TFieldKind); virtual;
  331.     procedure SetParentComponent(AParent: TComponent); override;
  332.     procedure SetParentField(AField: TObjectField); virtual;
  333.     procedure SetSize(Value: Word); virtual;
  334.     procedure SetText(const Value: string); virtual;
  335.     procedure SetVarValue(const Value: Variant); virtual;
  336.   public
  337.     constructor Create(AOwner: TComponent); override;
  338.     destructor Destroy; override;
  339.     procedure Assign(Source: TPersistent); override;
  340.     procedure AssignValue(const Value: TVarRec);
  341.     procedure Clear; virtual;
  342.     procedure FocusControl;
  343.     function GetData(Buffer: Pointer): Boolean;
  344.     function GetParentComponent: TComponent; override;
  345.     function HasParent: Boolean; override;
  346.     class function IsBlob: Boolean; virtual;
  347.     function IsValidChar(InputChar: Char): Boolean; virtual;
  348.     procedure RefreshLookupList;
  349.     procedure SetData(Buffer: Pointer);
  350.     procedure SetFieldType(Value: TFieldType); virtual;
  351.     procedure Validate(Buffer: Pointer);
  352.     property AsBoolean: Boolean;
  353.     property AsCurrency: Currency;
  354.     property AsDateTime: TDateTime;
  355.     property AsFloat: Double;
  356.     property AsInteger: Longint;
  357.     property AsString: string;
  358.     property AsVariant: Variant;
  359.     property AttributeSet: string;
  360.     property Calculated: Boolean default False;
  361.     property CanModify: Boolean;
  362.     property CurValue: Variant;
  363.     property DataSet: TDataSet;
  364.     property DataSize: Word;
  365.     property DataType: TFieldType;
  366.     property DisplayName: string;
  367.     property DisplayText: string;
  368.     property EditMask: string;
  369.     property EditMaskPtr: string;
  370.     property FieldNo: Integer;
  371.     property FullName: string;
  372.     property IsIndexField: Boolean;
  373.     property IsNull: Boolean;
  374.     property Lookup: Boolean;
  375.     property LookupList: TLookupList;
  376.     property NewValue: Variant;
  377.     property Offset: word;
  378.     property OldValue: Variant;
  379.     property ParentField: TObjectField;
  380.     property Size: Word;
  381.     property Text: string;
  382.     property ValidChars: TFieldChars;
  383.     property Value: Variant;
  384.   published
  385.     property Alignment: TAlignment default taLeftJustify;
  386.     property CustomConstraint: string;
  387.     property ConstraintErrorMessage: string;
  388.     property DefaultExpression: string;
  389.     property DisplayLabel: string;
  390.     property DisplayWidth: Integer;
  391.     property FieldKind: TFieldKind default fkData;
  392.     property FieldName: string;
  393.     property HasConstraints: Boolean;
  394.     property Index: Integer;
  395.     property ImportedConstraint: string;
  396.     property LookupDataSet: TDataSet;
  397.     property LookupKeyFields: string;
  398.     property LookupResultField: string;
  399.     property KeyFields: string;
  400.     property LookupCache: Boolean default False;
  401.     property Origin: string;
  402.     property ProviderFlags: TProviderFlags default [pfInWhere, pfInUpdate];
  403.     property ReadOnly: Boolean default False;
  404.     property Required: Boolean default False;
  405.     property Visible: Boolean default True;
  406.     property OnChange: TFieldNotifyEvent;
  407.     property OnGetText: TFieldGetTextEvent;
  408.     property OnSetText: TFieldSetTextEvent;
  409.     property OnValidate: TFieldNotifyEvent;
  410.   end;
  411.  
  412. { TStringField }
  413.  
  414.   TStringField = class(TField)
  415.   protected
  416.     class procedure CheckTypeSize(Value: Integer); override;
  417.     function GetAsBoolean: Boolean; override;
  418.     function GetAsDateTime: TDateTime; override;
  419.     function GetAsFloat: Double; override;
  420.     function GetAsInteger: Longint; override;
  421.     function GetAsString: string; override;
  422.     function GetAsVariant: Variant; override;
  423.     function GetDataSize: Word; override;
  424.     function GetDefaultWidth: Integer; override;
  425.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  426.     function GetValue(var Value: string): Boolean;
  427.     procedure SetAsBoolean(Value: Boolean); override;
  428.     procedure SetAsDateTime(Value: TDateTime); override;
  429.     procedure SetAsFloat(Value: Double); override;
  430.     procedure SetAsInteger(Value: Longint); override;
  431.     procedure SetAsString(const Value: string); override;
  432.     procedure SetVarValue(const Value: Variant); override;
  433.   public
  434.     constructor Create(AOwner: TComponent); override;
  435.     property Value: string;
  436.     property FixedChar: Boolean;
  437.   published
  438.     property EditMask;
  439.     property Size default 20;
  440.     property Transliterate: Boolean default True;
  441.   end;
  442.  
  443. { TNumericField }
  444.  
  445.   TNumericField = class(TField)
  446.   protected
  447.     procedure RangeError(Value, Min, Max: Extended);
  448.     procedure SetDisplayFormat(const Value: string);
  449.     procedure SetEditFormat(const Value: string);
  450.   public
  451.     constructor Create(AOwner: TComponent); override;
  452.   published
  453.     property Alignment default taRightJustify;
  454.     property DisplayFormat: string;
  455.     property EditFormat: string;
  456.   end;
  457.  
  458. { TIntegerField }
  459.  
  460.   TIntegerField = class(TNumericField)
  461.   protected
  462.     function GetAsFloat: Double; override;
  463.     function GetAsInteger: Longint; override;
  464.     function GetAsString: string; override;
  465.     function GetAsVariant: Variant; override;
  466.     function GetDataSize: Word; override;
  467.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  468.     function GetValue(var Value: Longint): Boolean;
  469.     procedure SetAsFloat(Value: Double); override;
  470.     procedure SetAsInteger(Value: Longint); override;
  471.     procedure SetAsString(const Value: string); override;
  472.     procedure SetVarValue(const Value: Variant); override;
  473.   public
  474.     constructor Create(AOwner: TComponent); override;
  475.     property Value: Longint;
  476.   published
  477.     property MaxValue: Longint default 0;
  478.     property MinValue: Longint default 0;
  479.   end;
  480.  
  481. { TSmallintField }
  482.  
  483.   TSmallintField = class(TIntegerField)
  484.   protected
  485.     function GetDataSize: Word; override;
  486.   public
  487.     constructor Create(AOwner: TComponent); override;
  488.   end;
  489.  
  490. { TLargeintField }
  491.  
  492.   Largeint = Int64;
  493.  
  494.   TLargeintField = class(TNumericField)
  495.   protected
  496.     function GetAsFloat: Double; override;
  497.     function GetAsInteger: Longint; override;
  498.     function GetAsLargeint: Largeint;
  499.     function GetAsString: string; override;
  500.     function GetAsVariant: Variant; override;
  501.     function GetDataSize: Word; override;
  502.     function GetDefaultWidth: Integer; override;
  503.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  504.     function GetValue(var Value: Largeint): Boolean;
  505.     procedure SetAsFloat(Value: Double); override;
  506.     procedure SetAsInteger(Value: Longint); override;
  507.     procedure SetAsLargeint(Value: Largeint);
  508.     procedure SetAsString(const Value: string); override;
  509.     procedure SetVarValue(const Value: Variant); override;
  510.   public
  511.     constructor Create(AOwner: TComponent); override;
  512.     property AsLargeInt: LargeInt;
  513.     property Value: Largeint;
  514.   published
  515.     property MaxValue: Largeint default 0;
  516.     property MinValue: Largeint default 0;
  517.   end;
  518.  
  519. { TWordField }
  520.  
  521.   TWordField = class(TIntegerField)
  522.   protected
  523.     function GetDataSize: Word; override;
  524.   public
  525.     constructor Create(AOwner: TComponent); override;
  526.   end;
  527.  
  528. { TAutoIncField }
  529.  
  530.   TAutoIncField = class(TIntegerField)
  531.   public
  532.     constructor Create(AOwner: TComponent); override;
  533.   end;
  534.  
  535. { TFloatField }
  536.  
  537.   TFloatField = class(TNumericField)
  538.   protected
  539.     function GetAsFloat: Double; override;
  540.     function GetAsInteger: Longint; override;
  541.     function GetAsString: string; override;
  542.     function GetAsVariant: Variant; override;
  543.     function GetDataSize: Word; override;
  544.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  545.     procedure SetAsFloat(Value: Double); override;
  546.     procedure SetAsInteger(Value: Longint); override;
  547.     procedure SetAsString(const Value: string); override;
  548.     procedure SetVarValue(const Value: Variant); override;
  549.   public
  550.     constructor Create(AOwner: TComponent); override;
  551.     property Value: Double;
  552.   published
  553.     { Lowercase to avoid name clash with C++ Currency type }
  554.     property currency: Boolean default False;
  555.     property MaxValue: Double;
  556.     property MinValue: Double;
  557.     property Precision: Integer default 15;
  558.   end;
  559.  
  560. { TCurrencyField }
  561.  
  562.   TCurrencyField = class(TFloatField)
  563.   public
  564.     constructor Create(AOwner: TComponent); override;
  565.   published
  566.     property Currency default True;
  567.   end;
  568.  
  569. { TBooleanField }
  570.  
  571.   TBooleanField = class(TField)
  572.   protected
  573.     function GetAsBoolean: Boolean; override;
  574.     function GetAsString: string; override;
  575.     function GetAsVariant: Variant; override;
  576.     function GetDataSize: Word; override;
  577.     function GetDefaultWidth: Integer; override;
  578.     procedure SetAsBoolean(Value: Boolean); override;
  579.     procedure SetAsString(const Value: string); override;
  580.     procedure SetVarValue(const Value: Variant); override;
  581.   public
  582.     constructor Create(AOwner: TComponent); override;
  583.     property Value: Boolean;
  584.   published
  585.     property DisplayValues: string;
  586.   end;
  587.  
  588. { TDateTimeField }
  589.  
  590.   TDateTimeField = class(TField)
  591.   protected
  592.     function GetAsDateTime: TDateTime; override;
  593.     function GetAsFloat: Double; override;
  594.     function GetAsString: string; override;
  595.     function GetAsVariant: Variant; override;
  596.     function GetDataSize: Word; override;
  597.     function GetDefaultWidth: Integer; override;
  598.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  599.     procedure SetAsDateTime(Value: TDateTime); override;
  600.     procedure SetAsFloat(Value: Double); override;
  601.     procedure SetAsString(const Value: string); override;
  602.     procedure SetVarValue(const Value: Variant); override;
  603.   public
  604.     constructor Create(AOwner: TComponent); override;
  605.     property Value: TDateTime;
  606.   published
  607.     property DisplayFormat: string;
  608.     property EditMask;
  609.   end;
  610.  
  611. { TDateField }
  612.  
  613.   TDateField = class(TDateTimeField)
  614.   protected
  615.     function GetDataSize: Word; override;
  616.   public
  617.     constructor Create(AOwner: TComponent); override;
  618.   end;
  619.  
  620. { TTimeField }
  621.  
  622.   TTimeField = class(TDateTimeField)
  623.   protected
  624.     function GetDataSize: Word; override;
  625.   public
  626.     constructor Create(AOwner: TComponent); override;
  627.   end;
  628.  
  629. { TBinaryField }
  630.  
  631.   TBinaryField = class(TField)
  632.   protected
  633.     class procedure CheckTypeSize(Value: Integer); override;
  634.     function GetAsString: string; override;
  635.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  636.     function GetAsVariant: Variant; override;
  637.     procedure SetAsString(const Value: string); override;
  638.     procedure SetText(const Value: string); override;
  639.     procedure SetVarValue(const Value: Variant); override;
  640.   public
  641.     constructor Create(AOwner: TComponent); override;
  642.   published
  643.     property Size default 16;
  644.   end;
  645.  
  646. { TBytesField }
  647.  
  648.   TBytesField = class(TBinaryField)
  649.   protected
  650.     function GetDataSize: Word; override;
  651.   public
  652.     constructor Create(AOwner: TComponent); override;
  653.   end;
  654.  
  655. { TVarBytesField }
  656.  
  657.   TVarBytesField = class(TBytesField)
  658.   protected
  659.     function GetDataSize: Word; override;
  660.   public
  661.     constructor Create(AOwner: TComponent); override;
  662.   end;
  663.  
  664. { TBCDField }
  665.  
  666.   TBCDField = class(TNumericField)
  667.   protected
  668.     class procedure CheckTypeSize(Value: Integer); override;
  669.     function GetAsCurrency: Currency; override;
  670.     function GetAsFloat: Double; override;
  671.     function GetAsInteger: Longint; override;
  672.     function GetAsString: string; override;
  673.     function GetAsVariant: Variant; override;
  674.     function GetDataSize: Word; override;
  675.     function GetDefaultWidth: Integer; override;
  676.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  677.     function GetValue(var Value: Currency): Boolean;
  678.     procedure SetAsCurrency(Value: Currency); override;
  679.     procedure SetAsFloat(Value: Double); override;
  680.     procedure SetAsInteger(Value: Longint); override;
  681.     procedure SetAsString(const Value: string); override;
  682.     procedure SetVarValue(const Value: Variant); override;
  683.   public
  684.     constructor Create(AOwner: TComponent); override;
  685.     property Value: Currency;
  686.   published
  687.     { Lowercase to avoid name clash with C++ Currency type }
  688.     property currency: Boolean default False;
  689.     property MaxValue: Currency;
  690.     property MinValue: Currency;
  691.     property Precision: Integer default 0;
  692.     property Size default 4;
  693.   end;
  694.  
  695. { TBlobField }
  696.  
  697.   TBlobType = ftBlob..ftTypedBinary;
  698.  
  699.   TBlobField = class(TField)
  700.   protected
  701.     procedure AssignTo(Dest: TPersistent); override;
  702.     procedure FreeBuffers; override;
  703.     function GetAsString: string; override;
  704.     function GetAsVariant: Variant; override;
  705.     function GetBlobSize: Integer; virtual;
  706.     function GetIsNull: Boolean; override;
  707.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  708.     procedure SetAsString(const Value: string); override;
  709.     procedure SetText(const Value: string); override;
  710.     procedure SetVarValue(const Value: Variant); override;
  711.   public
  712.     constructor Create(AOwner: TComponent); override;
  713.     procedure Assign(Source: TPersistent); override;
  714.     procedure Clear; override;
  715.     class function IsBlob: Boolean; override;
  716.     procedure LoadFromFile(const FileName: string);
  717.     procedure LoadFromStream(Stream: TStream);
  718.     procedure SaveToFile(const FileName: string);
  719.     procedure SaveToStream(Stream: TStream);
  720.     procedure SetFieldType(Value: TFieldType); override;
  721.     property BlobSize: Integer;
  722.     property Modified: Boolean;
  723.     property Value: string;
  724.     property Transliterate: Boolean;
  725.   published
  726.     property BlobType: TBlobType;
  727.     property Size default 0;
  728.   end;
  729.  
  730. { TMemoField }
  731.  
  732.   TMemoField = class(TBlobField)
  733.   public
  734.     constructor Create(AOwner: TComponent); override;
  735.   published
  736.     property Transliterate default True;
  737.   end;
  738.  
  739. { TGraphicField }
  740.  
  741.   TGraphicField = class(TBlobField)
  742.   public
  743.     constructor Create(AOwner: TComponent); override;
  744.   end;
  745.  
  746. { TObjectField }
  747.  
  748.   TObjectField = class(TField)
  749.   protected
  750.     class procedure CheckTypeSize(Value: Integer); override;
  751.     procedure DefineProperties(Filer: TFiler); override;
  752.     procedure FreeBuffers; override;
  753.     function GetAsString: string; override;
  754.     function GetAsVariant: Variant; override;
  755.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  756.     function GetDefaultWidth: Integer; override;
  757.     function GetFieldCount: Integer;
  758.     function GetFields: TFields; virtual;
  759.     function GetFieldValue(Index: Integer): Variant; virtual;
  760.     function GetHasConstraints: Boolean; override;
  761.     procedure SetChildOrder(Component: TComponent; Order: Integer); override;
  762.     procedure SetDataSet(ADataSet: TDataSet); override;
  763.     procedure SetFieldKind(Value: TFieldKind); override;
  764.     procedure SetFieldValue(Index: Integer; const Value: Variant); virtual;
  765.     procedure SetParentField(AField: TObjectField); override;
  766.     procedure SetUnNamed(Value: Boolean);
  767.     procedure SetVarValue(const Value: Variant); override;
  768.   public
  769.     constructor Create(AOwner: TComponent); override;
  770.     destructor Destroy; override;
  771.     property FieldCount: Integer;
  772.     property Fields: TFields;
  773.     property FieldValues[Index: Integer]: Variant; default;
  774.     property UnNamed: Boolean default False;
  775.   published
  776.     property ObjectType: string;
  777.   end;
  778.  
  779. { TADTField }
  780.  
  781.   TADTField = class(TObjectField)
  782.   protected
  783.     function GetSize: Word; override;
  784.   public
  785.     constructor Create(AOwner: TComponent); override;
  786.   end;
  787.  
  788. { TArrayField }
  789.  
  790.   TArrayField = class(TObjectField)
  791.   protected
  792.     procedure Bind(Binding: Boolean); override;
  793.     procedure SetSize(Value: Word); override;
  794.   public
  795.     constructor Create(AOwner: TComponent); override;
  796.     property Size default 10;
  797.   end;
  798.  
  799. { TDataSetField }
  800.  
  801.   TDataSetField = class(TObjectField)
  802.   protected
  803.     procedure Bind(Binding: Boolean); override;
  804.     function GetFields: TFields; override;
  805.   public
  806.     constructor Create(AOwner: TComponent); override;
  807.     destructor Destroy; override;
  808.     property NestedDataSet: TDataSet;
  809.   published
  810.     property IncludeObjectField: Boolean;
  811.   end;
  812.  
  813. { TReferenceField }
  814.  
  815.   TReferenceField = class(TDataSetField)
  816.   protected
  817.     function GetAsVariant: Variant; override;
  818.     function GetDataSize: Word; override;
  819.     procedure SetVarValue(const Value: Variant); override;
  820.   public
  821.     constructor Create(AOwner: TComponent); override;
  822.     procedure Assign(Source: TPersistent); override;
  823.   published
  824.     property ReferenceTableName: string;
  825.     property Size default 0;
  826.   end;
  827.  
  828. { TAggregateField }
  829.  
  830.   TAggregateField = class(TField)
  831.   protected
  832.     function GetAsString: string; override;
  833.     function GetAsVariant: Variant; override;
  834.   public
  835.     constructor Create(AOwner: TComponent); override;
  836.     property Handle: Pointer;
  837.     property ResultType: TFieldType;
  838.   published
  839.     property Active: Boolean default False;
  840.     property DisplayName: String;
  841.     property Expression: String;
  842.     property FieldKind default fkAggregate;
  843.     property GroupingLevel: Integer default 0;
  844.     property IndexName: String;
  845.     property Visible default False;
  846.   end;
  847.  
  848. { TDataLink }
  849.  
  850.   TDataLink = class(TPersistent)
  851.   protected
  852.     procedure ActiveChanged; virtual;
  853.     procedure CheckBrowseMode; virtual;
  854.     procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
  855.     procedure DataSetChanged; virtual;
  856.     procedure DataSetScrolled(Distance: Integer); virtual;
  857.     procedure EditingChanged; virtual;
  858.     procedure FocusControl(Field: TFieldRef); virtual;
  859.     function GetActiveRecord: Integer; virtual;
  860.     function GetBOF: Boolean; virtual;
  861.     function GetBufferCount: Integer; virtual;
  862.     function GetEOF: Boolean; virtual;
  863.     function GetRecordCount: Integer; virtual;
  864.     procedure LayoutChanged; virtual;
  865.     function MoveBy(Distance: Integer): Integer; virtual;
  866.     procedure RecordChanged(Field: TField); virtual;
  867.     procedure SetActiveRecord(Value: Integer); virtual;
  868.     procedure SetBufferCount(Value: Integer); virtual;
  869.     procedure UpdateData; virtual;
  870.     property VisualControl: Boolean;
  871.   public
  872.     constructor Create;
  873.     destructor Destroy; override;
  874.     function Edit: Boolean;
  875.     function ExecuteAction(Action: TBasicAction): Boolean; dynamic;
  876.     function UpdateAction(Action: TBasicAction): Boolean; dynamic;
  877.     procedure UpdateRecord;
  878.     property Active: Boolean;
  879.     property ActiveRecord: Integer;
  880.     property BOF: Boolean;
  881.     property BufferCount: Integer;
  882.     property DataSet: TDataSet;
  883.     property DataSource: TDataSource;
  884.     property DataSourceFixed: Boolean;
  885.     property Editing: Boolean;
  886.     property EOF: Boolean;
  887.     property ReadOnly: Boolean;
  888.     property RecordCount: Integer;
  889.   end;
  890.  
  891. { TDetailDataLink }
  892.  
  893.   TDetailDataLink = class(TDataLink)
  894.   protected
  895.     function GetDetailDataSet: TDataSet; virtual;
  896.   public
  897.     property DetailDataSet: TDataSet;
  898.   end;
  899.  
  900. { TDataSource }
  901.  
  902.   TDataChangeEvent = procedure(Sender: TObject; Field: TField) of object;
  903.  
  904.   TDataSource = class(TComponent)
  905.   protected
  906.     property DataLinks: TList;
  907.   public
  908.     constructor Create(AOwner: TComponent); override;
  909.     destructor Destroy; override;
  910.     procedure Edit;
  911.     function IsLinkedTo(DataSet: TDataSet): Boolean;
  912.     property State: TDataSetState;
  913.   published
  914.     property AutoEdit: Boolean default True;
  915.     property DataSet: TDataSet;
  916.     property Enabled: Boolean default True;
  917.     property OnStateChange: TNotifyEvent;
  918.     property OnDataChange: TDataChangeEvent;
  919.     property OnUpdateData: TNotifyEvent;
  920.   end;
  921.  
  922. { TDataSetDesigner }
  923.  
  924.   TDataSetDesigner = class(TObject)
  925.   public
  926.     constructor Create(DataSet: TDataSet);
  927.     destructor Destroy; override;
  928.     procedure BeginDesign;
  929.     procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
  930.     procedure EndDesign;
  931.     property DataSet: TDataSet;
  932.   end;
  933.  
  934. { TCheckConstraint }
  935.  
  936.   TCheckConstraint = class(TCollectionItem)
  937.   public
  938.     procedure Assign(Source: TPersistent); override;
  939.     function GetDisplayName: string; override;
  940.   published
  941.     property CustomConstraint: string;
  942.     property ErrorMessage: string;
  943.     property FromDictionary: Boolean;
  944.     property ImportedConstraint: string;
  945.   end;
  946.  
  947. { TCheckConstraints }
  948.  
  949.   TCheckConstraints = class(TCollection)
  950.   protected
  951.     function GetOwner: TPersistent; override;
  952.   public
  953.     constructor Create(Owner: TPersistent);
  954.     function Add: TCheckConstraint;
  955.     property Items[Index: Integer]: TCheckConstraint; default;
  956.   end;
  957.  
  958. { TParam }
  959.  
  960.   TBlobData = string;
  961.  
  962.   TParamType = (ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult);
  963.  
  964.   TParams = class;
  965.  
  966.   TParam = class(TCollectionItem)
  967.   protected
  968.     procedure AssignParam(Param: TParam);
  969.     procedure AssignTo(Dest: TPersistent); override;
  970.     function GetAsBCD: Currency;
  971.     function GetAsBoolean: Boolean;
  972.     function GetAsDateTime: TDateTime;
  973.     function GetAsCurrency: Currency;
  974.     function GetAsFloat: Double;
  975.     function GetAsInteger: Longint;
  976.     function GetAsMemo: string;
  977.     function GetAsString: string;
  978.     function GetAsVariant: Variant;
  979.     function GetIsNull: Boolean;
  980.     function IsEqual(Value: TParam): Boolean;
  981.     procedure SetAsBCD(const Value: Currency);
  982.     procedure SetAsBlob(const Value: TBlobData);
  983.     procedure SetAsBoolean(Value: Boolean);
  984.     procedure SetAsCurrency(const Value: Currency);
  985.     procedure SetAsDate(const Value: TDateTime);
  986.     procedure SetAsDateTime(const Value: TDateTime);
  987.     procedure SetAsFloat(const Value: Double);
  988.     procedure SetAsInteger(Value: Longint);
  989.     procedure SetAsMemo(const Value: string);
  990.     procedure SetAsString(const Value: string);
  991.     procedure SetAsSmallInt(Value: LongInt);
  992.     procedure SetAsTime(const Value: TDateTime);
  993.     procedure SetAsVariant(const Value: Variant);
  994.     procedure SetAsWord(Value: LongInt);
  995.     procedure SetDataType(Value: TFieldType);
  996.     procedure SetText(const Value: string);
  997.     function GetDisplayName: string; override;
  998.     property DataSet: TDataSet;
  999.   public
  1000.     constructor Create(Collection: TCollection); overload; override;
  1001.     constructor Create(AParams: TParams; AParamType: TParamType); reintroduce; overload;
  1002.     procedure Assign(Source: TPersistent); override;
  1003.     procedure AssignField(Field: TField);
  1004.     procedure AssignFieldValue(Field: TField; const Value: Variant);
  1005.     procedure Clear;
  1006.     procedure GetData(Buffer: Pointer);
  1007.     function GetDataSize: Integer;
  1008.     procedure LoadFromFile(const FileName: string; BlobType: TBlobType);
  1009.     procedure LoadFromStream(Stream: TStream; BlobType: TBlobType);
  1010.     procedure SetBlobData(Buffer: Pointer; Size: Integer);
  1011.     procedure SetData(Buffer: Pointer);
  1012.     property AsBCD: Currency;
  1013.     property AsBlob: TBlobData;
  1014.     property AsBoolean: Boolean;
  1015.     property AsCurrency: Currency;
  1016.     property AsDate: TDateTime;
  1017.     property AsDateTime: TDateTime;
  1018.     property AsFloat: Double;
  1019.     property AsInteger: LongInt;
  1020.     property AsSmallInt: LongInt;
  1021.     property AsMemo: string;
  1022.     property AsString: string;
  1023.     property AsTime: TDateTime;
  1024.     property AsWord: LongInt;
  1025.     property Bound: Boolean;
  1026.     property IsNull: Boolean;
  1027.     property Text: string;
  1028.   published
  1029.     property DataType: TFieldType;
  1030.     property Name: string;
  1031.     property ParamType: TParamType;
  1032.     property Value: Variant;
  1033.   end;
  1034.  
  1035. { TParams }
  1036.  
  1037.   TParams = class(TCollection)
  1038.   protected
  1039.     procedure AssignTo(Dest: TPersistent); override;
  1040.     procedure DefineProperties(Filer: TFiler); override;
  1041.     function GetDataSet: TDataSet;
  1042.     function GetOwner: TPersistent; override;
  1043.     procedure Update(Item: TCollectionItem); override;
  1044.   public
  1045.     constructor Create(Owner: TPersistent); overload;
  1046.     procedure AssignValues(Value: TParams);
  1047.     { Create, AddParam, RemoveParam and CreateParam are in for backward compatibility }
  1048.     constructor Create; overload;
  1049.     procedure AddParam(Value: TParam);
  1050.     procedure RemoveParam(Value: TParam);
  1051.     function CreateParam(FldType: TFieldType; const ParamName: string;
  1052.       ParamType: TParamType): TParam;
  1053.     procedure GetParamList(List: TList; const ParamNames: string);
  1054.     function IsEqual(Value: TParams): Boolean;
  1055.     function ParseSQL(SQL: String; DoCreate: Boolean): String;
  1056.     function ParamByName(const Value: string): TParam;
  1057.     function FindParam(const Value: string): TParam;
  1058.     property Items[Index: Integer]: TParam; default;
  1059.     property ParamValues[const ParamName: string]: Variant;
  1060.   end;
  1061.  
  1062. { TDataSet }
  1063.  
  1064.   TBookmark = Pointer;
  1065.   TBookmarkStr = string;
  1066.  
  1067.   PBookmarkFlag = ^TBookmarkFlag;
  1068.   TBookmarkFlag = (bfCurrent, bfBOF, bfEOF, bfInserted);
  1069.  
  1070.   TBufferList = array of PChar;
  1071.  
  1072.   TGetMode = (gmCurrent, gmNext, gmPrior);
  1073.  
  1074.   TGetResult = (grOK, grBOF, grEOF, grError);
  1075.  
  1076.   TResyncMode = set of (rmExact, rmCenter);
  1077.  
  1078.   TDataAction = (daFail, daAbort, daRetry);
  1079.  
  1080.   TUpdateKind = (ukModify, ukInsert, ukDelete);
  1081.  
  1082.   TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);
  1083.  
  1084.   TLocateOption = (loCaseInsensitive, loPartialKey);
  1085.   TLocateOptions = set of TLocateOption;
  1086.  
  1087.   TDataOperation = procedure of object;
  1088.  
  1089.   TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
  1090.   TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError;
  1091.     var Action: TDataAction) of object;
  1092.  
  1093.   TFilterOption = (foCaseInsensitive, foNoPartialCompare);
  1094.   TFilterOptions = set of TFilterOption;
  1095.  
  1096.   TFilterRecordEvent = procedure(DataSet: TDataSet;
  1097.     var Accept: Boolean) of object;
  1098.  
  1099.   PPacketAttribute = ^TPacketAttribute;
  1100.   TPacketAttribute = record
  1101.     Name: string;
  1102.     Value: OleVariant;
  1103.     IncludeInDelta: Boolean;
  1104.   end;
  1105.  
  1106.   TBlobByteData = array of Byte;
  1107.  
  1108.   TGroupPosInd = (gbFirst, gbMiddle, gbLast);
  1109.   TGroupPosInds = set of TGroupPosInd;
  1110.  
  1111.   TDataSet = class(TComponent)
  1112.     procedure BeginInsertAppend;
  1113.     procedure CheckCanModify;
  1114.     procedure CheckOperation(Operation: TDataOperation;
  1115.       ErrorEvent: TDataSetErrorEvent);
  1116.     procedure CheckParentState;
  1117.     procedure CheckRequiredFields;
  1118.     procedure DoInternalOpen;
  1119.     procedure DoInternalClose;
  1120.     procedure EndInsertAppend;
  1121.     function GetActive: Boolean;
  1122.     function GetBuffer(Index: Integer): PChar;
  1123.     function GetFieldCount: Integer;
  1124.     function GetFieldValue(const FieldName: string): Variant;
  1125.     function GetFound: Boolean;
  1126.     function GetNestedDataSets: TList;
  1127.     procedure MoveBuffer(CurIndex, NewIndex: Integer);
  1128.     procedure RemoveDataSource(DataSource: TDataSource);
  1129.     procedure SetBufferCount(Value: Integer);
  1130.     procedure SetConstraints(Value: TCheckConstraints);
  1131.     procedure SetFieldDefs(Value: TFieldDefs);
  1132.     procedure SetFieldValue(const FieldName: string; const Value: Variant);
  1133.     procedure SetSparseArrays(Value: Boolean);
  1134.     procedure UpdateBufferCount;
  1135.   protected
  1136.     procedure ResetAggField(Field: TField); virtual;
  1137.     procedure BindFields(Binding: Boolean);
  1138.     function BookmarkAvailable: Boolean;
  1139.     function BCDToCurr(BCD: Pointer; var Curr: Currency): Boolean; virtual;
  1140.     function CurrToBCD(const Curr: Currency; BCD: Pointer; Precision,
  1141.       Decimals: Integer): Boolean; virtual;
  1142.     procedure CalculateFields(Buffer: PChar); virtual;
  1143.     procedure CheckActive; virtual;
  1144.     procedure CheckInactive; virtual;
  1145.     procedure ClearBuffers; virtual;
  1146.     procedure ClearCalcFields(Buffer: PChar); virtual;
  1147.     procedure CloseBlob(Field: TField); virtual;
  1148.     procedure CloseCursor; virtual;
  1149.     procedure CreateFields;
  1150.     function CreateNestedDataSet(DataSetField: TDataSetField): TDataSet; virtual;
  1151.     procedure DataEvent(Event: TDataEvent; Info: Longint); virtual;
  1152.     procedure DefChanged(Sender: TObject); virtual;
  1153.     procedure DestroyFields; virtual;
  1154.     procedure DoAfterCancel; virtual;
  1155.     procedure DoAfterClose; virtual;
  1156.     procedure DoAfterDelete; virtual;
  1157.     procedure DoAfterEdit; virtual;
  1158.     procedure DoAfterInsert; virtual;
  1159.     procedure DoAfterOpen; virtual;
  1160.     procedure DoAfterPost; virtual;
  1161.     procedure DoAfterScroll; virtual;
  1162.     procedure DoBeforeCancel; virtual;
  1163.     procedure DoBeforeClose; virtual;
  1164.     procedure DoBeforeDelete; virtual;
  1165.     procedure DoBeforeEdit; virtual;
  1166.     procedure DoBeforeInsert; virtual;
  1167.     procedure DoBeforeOpen; virtual;
  1168.     procedure DoBeforePost; virtual;
  1169.     procedure DoBeforeScroll; virtual;
  1170.     procedure DoOnCalcFields; virtual;
  1171.     procedure DoOnNewRecord; virtual;
  1172.     function FieldByNumber(FieldNo: Integer): TField;
  1173.     function FindRecord(Restart, GoForward: Boolean): Boolean; virtual;
  1174.     procedure FreeFieldBuffers; virtual;
  1175.     function GetAggregateValue(Field: TField): Variant; virtual;
  1176.     function GetAggRecordCount(Grp: TGroupPosInd): Integer; virtual;
  1177.     procedure ActivateBuffers; virtual;
  1178.     function GetBookmarkStr: TBookmarkStr; virtual;
  1179.     procedure GetCalcFields(Buffer: PChar); virtual;
  1180.     function GetCanModify: Boolean; virtual;
  1181.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  1182.     function GetDataSource: TDataSource; virtual;
  1183.     function GetFieldClass(FieldType: TFieldType): TFieldClass; virtual;
  1184.     function GetFieldFullName(Field: TField): string; virtual;
  1185.     function GetStateFieldValue(State: TDataSetState; Field: TField): Variant; virtual;
  1186.     function GetIsIndexField(Field: TField): Boolean; virtual;
  1187.     function GetNextRecords: Integer; virtual;
  1188.     function GetNextRecord: Boolean; virtual;
  1189.     function GetPriorRecords: Integer; virtual;
  1190.     function GetPriorRecord: Boolean; virtual;
  1191.     function GetRecordCount: Integer; virtual;
  1192.     function GetRecNo: Integer; virtual;
  1193.     procedure InitFieldDefs; virtual;
  1194.     procedure InitFieldDefsFromFields;
  1195.     procedure InitRecord(Buffer: PChar); virtual;
  1196.     procedure InternalCancel; virtual;
  1197.     procedure InternalEdit; virtual;
  1198.     procedure InternalInsert; virtual;
  1199.     procedure InternalRefresh; virtual;
  1200.     procedure Loaded; override;
  1201.     procedure OpenCursor(InfoQuery: Boolean); virtual;
  1202.     procedure RefreshInternalCalcFields(Buffer: PChar); virtual;
  1203.     procedure RestoreState(const Value: TDataSetState);
  1204.     procedure BlockReadNext; virtual;
  1205.     procedure SetActive(Value: Boolean); virtual;
  1206.     procedure SetBookmarkStr(const Value: TBookmarkStr); virtual;
  1207.     procedure SetBlockReadSize(Value: Integer); virtual;
  1208.     procedure SetBufListSize(Value: Integer);
  1209.     procedure SetChildOrder(Component: TComponent; Order: Integer); override;
  1210.     procedure SetCurrentRecord(Index: Integer); virtual;
  1211.     procedure SetDataSetField(const Value: TDataSetField); virtual;
  1212.     procedure SetFiltered(Value: Boolean); virtual;
  1213.     procedure SetFilterOptions(Value: TFilterOptions); virtual;
  1214.     procedure SetFilterText(const Value: string); virtual;
  1215.     procedure SetFound(const Value: Boolean);
  1216.     procedure SetModified(Value: Boolean);
  1217.     procedure SetName(const Value: TComponentName); override;
  1218.     procedure SetObjectView(const Value: Boolean);
  1219.     procedure SetOnFilterRecord(const Value: TFilterRecordEvent); virtual;
  1220.     procedure SetRecNo(Value: Integer); virtual;
  1221.     procedure SetState(Value: TDataSetState);
  1222.     procedure SetStateFieldValue(State: TDataSetState; Field: TField; const Value: Variant); virtual;
  1223.     function SetTempState(const Value: TDataSetState): TDataSetState;
  1224.     function TempBuffer: PChar;
  1225.     procedure UpdateIndexDefs; virtual;
  1226.     property ActiveRecord: Integer;
  1227.     property CurrentRecord: Integer;
  1228.     property BlobFieldCount: Integer;
  1229.     property BookmarkSize: Integer;
  1230.     property Buffers[Index: Integer]: PChar;
  1231.     property BufferCount: Integer;
  1232.     property CalcBuffer: PChar;
  1233.     property CalcFieldsSize: Integer;
  1234.     property Constraints: TCheckConstraints;
  1235.     property FieldNoOfs: Integer;
  1236.     property InternalCalcFields: Boolean;
  1237.     property NestedDataSets: TList;
  1238.     property NestedDataSetClass: TClass;
  1239.     property Reserved: Pointer;
  1240.   protected { abstract methods }
  1241.     function AllocRecordBuffer: PChar; virtual; abstract;
  1242.     procedure FreeRecordBuffer(var Buffer: PChar); virtual; abstract;
  1243.     procedure GetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
  1244.     function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; virtual; abstract;
  1245.     function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult; virtual; abstract;
  1246.     function GetRecordSize: Word; virtual; abstract;
  1247.     procedure InternalAddRecord(Buffer: Pointer; Append: Boolean); virtual; abstract;
  1248.     procedure InternalClose; virtual; abstract;
  1249.     procedure InternalDelete; virtual; abstract;
  1250.     procedure InternalFirst; virtual; abstract;
  1251.     procedure InternalGotoBookmark(Bookmark: Pointer); virtual; abstract;
  1252.     procedure InternalHandleException; virtual; abstract;
  1253.     procedure InternalInitFieldDefs; virtual; abstract;
  1254.     procedure InternalInitRecord(Buffer: PChar); virtual; abstract;
  1255.     procedure InternalLast; virtual; abstract;
  1256.     procedure InternalOpen; virtual; abstract;
  1257.     procedure InternalPost; virtual; abstract;
  1258.     procedure InternalSetToRecord(Buffer: PChar); virtual; abstract;
  1259.     function IsCursorOpen: Boolean; virtual; abstract;
  1260.     procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); virtual; abstract;
  1261.     procedure SetBookmarkData(Buffer: PChar; Data: Pointer); virtual; abstract;
  1262.     procedure SetFieldData(Field: TField; Buffer: Pointer); virtual; abstract;
  1263.   public
  1264.     constructor Create(AOwner: TComponent); override;
  1265.     destructor Destroy; override;
  1266.     function ActiveBuffer: PChar;
  1267.     procedure Append;
  1268.     procedure AppendRecord(const Values: array of const);
  1269.     function BookmarkValid(Bookmark: TBookmark): Boolean; virtual;
  1270.     procedure Cancel; virtual;
  1271.     procedure CheckBrowseMode;
  1272.     procedure ClearFields;
  1273.     procedure Close;
  1274.     function  ControlsDisabled: Boolean;
  1275.     function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; virtual;
  1276.     function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;
  1277.     procedure CursorPosChanged;
  1278.     procedure Delete;
  1279.     procedure DisableControls;
  1280.     procedure Edit;
  1281.     procedure EnableControls;
  1282.     function FieldByName(const FieldName: string): TField;
  1283.     function FindField(const FieldName: string): TField;
  1284.     function FindFirst: Boolean;
  1285.     function FindLast: Boolean;
  1286.     function FindNext: Boolean;
  1287.     function FindPrior: Boolean;
  1288.     procedure First;
  1289.     procedure FreeBookmark(Bookmark: TBookmark); virtual;
  1290.     function GetBookmark: TBookmark; virtual;
  1291.     function GetCurrentRecord(Buffer: PChar): Boolean; virtual;
  1292.     procedure GetDetailDataSets(List: TList);
  1293.     procedure GetDetailLinkFields(MasterFields, DetailFields: TList); virtual;
  1294.     function GetBlobFieldData(FieldNo: Integer; var Buffer: TBlobByteData): Integer; virtual;
  1295.     function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload; virtual;
  1296.     function GetFieldData(FieldNo: Integer; Buffer: Pointer): Boolean; overload; virtual;
  1297.     procedure GetFieldList(List: TList; const FieldNames: string);
  1298.     procedure GetFieldNames(List: TStrings);
  1299.     procedure GetProviderAttributes(List: TList); virtual;
  1300.     procedure GotoBookmark(Bookmark: TBookmark);
  1301.     procedure Insert;
  1302.     procedure InsertRecord(const Values: array of const);
  1303.     function IsEmpty: Boolean;
  1304.     function IsLinkedTo(DataSource: TDataSource): Boolean;
  1305.     function IsSequenced: Boolean; virtual;
  1306.     procedure Last;
  1307.     function Locate(const KeyFields: string; const KeyValues: Variant;
  1308.       Options: TLocateOptions): Boolean; virtual;
  1309.     function Lookup(const KeyFields: string; const KeyValues: Variant;
  1310.       const ResultFields: string): Variant; virtual;
  1311.     function MoveBy(Distance: Integer): Integer;
  1312.     procedure Next;
  1313.     procedure Open;
  1314.     procedure Post; virtual;
  1315.     procedure Prior;
  1316.     procedure Refresh;
  1317.     procedure Resync(Mode: TResyncMode); virtual;
  1318.     procedure SetFields(const Values: array of const);
  1319.     function Translate(Src, Dest: PChar; ToOem: Boolean): Integer; virtual;
  1320.     procedure UpdateCursorPos;
  1321.     procedure UpdateRecord;
  1322.     function UpdateStatus: TUpdateStatus; virtual;
  1323.     property AggFields: TFields;
  1324.     property Bof: Boolean;
  1325.     property Bookmark: TBookmarkStr;
  1326.     property CanModify: Boolean;
  1327.     property DataSetField: TDataSetField;
  1328.     property DataSource: TDataSource;
  1329.     property DefaultFields: Boolean;
  1330.     property Designer: TDataSetDesigner;
  1331.     property Eof: Boolean; {Upper case EOF conflicts with C++}
  1332.     property BlockReadSize: Integer;
  1333.     property FieldCount: Integer;
  1334.     property FieldDefs: TFieldDefs;
  1335.     property FieldDefList: TFieldDefList;
  1336.     property Fields: TFields;
  1337.     property FieldList: TFieldList;
  1338.     property FieldValues[const FieldName: string]: Variant; default;
  1339.     property Found: Boolean;
  1340.     property Modified: Boolean;
  1341.     property ObjectView: Boolean;
  1342.     property RecordCount: Integer;
  1343.     property RecNo: Integer;
  1344.     property RecordSize: Word;
  1345.     property SparseArrays: Boolean;
  1346.     property State: TDataSetState;
  1347.     property Filter: string;
  1348.     property Filtered: Boolean default False;
  1349.     property FilterOptions: TFilterOptions default [];
  1350.     property Active: Boolean default False;
  1351.     property AutoCalcFields: Boolean default True;
  1352.     property BeforeOpen: TDataSetNotifyEvent;
  1353.     property AfterOpen: TDataSetNotifyEvent;
  1354.     property BeforeClose: TDataSetNotifyEvent;
  1355.     property AfterClose: TDataSetNotifyEvent;
  1356.     property BeforeInsert: TDataSetNotifyEvent;
  1357.     property AfterInsert: TDataSetNotifyEvent;
  1358.     property BeforeEdit: TDataSetNotifyEvent;
  1359.     property AfterEdit: TDataSetNotifyEvent;
  1360.     property BeforePost: TDataSetNotifyEvent;
  1361.     property AfterPost: TDataSetNotifyEvent;
  1362.     property BeforeCancel: TDataSetNotifyEvent;
  1363.     property AfterCancel: TDataSetNotifyEvent;
  1364.     property BeforeDelete: TDataSetNotifyEvent;
  1365.     property AfterDelete: TDataSetNotifyEvent;
  1366.     property BeforeScroll: TDataSetNotifyEvent;
  1367.     property AfterScroll: TDataSetNotifyEvent;
  1368.     property OnCalcFields: TDataSetNotifyEvent;
  1369.     property OnDeleteError: TDataSetErrorEvent;
  1370.     property OnEditError: TDataSetErrorEvent;
  1371.     property OnFilterRecord: TFilterRecordEvent;
  1372.     property OnNewRecord: TDataSetNotifyEvent;
  1373.     property OnPostError: TDataSetErrorEvent;
  1374.   end;
  1375.  
  1376. { TDateTimeRec }
  1377.  
  1378. type
  1379.   TDateTimeAlias = type TDateTime;
  1380.   {$NODEFINE TDateTimeAlias}
  1381.   (*$HPPEMIT 'namespace Db'*)
  1382.   (*$HPPEMIT '{'*)
  1383.   (*$HPPEMIT '    typedef TDateTimeBase TDateTimeAlias;'*)
  1384.   (*$HPPEMIT '}'*)
  1385.   TDateTimeRec = record
  1386.     case TFieldType of
  1387.       ftDate: (Date: Longint);
  1388.       ftTime: (Time: Longint);
  1389.       ftDateTime: (DateTime: TDateTimeAlias);
  1390.   end;
  1391.  
  1392. const
  1393.   { The following field types do not support assignment as text, unless the
  1394.     field object's OnSetText event is assigned to perform the text to
  1395.     binary conversion. }
  1396.   ftNonTextTypes = [ftBytes, ftVarBytes, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
  1397.     ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftADT, ftArray,
  1398.     ftReference, ftDataSet];
  1399.  
  1400.   dsEditModes = [dsEdit, dsInsert, dsSetKey];
  1401.   dsWriteModes = [dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter,
  1402.     dsNewValue, dsInternalCalc];
  1403.  
  1404.   DefaultFieldClasses: array[TFieldType] of TFieldClass = (
  1405.     nil,                { ftUnknown }
  1406.     TStringField,       { ftString }
  1407.     TSmallintField,     { ftSmallint }
  1408.     TIntegerField,      { ftInteger }
  1409.     TWordField,         { ftWord }
  1410.     TBooleanField,      { ftBoolean }
  1411.     TFloatField,        { ftFloat }
  1412.     TCurrencyField,     { ftCurrency }
  1413.     TBCDField,          { ftBCD }
  1414.     TDateField,         { ftDate }
  1415.     TTimeField,         { ftTime }
  1416.     TDateTimeField,     { ftDateTime }
  1417.     TBytesField,        { ftBytes }
  1418.     TVarBytesField,     { ftVarBytes }
  1419.     TAutoIncField,      { ftAutoInc }
  1420.     TBlobField,         { ftBlob }
  1421.     TMemoField,         { ftMemo }
  1422.     TGraphicField,      { ftGraphic }
  1423.     TBlobField,         { ftFmtMemo }
  1424.     TBlobField,         { ftParadoxOle }
  1425.     TBlobField,         { ftDBaseOle }
  1426.     TBlobField,         { ftTypedBinary }
  1427.     nil,                { ftCursor }
  1428.     TStringField,       { ftFixedChar }
  1429.     nil, {TWideStringField } { ftWideString }
  1430.     TLargeIntField,     { ftLargeInt }
  1431.     TADTField,          { ftADT }
  1432.     TArrayField,        { ftArray }
  1433.     TReferenceField,    { ftReference }
  1434.     TDataSetField);     { ftDataSet }
  1435.  
  1436.   FieldTypeNames: array[TFieldType] of string = (
  1437.     'Unknown', 'String', 'SmallInt', 'Integer', 'Word', 'Boolean', 'Float',
  1438.     'Currency', 'BCD', 'Date', 'Time', 'DateTime', 'Bytes', 'VarBytes',
  1439.     'AutoInc', 'Blob', 'Memo', 'Graphic', 'FmtMemo', 'ParadoxOle',
  1440.     'dBaseOle', 'TypedBinary', 'Cursor', 'FixedChar', 'WideString',
  1441.     'LargeInt', 'ADT', 'Array', 'Reference', 'DataSet');
  1442.  
  1443.   FieldTypeVarMap: array[TFieldType] of Word = (
  1444.     varEmpty, varString, varInteger, varInteger, varInteger,
  1445.     varBoolean, varDouble, varCurrency, varCurrency, varDate, varDate, varDate,
  1446.     varEmpty, varEmpty, varInteger, varEmpty, varString, varEmpty,
  1447.     varEmpty, varEmpty, varEmpty, varEmpty, varEmpty, varString, varOleStr,
  1448.     varEmpty, varEmpty, varEmpty, varEmpty, varEmpty);
  1449.  
  1450.   ObjectFieldTypes = [ftADT, ftArray, ftReference, ftDataSet];
  1451.  
  1452. function ExtractFieldName(const Fields: string; var Pos: Integer): string;
  1453. procedure RegisterFields(const FieldClasses: array of TFieldClass);
  1454.  
  1455. procedure DatabaseError(const Message: string; Component: TComponent = nil);
  1456. procedure DatabaseErrorFmt(const Message: string; const Args: array of const;
  1457.   Component: TComponent = nil);
  1458. procedure DBError(Ident: Word);
  1459. procedure DBErrorFmt(Ident: Word; const Args: array of const);
  1460.  
  1461. procedure DisposeMem(var Buffer; Size: Integer);
  1462. function BuffersEqual(Buf1, Buf2: Pointer; Size: Integer): Boolean;
  1463.  
  1464. function GetFieldProperty(DataSet: TDataSet; Control: TComponent;
  1465.   const FieldName: string): TField;
  1466.  
  1467. const
  1468.   RegisterFieldsProc: procedure(const FieldClassess: array of TFieldClass) = nil;
  1469.  
  1470. implementation
  1471.