the “deleted row” indicator in dbase?

2019-07-26 06:26发布

As you know there is no x64 driver for dBase.
"http://msdn.microsoft.com/en-us/vfoxpro/bb190289.aspx"
I tried to make one.
It is extremely faster than ODBC.but there is only one problem.
I cannot determine if a row is deleted or not.

1条回答
一纸荒年 Trace。
2楼-- · 2019-07-26 07:02

The first byte of each record (not header or field description, but actual record data) will contain an asterisk ("*") if the record is deleted, or a blank space (" ") if not.

Here's something I found a while back on Wotsit.org that may help:

----------------------------------------------------------------------------
Genaral Format of .dbf files in Xbase languages                    18-Nov-96
----------------------------------------------------------------------------
Applies for / supported by:

   FS = FlagShip       D3 = dBaseIII+
   Fb = FoxBase        D4 = dBaseIV
   Fp = FoxPro         D5 = dBaseV
   CL = Clipper


1. DBF Structure
================

Byte   Description
------+--------------------------------------
0..n   .dbf header (see 2 for size, byte 8)
n+1    1st record of fixed length (see 2&3)  \
       2nd record (see 2 for size, byte 10)  \ if dbf is
       ...                                   / not empty
       last record                           /
last   optional: 0x1a (eof byte)


2. DBF Header (variable size, depending on field count)
=======================================================

Byte Size Contents Description                  Applies for (supported by)
----+----+--------+----------------------------+-----------------------------
00     1   0x03    plain .dbf                   FS, D3, D4, D5, Fb, Fp, CL
           0x04    plain .dbf                   D4, D5  (FS)
           0x05    plain .dbf                   D5, Fp  (FS)
           0x43    with  .dbv memo var size     FS
           0xB3    with  .dbv and .dbt memo     FS
           0x83    with  .dbt memo              FS, D3, D4, D5, Fb, Fp, CL
           0x8B    with  .dbt memo in D4 format D4, D5
           0x8E    with  SQL table              D4, D5
           0xF5    with  .fmp memo              Fp
01     3  YYMMDD   Last update digits           all
04     4  ulong    Number of records in file    all
08     2  ushort   Header size in bytes         all
10     2  ushort   Record size in bytes         all
12     2   0,0     Reserved                     all
14     1   0x01    Begin transaction            D4, D5
           0x00    End Transaction              D4, D5
           0x00    ignored                      FS, D3, Fb, Fp, CL
15     1   0x01    Encryptpted                  D4, D5
           0x00    normal visible               all
16    12   0 (1)   multi-user environment use   D4,D5
28     1   0x01    production index exists      Fp, D4, D5
           0x00    index upon demand            all
29     1   n       language driver ID           D4, D5
           0x01    codepage  437 DOS USA        Fp
           0x02    codepage  850 DOS Multi ling Fp
           0x03    codepage 1251 Windows ANSI   Fp
           0xC8    codepage 1250 Windows EE     Fp
           0x00    ignored                      FS, D3, Fb, Fp, CL
30     2   0,0     reserved                     all
32    n*32         Field Descriptor, see (2a)   all
+1     1   0x0D    Header Record Terminator     all


2a. Field descriptor array in dbf header (fix 32 bytes for each field)
========================================

Byte Size Contents Description                  Applies for (supported by)
----+----+--------+----------------------------+-----------------------------
0     11   ASCI    field name, 0x00 termin.     all
11     1   ASCI    field type  (see 2b)         all
12     4   n,n,n,n fld address in memory        D3
           n,n,0,0 offset from record begin     Fp
           0,0,0,0 ignored                      FS, D4, D5, Fb, CL
16     1   byte    Field length, bin (see 2b)   all \ FS,CL: for C field type,
17     1   byte    decimal count, bin           all / both used for fld lng
18     2   0,0     reserved                     all
20     1   byte    Work area ID                 D4, D5
           0x00    unused                       FS, D3, Fb, Fp, CL
21     2   n,n     multi-user dBase             D3, D4, D5
           0,0     ignored                      FS, Fb, Fp, CL
23     1   0x01    Set Fields                   D3, D4, D5
           0x00    ignored                      FS, Fb, Fp, CL
24     7   0..0    reserved                     all
31     1   0x01    Field is in .mdx index       D4, D5
           0x00    ignored                      FS, D3, Fb, Fp, CL


2b. Field type and size in dbf header, field descriptor (1 byte)
=======================================================

  Size Type      Description/Storage            Applies for (supported by)
------+---------+------------------------------+-----------------------------
C 1..n Char      ASCII (OEM code page chars)    all
                 rest= space, not \0 term.
                 n = 1..64kb (using deci count) FS
                 n = 1..32kb (using deci count) Fp, CL
                 n = 1..254                     all
D 8    Date      8 Ascii digits (0..9) in the   all
                 YYYYMMDD format
F 1..n Numeric   Ascii digits (-.0123456789)    FS, D4, D5, Fp
                 variable pos. of float.point
                 n = 1..20
N 1..n Numeric   Ascii digits (-.0123456789)    all
                 fix posit/no float.point
                 n = 1..20                      FS, Fp, CL
                 n = 1..18                      D3, D4, D5, Fb
L 1    Logical   Ascii chars (YyNnTtFf space)   FS, D3, Fb, Fp, CL
                 Ascii chars (YyNnTtFf ?)       D4, D5  (FS)
M 10   Memo      10 digits repres. the start    all
                 block posit. in .dbt file, or
                 10spaces if no entry in memo
V 10   Variable  Variable, bin/asc data in .dbv FS
                 4bytes bin= start pos in memo
                 4bytes bin= block size
                 1byte     = subtype
                 1byte     = reserved (0x1a)
                 10spaces if no entry in .dbv
P 10   Picture   binary data in .ftp            Fp
                 structure like M
B 10   Binary    binary data in .dbt            D5
                 structure like M
G 10   General   OLE objects                    D5, Fp
                 structure like M
2 2    short int binary int max +/- 32767       FS
4 4    long int  binary int max +/- 2147483647  FS
8 8    double    binary signed double IEEE      FS


3. Each Dbf record (fix length)
==================

Byte   Size  Description                           Applies for (supported by)
------+----+--------------------------------------+--------------------------
0      1    deleted flag "*" or not deleted " "     all
1..n   1..  x-times contents of fields, fixed       all
            length, unterminated.
            For n, see (2) byte 10..11
查看更多
登录 后发表回答