From 4875a3dd9b183dcd2256e2abfc4ccf7484c233b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 7 Dec 2022 13:17:14 +0100 Subject: New upstream version 4.0.2 --- html/xbc2.htm | 276 ---------------------------------------------------------- 1 file changed, 276 deletions(-) delete mode 100755 html/xbc2.htm (limited to 'html/xbc2.htm') diff --git a/html/xbc2.htm b/html/xbc2.htm deleted file mode 100755 index ac4800e..0000000 --- a/html/xbc2.htm +++ /dev/null @@ -1,276 +0,0 @@ - - -Xbase DBMS Chapter 2 - -

Database Overview

-

Chapter Updated 3/18/04


- -The objective of this chapter is to provide information regarding how -the database files are utilized and document the various record structures. -With the exception of the brief section on the record buffer, the -information presented in this chapter is not required to use the -Xbase library. It is mainly information describing internal file -structures utilized by the Xbase routines.

- -Xbase files are comprised of a variable length header record which stores -information about the file and describes -the fixed length record format, followed by a series of fixed length -data records. -

- -Each fixed length data record is preceded by a one byte indicator -which identifiies if the record has been deleted. If the record is -not deleted, the indicator is a space (0x20). If deleted, the -indicator contains an asterisk (0x2A). Data fields are stored in records -without field separators or record terminators.

- -In earlier releases of dBASE, there is an ASCII NULL character -between the $0D end of header indicator and the start of the data. -This NULL was removed starting with dBASE III Plus, making a Plus -header one byte shorter than an identically structured III file. -The methods documented in the Xbase software and documentation follow -the more recent version where the NULL character is not included. -

- -Each database file is comprised of zero, one or many records. A record is -comprised of fields. Only one record is accessed at a time.

- -Zero, one or many database files can be open simultaneously.

- -
- -

The Record Buffer

- -When using the Xbase routines, each open data file has a record buffer -which is manipulated by calling the database, index and field routines. - -Updates are committed from the record buffer to the database when a write, -or append is performed. The library will automatically write updates -to the database if the buffer has been updated and the record is -repositioned or the database is closed.

- -The record buffer is not used for handling the actual data portion of -memo fields. When working with memo fields, the application program must -allocate enough buffer space for reading and writing memo fields.

- -Internal to the library, there is an additional record buffer which -stores the original value of the data record before any changes are made. -This is used by the index routines for finding and deleting original key -values from any open indices before adding the new keys. If the key values -are not changed, no index updates occur. - - -

- -
-
-

Xbase Database File Header

- -The Xbase file header, located at the beginning of the database, describes -the .DBF database. Knowledge of this structure is not necessary to -effectively utilize the Xbase libraries.


- - - -
PositionLengthDescription -
01 bytefile version number
- (03H without a .DBT file)
- (83H with a .DBT file) -
1-33 bytesdate of last update
- (YY MM DD) in binary format -
4-732 bit numbernumber of records in data file -
8-916 bit numberlength of header structure -
10-1116 bit numberlength of the record -
12-3120 bytesreserved -
32-n32 bytes eachfield descriptor record (see below) -
n+11 byte0DH as the field terminator -
-

- -
-
-

Xbase Field Descriptor Record

-The Xbase field descriptor record stores information about each field in the -database. Each database has from 1 to 1024 fields. -Knowledge of this structure is not necessary to -effectively utilize the Xbase libraries.


- - - -
PositionLengthDescription -
0-1011 bytesfield name in ASCII zero-filled -
111 bytefield type in ASCII (C N L D or M) -
12-1532 bit numberfield data address -
161 bytefield length in binary -
171 bytefield decimal count in binary -
18-3114 bytesreserved bytes (version 1.00) -
-

-
-
-

Field Data Format

-Data are stored in ASCII format in the database as follows:

- - -
DATA TYPEDATA RECORD STORAGE -
CharacterASCII characters, left justified, right blank filled -
Date(8 digits in YYYYMMDD format, such as
- 19601007 for October 7, 1960) -
Logical? Y y N n T t F f (? when not initialized) -
Memo10 digits representing a .DBT block number -
Numeric. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -
Float. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -
-

- -
-

Memo Fields

- -Memo fields store variable length data elements in a seperate .DBT file. -The main .DBF file maintains a ten byte field which is used by the Xbase -routines for determining the location of the data in the .DBT file. -

- -Xbase DBMS supports both dBASE III+ and dBASE IV version memo files. -The version IV files are somewhat more efficient in that they reuse -unused memo space when data are deleted or freed from use. With version -III files, all new updates are appended to the end of the file and the -unused space is not reclaimed until the datafiles are packed. -

