亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbf.pas

?? OICQ黑客工具。可以查看對方IP地址
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
unit DBF;
(* ===========================================================================
 * dbf.dcu - tDBF : A custom data set which uses a flat binary
 *             structured datafile for single client usage only.
 *
 * Author:  Horacio Jamilis
 * Copyright (C) 1998, Terabyte Computacion
 *
 * ===========================================================================
 * v 0.91
 * - Fixed error on deleting records
 * - Added filtering capabilities (work wrong when there are no records within
 *   the filter expresion - Only support expresion with one field like
 *   "NUMFIELD>10" or "TEXTFIELD<='TEST'" or "DATEFIELD=19980626"
 *   (in yyyymmdd format)).
 * ===========================================================================
 * FOR C++ Builder users:
 * Use the file named DBF_C instead of this one.
 * Especial thanks to Michael Beauregard (Michael_Beauregard@mck.com).
 * ===========================================================================
 *)

interface

uses
  SysUtils, Classes, Db, DsgnIntf;

type
  TFilenameProperty = class(TStringProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;

  EDBFError = class (Exception);

  pDateTime = ^TDateTime;
  pBoolean = ^Boolean;
  pInteger = ^Integer;

  PRecInfo = ^TRecInfo;
  TRecInfo = record
    Bookmark: Longint;
    BookmarkFlag: TBookmarkFlag;
  end;

  TdbfHeader = record  { Dbase III + header definition        }
     VersionNumber    :byte;  { version number (03h or 83h ) }
     LastUpdateYear   :byte;  { last update YY MM DD         }
     LastUpdateMonth  :byte;
     LastUpdateDay    :byte;
     NumberOfRecords  :longint; { number of record in database }
     BytesInHeader    :smallint;{ number of bytes in header }
     BytesInRecords   :smallint;{ number of bytes in records }
     ReservedInHeader :array[1..20] of char;   { reserved bytes in header }
  end;

  TdbfField = record
     FieldName   :array[1..11] of char; { Name of this record             }
     FieldType   :char;           { type of record - C,N,D,L,etc.         }
     fld_addr    :longint;        { not used }
     Width       :byte;           { total field width of this record      }
     Decimals    :byte;           { number of digits to right of decimal  }
     MultiUser   :smallint;       { reserved for multi user }
     WorkAreaID  :byte;           { Work area ID }
     MUser       :smallint;       { reserved for multi_user }
     SetFields   :byte;           { SET_FIELDS flag }
     Reserved    :array[1..4] of byte;      { 8 bytes reserved }
  end;                           { record starts                         }

Type
  pRecordHeader = ^tRecordHeader;
  tRecordHeader = record
    DeletedFlag : char;
  end;

type
  TDBF = class(TDataSet)
  protected
    FStream: TStream; // the physical table
    FTableName: string; // table path and file name
    fDBFHeader : TdbfHeader;
    // record data
    fRecordHeaderSize : Integer;   // The size of the record header
    FRecordCount,                  // current number of record
    FRecordSize,                   // the size of the actual data
    FRecordBufferSize,             // data + housekeeping (TRecInfo)
    FRecordInfoOffset,             // offset of RecInfo in record buffer
    FCurrentRecord,                // current record (0 to FRecordCount - 1)
    BofCrack,                      // before the first record (crack)
    EofCrack: Integer;             // after the last record (crack)
    FIsTableOpen: Boolean;         // status
    FFileWidth,                    // field widths in record
    FFileDecimals,                 // field decimals in record
    FFileOffset: TList;            // field offsets in record
    fReadOnly : Boolean;           // Enhancements
    fStartData : Integer;          // Position in file where data starts
    function FFieldType(F : char):TFieldType;
    function FFieldSize(FType:char;FWidth:integer):integer;
  protected
    // TDataSet virtual abstract method
    function AllocRecordBuffer: PChar; override;
    procedure FreeRecordBuffer(var Buffer: PChar); override;
    procedure GetBookmarkData(Buffer: PChar; Data: Pointer); override;
    function GetBookmarkFlag(Buffer: PChar): TBookmarkFlag; override;
    function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
    function GetRecord(Buffer: PChar; GetMode: TGetMode; DoCheck: Boolean): TGetResult; override;
    function GetRecordSize: Word; override;
    procedure InternalAddRecord(Buffer: Pointer; Append: Boolean); override;
    procedure InternalClose; override;
    procedure InternalDelete; override;
    procedure InternalFirst; override;
    procedure InternalGotoBookmark(Bookmark: Pointer); override;
    procedure InternalHandleException; override;
    procedure InternalInitFieldDefs; override;
    procedure InternalInitRecord(Buffer: PChar); override;
    procedure InternalLast; override;
    procedure InternalOpen; override;
    procedure InternalPost; override;
    procedure InternalSetToRecord(Buffer: PChar); override;
    function IsCursorOpen: Boolean; override;
    procedure SetBookmarkFlag(Buffer: PChar; Value: TBookmarkFlag); override;
    procedure SetBookmarkData(Buffer: PChar; Data: Pointer); override;
    procedure SetFieldData(Field: TField; Buffer: Pointer); override;
    // TDataSet virtual method (optional)
    function GetRecordCount: Integer; override;
    procedure SetRecNo(Value: Integer); override;
    function GetRecNo: Integer; override;
    Procedure WriteHeader;
  private
    Procedure _ReadRecord(Buffer:PChar;IntRecNum:Integer);
    Procedure _WriteRecord(Buffer:PChar;IntRecNum:Integer);
    Procedure _AppendRecord(Buffer:PChar);
    Procedure _SwapRecords(Rec1,REc2:Integer);
    Function _CompareRecords(SortFields:Array of String;Rec1,Rec2:Integer):Integer;
    Function _ProcessFilter(Buffer:PChar):boolean;
  public
    constructor Create(AOwner:tComponent); override;
    procedure CreateTable;
    Procedure PackTable;
    Procedure SortTable(SortFields : Array of String);
    Procedure UnsortTable;
  published
    property TableName: string read FTableName write FTableName;
    property ReadOnly : Boolean read fReadOnly write fReadonly default False;
    property DBFHeader : tDBFHeader read fDBFHeader;
    // redeclared data set properties
    property Active;
    property Filter;
    property Filtered;
    property BeforeOpen;
    property AfterOpen;
    property BeforeClose;
    property AfterClose;
    property BeforeInsert;
    property AfterInsert;
    property BeforeEdit;
    property AfterEdit;
    property BeforePost;
    property AfterPost;
    property BeforeCancel;
    property AfterCancel;
    property BeforeDelete;
    property AfterDelete;
    property BeforeScroll;
    property AfterScroll;
    property OnCalcFields;
    property OnDeleteError;
    property OnEditError;
    property OnNewRecord;
    property OnPostError;
  end;

procedure Register;

implementation

uses
  TypInfo, Dialogs, Windows, Forms, Controls, IniFiles;

Const
  dfhVersionNumber = 13;

TYPE
  PBufArray = ^BufArray;
  BufArray = Array[0..0] of Char;

// ****************************************************************************
// Low Level Routines for accessing an internal record

// ____________________________________________________________________________
// TDBF._ReadRecord
Procedure TDBF._ReadRecord(Buffer:PChar;IntRecNum:Integer);
  {-Read a record based on the internal record number (absolute)}
BEGIN
  FStream.Position := FStartData + (FRecordSize * IntRecNum);
 try
  FStream.ReadBuffer(Buffer^, FRecordSize);
 except
 end;
END;

// ____________________________________________________________________________
// TDBF._WriteRecord
Procedure TDBF._WriteRecord(Buffer:PChar;IntRecNum:Integer);
  {-Write a record based on the internal record number (absolute)}
BEGIN
  FStream.Position := FStartData + (FRecordSize * IntRecNum);
  FStream.WriteBuffer (Buffer^, FRecordSize);
END;

// ____________________________________________________________________________
// TDBF._AppendRecord
Procedure TDBF._AppendRecord(Buffer:PChar);
BEGIN
  FStream.Position := FStartData + (FRecordSize * (FRecordCount{+FDeletedCount}));
  FStream.WriteBuffer (Buffer^, FRecordSize);
END;

/////////////////////////////////////////////////
////// Part I:
////// Initialization, opening, and closing
/////////////////////////////////////////////////

// ____________________________________________________________________________
// TDBF.InternalOpen
// I: open the table/file
procedure TDBF.InternalOpen;
var
  Field : TField;
  i,j : integer;
  d : string;
begin
  // check if the file exists
  if not FileExists (FTableName) then
    raise eDBFError.Create ('Open: Table file not found');

  // create a stream for the file
  if fReadOnly then
    fStream := tFileStream.Create( fTableName, fmOpenRead + fmShareDenyWrite)
  else
    FStream := TFileStream.Create (FTableName, fmOpenReadWrite + fmShareExclusive);
  fStream.ReadBuffer(fDBFHeader,SizeOf(TDBFHeader));

  // sets cracks and record position
  BofCrack := -1;
  EofCrack := fRecordCount{+fDeletedCount};
  FCurrentRecord := BofCrack;

  // set the bookmark size
  BookmarkSize := sizeOf (Integer);

  if not (assigned(FFileOffset)) then
    FFileOffset := TList.Create;
  if not (assigned(FFileWidth)) then
    FFileWidth := TList.Create;
  if not (assigned(FFileDecimals)) then
    FFileDecimals := TList.Create;

  // initialize the field definitions
  // (another virtual abstract method of TDataSet)
  InternalInitFieldDefs;

  FRecordInfoOffset := FRecordSize;
  FRecordBufferSize := FRecordSize + sizeof (TRecInfo);

  // if there are no persistent field objects,
  // create the fields dynamically
  if DefaultFields then
    CreateFields;
  // connect the TField objects with the actual fields
  BindFields (True);

  for i := 0 to FieldCount-1 do
    begin
      Field := Fields[i];
      if (Field.DataType = ftFloat) and (Integer(FFileDecimals[i])>0) then
        begin
          d := '0.';
          for j := 1 to Integer(FFileDecimals[i]) do
            d := d + '0';
          (Field as TFloatField).DisplayFormat := d;
        end;
    end;

  // get the number of records and check size
  fRecordCount := fDBFHeader.NumberOfRecords;

  // everything OK: table is now open
  FIsTableOpen := True;

  // ShowMessage ('InternalOpen: RecCount: ' + IntToStr (FRecordCount));
end;

// Returns the Type of the field
function TDBF.FFieldType(F : char):TFieldType;
begin
  if F = 'C' then
    FFieldType := ftString
  else if (F = 'N') or (F = 'F') then
    FFieldType := ftFloat
  else if F = 'L' then
    FFieldType := ftBoolean
  else if F = 'D' then
    FFieldType := ftDate
//    FFieldType := ftString
  else
    FFieldType := ftUnknown;
end;

function TDBF.FFieldSize(FType:char;FWidth:integer):integer;
begin
  if FType = 'C' then
    FFieldSize := FWidth
  else if (FType = 'N') or (FType = 'F') then
    FFieldSize := 0
  else if FType = 'L' then
    FFieldSize := 0
  else if FType = 'D' then
    FFieldSize := 0
//    FFieldSize := 8
  else
    FFieldSize := 0;
end;

// ____________________________________________________________________________
// TDBF.InternalInitFieldDefs
// I: define the fields
procedure TDBF.InternalInitFieldDefs;
var
  Il : Integer;
  TmpFileOffset : Integer;
  NumberOfFields : integer;
  Fld : TDBFField;
  FldName : PChar;
begin
  FieldDefs.Clear;
  FStream.Seek(SizeOf(TDbfHeader),soFromBeginning);
  NumberOfFields := ((fDbfHeader.BytesInHeader-sizeof(DbfHeader))div 32);
  if not (assigned(FFileOffset)) then
    FFileOffset := TList.Create;
  FFileOffset.Clear;
  if not (assigned(FFileWidth)) then
    FFileWidth := TList.Create;
  FFileWidth.Clear;
  if not (assigned(FFileDecimals)) then
    FFileDecimals := TList.Create;
  FFileDecimals.Clear;
  TmpFileOffset := 0;
  if (NumberOfFields>0) then
    begin
      for Il:=0 to NumberOfFields-1 do
        begin
          FStream.Read(Fld,SizeOf(Fld));
          GetMem(FldName,Length(Fld.FieldName)+1);
          CharToOem(PChar(@Fld.FieldName),FldName);
          TFieldDef.Create(FieldDefs, FldName,FFieldType(Fld.FieldType){DescribF.DataType},
                           FFieldSize(Fld.FieldType,Fld.Width){DescribF.Size},False,Il+1);
          FreeMem(FldName);
          FFileOffset.Add(Pointer(TmpFileOffset));
          FFileWidth.Add(Pointer(Fld.Width));
          FFileDecimals.Add(Pointer(Fld.Decimals));
          Inc(tmpFileOffset,Fld.Width);
        end;
      fRecordSize := tmpFileOffset+FrecordHeaderSize;
      FStartData := FStream.Position+1;
    end;
end;

// ____________________________________________________________________________
// TDBF.InternalClose
// I: close the table/file
procedure TDBF.InternalClose;
begin
  // if required, save updated header
  if (fDBFHeader.NumberOfRecords <> fRecordCount) or
    (fDBFHeader.BytesInRecords = 0) then

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类欧美日韩国产在线| 狠狠狠色丁香婷婷综合激情| 26uuu久久天堂性欧美| av电影一区二区| 日本一不卡视频| 国产精品入口麻豆九色| 91精品视频网| 在线观看一区二区视频| 国产成人在线视频免费播放| 首页亚洲欧美制服丝腿| 亚洲精品视频自拍| 国产欧美日本一区视频| 日韩免费视频一区| 欧美午夜免费电影| 99这里都是精品| 国产另类ts人妖一区二区| 日韩av在线免费观看不卡| 专区另类欧美日韩| 日本一区二区三区在线观看| 7777精品久久久大香线蕉| 日本道在线观看一区二区| 高清国产一区二区三区| 国产一区日韩二区欧美三区| 日本亚洲视频在线| 日韩精品午夜视频| 亚洲国产成人va在线观看天堂| 日韩美女视频一区| 久久综合av免费| 日韩丝袜情趣美女图片| 欧美日韩aaaaa| 欧美三级视频在线| 欧美亚洲一区二区在线观看| 北条麻妃一区二区三区| 从欧美一区二区三区| 国产福利精品导航| 国产成人精品一区二区三区四区 | 国产日韩欧美综合在线| 日韩欧美成人激情| 日韩精品中文字幕在线一区| 91精品国产福利| 91精品国产丝袜白色高跟鞋| 欧美剧情片在线观看| 欧美精品丝袜久久久中文字幕| 欧美性xxxxxx少妇| 欧美日韩高清不卡| 91精品国产综合久久久久久| 欧美日韩国产精品成人| 欧美一区二区大片| 久久久久久9999| 国产精品乱人伦一区二区| 一色屋精品亚洲香蕉网站| 自拍偷自拍亚洲精品播放| 亚洲一区影音先锋| 视频一区二区中文字幕| 久久精品国产一区二区| 国产99精品国产| 色综合视频在线观看| 欧美影视一区在线| 91精品午夜视频| 国产亚洲精品福利| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲精品成人在线| 婷婷久久综合九色综合伊人色| 日韩高清不卡在线| 免费成人在线观看| 成人高清视频在线| 欧美色综合天天久久综合精品| 欧美疯狂做受xxxx富婆| 精品999在线播放| 国产精品污污网站在线观看| 亚洲一区在线观看视频| 毛片av一区二区| 91一区一区三区| 91精品婷婷国产综合久久| 国产欧美一区二区精品忘忧草| 亚洲视频综合在线| 青青草97国产精品免费观看无弹窗版| 狠狠狠色丁香婷婷综合久久五月| 99久久精品免费看国产| 91精品久久久久久久91蜜桃| 欧美国产一区在线| 香蕉久久夜色精品国产使用方法| 国产资源在线一区| 欧美色倩网站大全免费| 国产午夜一区二区三区| 亚洲第一福利一区| 国产精品99久久久久久似苏梦涵| 欧美三级一区二区| 国产精品日产欧美久久久久| 日本大胆欧美人术艺术动态| 91亚洲精品一区二区乱码| 日韩色视频在线观看| 亚洲免费观看高清完整版在线| 国模娜娜一区二区三区| 欧美日韩免费在线视频| 国产精品欧美一级免费| 青青青伊人色综合久久| 在线观看日韩一区| 国产日韩欧美制服另类| 美女性感视频久久| 欧美无乱码久久久免费午夜一区 | 久久精品亚洲国产奇米99| 亚洲一线二线三线视频| 成人精品免费看| 欧美不卡在线视频| 天堂久久久久va久久久久| 不卡视频一二三四| 久久日一线二线三线suv| 爽好多水快深点欧美视频| 91久久免费观看| 中文字幕在线不卡视频| 国产一区二区三区美女| 在线综合亚洲欧美在线视频| 亚洲精品老司机| 99久久99久久精品国产片果冻| 精品成人私密视频| 蜜臀久久99精品久久久久久9| 一本一道综合狠狠老| 国产日产欧产精品推荐色| 六月婷婷色综合| 欧美一区午夜视频在线观看| 亚洲自拍偷拍网站| 91久久国产综合久久| 日韩美女精品在线| 91美女在线视频| 中文字幕一区日韩精品欧美| www.亚洲精品| 国产精品久久久久婷婷二区次| 成人亚洲一区二区一| 久久久精品天堂| 国产激情视频一区二区在线观看 | 亚洲综合图片区| 色哟哟在线观看一区二区三区| 亚洲国产激情av| 成人av电影观看| 亚洲欧美自拍偷拍| 97久久精品人人做人人爽| 一区二区中文视频| 91国偷自产一区二区开放时间 | 成人av小说网| 国产精品看片你懂得| 本田岬高潮一区二区三区| 亚洲视频一区二区在线观看| 99久久er热在这里只有精品15| 国产精品久久久久久久裸模| 99麻豆久久久国产精品免费| 亚洲人成亚洲人成在线观看图片| 91亚洲精品乱码久久久久久蜜桃 | 成人免费不卡视频| 国产精品二三区| 91国模大尺度私拍在线视频| 亚洲成a人片在线观看中文| 日韩欧美一区在线观看| 国内精品视频一区二区三区八戒| 久久亚区不卡日本| 99久久精品一区二区| 亚洲午夜在线视频| 日韩欧美区一区二| 国产美女娇喘av呻吟久久 | 老汉av免费一区二区三区| 欧美mv日韩mv亚洲| 成人禁用看黄a在线| 亚洲精品欧美专区| 欧美mv日韩mv亚洲| 99精品视频在线播放观看| 日日嗨av一区二区三区四区| 精品国产乱码久久久久久蜜臀| 懂色av一区二区三区免费观看| 亚洲精品成人精品456| 精品处破学生在线二十三| av一区二区久久| 日韩成人一区二区| 中文字幕精品一区二区精品绿巨人| 日本韩国精品在线| 精品一区二区免费在线观看| 国产精品成人免费| 欧美精品 日韩| 不卡在线视频中文字幕| 无码av免费一区二区三区试看| 久久日韩粉嫩一区二区三区| 91黄色激情网站| 国产91精品精华液一区二区三区| 亚洲曰韩产成在线| 久久夜色精品一区| 欧美亚洲自拍偷拍| 风间由美一区二区av101| 日本视频免费一区| 亚洲视频小说图片| 久久精品视频免费| 欧美麻豆精品久久久久久| 懂色av一区二区三区蜜臀 | 国产不卡在线一区| 午夜不卡av在线| 国产精品毛片a∨一区二区三区| 制服丝袜av成人在线看| 99久久婷婷国产综合精品电影| 久久国产乱子精品免费女| 亚洲一二三专区| 亚洲天堂免费在线观看视频| 2024国产精品|