- -Memo fields can be used for storing a variety of date type. However, -type 3 files are limited to storing textual data because most internal -memo field processing in a type 3 file relies on two contiguous 0x1a -charaters.

- -Type 4 memo fields can be used for storing BLOB (binary large object) -data reliably, as the internal file structure does not rely on any -special characters embedded in the data.

- -A special note on storing string data in a memo field. For those users -that are new to C/C++ programming, string fields typically end with -a null (0x00) terminator character. As a general rule of thumb when using -the library, add one to the length of any string when -specifying the length of the data. This stores the null terminating byte -with the data. For example, when storing string "This is a string" -specified size should be 17, not 16. - - -

Technical memo file information

- -The following info on memo fields is for the curious. -It is not required -reading if you don't need to know the internals.

- -
  • Memo files are made up of one or more blocks -
  • For version III files, the block size is 512 -
  • For version IV files, the block size is a multiple of 512 -
  • The minimum amout of space necessary to store one memo field is -one block or 512 bytes. -
  • The default block size can be adjusted by manipulating the -XB_DBT_BLOCK_SIZE macro in the options.h file. - - -
  • The main .DBF file maintains a ten byte numeric field which is blank if -no memo data exists for a given field. Otherwise it contains a number, which -when multiplied by the block size, points to the offset in the file of the head -block in the file/ -

    - -For version 3 memo field files, there are two fields in the head block of -the file, NextBlockNo and Version. Depending on the -Xbase software, some vendors products update these two fields, some do not. -The Xbase library keeps the fields updated, but does not rely on them to -be valued with correct data. This helps to support maximum compatibility -amoungst all Xbase tools available.

    - -For version 4 memo field files, -the first block in the .DBT file is a header block which is comprised of -8 bytes of data which maintain the file's block size and the next free -block available in the file. Blocks two through n contain the actual -memo data. A chain of empty blocks is maintained within the file for -potential future use. When an add or update routine executes, it first -attempts to find a spot in a set of blocks which were earlier allocated, -but not currently in use for the data. If no free spot is found, data are -appended to the end of the file. - -The free block chain is sorted in block number order. When blocks of -data are freed and added to the free block chain, the routines will attempt -to concatonate free block chains togethor where possible. When a delete -occurs, or an update which requires less space occurs, the new free space -is added to the free block chain. - -

    - -

    Various Memo File Block Types

    - - - -
    Valid Block Types -
    Head Block -
    Only data block for memo field -
    First of several contiguous data block set -
    2-n of contiguous data block set -
    Only data block in free chain (version IV only) -
    First of several contiguous free block set (version IV only) -
    2-n of contiguous free block set (type 4 only) -
    -

    - -

    Head Block Structure

    - - -
    1-4LONGNext Block ID -
    5-8LONGNot used all 0x00's -
    9-16CHAR(8)Filename (Version IV Only) -
    17CHARVersion (0x03 = Version III, 0x00 = Version IV) -
    18-20CHAR(3)Not used all 0x00's -
    21-22SHORTBlock Size (Version IV only ) -
    23-Remainder of blockCHARNot used -
    -

    - - -

    Version IV Head Data Block Structure

    - - -
    xbShort0-1-1 -
    xbShort2-3Starting position of data (always 8 ?) -
    xbLong4-7Length of data includes first 8 bytes -
    char (9) - Blocksize8-15Data -
    -

    - -

    Version IV Head Free Block Structure

    - - -
    xbLong0-3Next free block in the free block chain -
    xbLong4-7Number of free blocks in this contiguous free - block set -
    -

    -Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data. -

    -
    -

    64 Bit File Support

    -Beginning with Release 3.0 of the library, Xbase was renamed to Xbase64 and -64 bit file support was incorporated into the library. -

    -This functionality currently works on Linux/Unix platforms which support -64 bit file structures. 64 bit support was not tested with Windows -because the author didn't have access to a compiler which creates 64 -bit Windows apps. If you need this functionality for Windows, consider -donating a Windows 64 bit compiler to the project and I'll get 64 bit -support working for Windows. -

    -It is not advisable to use Xbase 64 bit file support in combination with -32 bit Xbase applications such as older versions of DBase, Clipper and Foxpro. -Xbase64 can extend the files well beyond any limits in the older 32 bit -application development environments. -

    -If Xbase is being built with glibc, verify it is at least version 2.2.3. -


    -


    - - - -- cgit v1.2.3