Таблицы dBASE. Структура .DBF-файла

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Иногда возникает необходимость поработать с таблицей dBASE напрямую, без Borland Database Engine (BDE). К примеру, если .DBT-файл (содержащий MEMO-данные) для данной таблицы безвозвратно потерян, .DBF-файл становится абсолютно непригодным, поскольку байт в заголовке .DBF-файла указывает, что таблица должна содержать соответствующий MEMO-файл. Решение этой проблемы потребует обнуление этого байта, для того чтобы таблица не указывала на сопутствующий MEMO-файл. Или, если Вам захотелось написать собственную программу для работы с данными.

Ниже приводяся структуры .DBF-файлов для таблиц dBASE. Представлены структуры файлов для различных версий dBASE: dBASE III PLUS 1.1, dBASE IV 2.0, dBASE 5.0 под DOS и dBASE 5.0 для Windows.

Структура заголовка файла данных для таблицы dBASE III PLUS.

Заголовок табличного файла

БайтСодержаниеОписание

01-й байтОпределение наличия MEMO-файла в таблице dBASE III PLUS (03h без MEMO-файла (.DBT-файл;) 83h с MEMO-файлом).

1-33 байтаДата последнего обновления в формате YYMMDD

4-732-битное числоКоличество записей в таблице

8-916-битное числоКоличество байтов, занимаемых заголовком

10-1116-битное числоКоличество байтов, занимаемых записью

12-143 байтаЗарезервированная область

15-2713 байтЗарезервировано для сетевой версии dBASE III PLUS

28-314 байтаЗарезервированная область

32-n32 байтаМассив с описаниями полей (структура каждого такого описания показана ниже)

n 11 байтХранится значение 0Dh, выполняющее роль терминатора описаний полей

n — последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.

Описание поля таблицы

БайтСодержаниеОписание

0-1011 байтИмя поля в ASCII (заполнено нулями).

111 байтТип поля в ASCII (C, D, L, M или N)

12-154 байтаАдрес данных поля (ссылка на память, а не на диск)

161 байтРазмер поля в бинарном формате

171 байтПорядковый номер поля в бинарном формате

18-192 байтаЗарезервировано для сетевой версии dBASE III PLUS

201 байтID рабочей области

21-222 байтаЗарезервировано для сетевой версии dBASE III PLUS

231 байтФлаг установки поля

24-311 байтЗарезервированная область

Записи таблицы

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 20h (пробел) указывает что запись не удалена, значение 2Ah (звездочка) — запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (1Ah). Вы можете ввести данные в кодовой странице OEM как показано ниже.

Допустимый тип данных таблиц dBASE

Тип данныхВозможные значения

C (Символы)Все символы кодовой страницы OEM

D (Дата)Числа и символ-разделитель для месяца, дня и года (внутренний формат записи — 8 цифр в формате YYYYMMDD)

N (Числовой)- . 0 1 2 3 4 5 6 7 8 9

L (Логический)? Y y N n T t F f (? — не инициализировано)

M (Мемо)Все символы кодовой страницы OEM (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока)

Бинарные-, MEMO-, OLE-поля и .DBT-файлы

MEMO-поля хранят данные в .DBT-файлах, состоящих из перечисляемых последовательных блоков (0, 1, 2 и т.д.). Размер блока равен 512 байт. Первый блок в .DBT-файле (нулевой блок) — заголовок .DBT-файла.

MEMO-поле каждой записи .DBF-файла содержит номер (значение указывается в кодовой странице OEM), указывающий на блок с хранимыми данными. Если поле не содержит никаких данных, .DBF-файл будет заполнен пробелами (20h) (а не числами).

В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.

Данная информация взята из руководства по использованию dBASE III Plus («Using dBASE III PLUS», Appendix C).

Структура заголовка файла данных для таблицы dBASE IV 2.0.

Структура файла

БайтСодержаниеОписание

01-й байтКонтроль файла dBASE IV: биты 0-2 указывают номер версии, бит 3 — наличие MEMO-файла dBASE IV, биты 4-6 — наличие SQL-таблицы, бит 7 — наличие любого MEMO-файла (или dBASE III Plus, или dBASE IV)

1-33 байтаДата последнего обновления в формате YYMMDD

4-732-битное числоКоличество записей в таблице

8-916-битное числоКоличество байтов, занимаемых заголовком

10-1116-битное числоКоличество байтов, занимаемых записью

12-132 байтаЗарезервированная область, заполнена нулями

141 байтФлаг, указывающий на наличие незавершенной транзакции

151 байтФлаг кодировки

16-2712 байтЗарезервированная область для многопользовательского использования dBASE IV

281 байтФлаг наличия MDX-файла: 01H — файл присутствует, 00H — файл отсутствует

291 байтID драйвера языка

30-312 байтаЗарезервированная область, заполнена нулями

32-n*по 32 байтаМассив с описаниями полей (структура каждого такого описания показана ниже)

n 11 байт0DH в качестве терминатора

n — последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.

Описание поля таблицы

БайтСодержаниеОписание

0-1011 байтИмя поля в ASCII (заполнено нулями).

111 байтТип поля в ASCII (C, D, F, L, M или N)

12-154 байтаЗарезервированная область

161 байтРазмер поля в бинарном формате

171 байтПорядковый номер поля в бинарном формате

18-192 байтаЗарезервированная область

201 байтID рабочей области

21-3010 байтЗарезервированная область

311 байтФлаг MDX-поля: 01H если поле имеет метку индекса в MDX-файле, 00H — нет.

Записи таблицы:

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 20h (пробел) указывает что запись не удалена, значение 2Ah (звездочка) — запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (1Ah).

Допустимый тип данных таблиц dBASE

Обозначение типаТипДиапазон значений

CСимволыВсе символы кодовой страницы OEM

DДатаЧисла и символ-разделитель для месяца, дня и года (внутренний формат записи — 8 цифр в формате YYYYMMDD)

FБинарные числа с плавающей точкой- . 0 1 2 3 4 5 6 7 8 9

NДесятичное преобразование бинарных чисел- . 0 1 2 3 4 5 6 7 8 9

LЛогический? Y y N n T t F f (? — не инициализировано)

MМемоВсе символы кодовой страницы OEM (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока)

Memo-поля и .DBT-файлы

MEMO-поля хранят данные в .DBT-файлах, состоящих из перечисляемых последовательных блоков (0, 1, 2 и т.д.). Переменная BLOCKSIZE определяет размер каждого блока. Первый блок в .DBT-файле (нулевой блок) — заголовок .DBT-файла.

MEMO-поле каждой записи .DBF-файла содержит номер (значение указывается в кодовой странице OEM), указывающий на блок с хранимыми данными. Если поле не содержит никаких данных, .DBF-файл будет заполнен пробелами (20h) (а не числами).

В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.

Данная информация взята из справочника по dBASE IV («dBASE IV Language Reference», Appendix D).

Структура заголовка файла данных для таблицы dBASE 5.0 под DOS.

Заголовок табличного файла

БайтСодержаниеОписание

01-й байтКонтроль файла dBASE под Windows: биты 0-2 указывают номер версии, бит 3 — наличие MEMO-файла dBASE IV или dBASE под Windows, биты 4-6 — наличие dBASE IV SQL-таблицы, бит 7 — наличие любого .DBT MEMO-файла (MEMO-файл таблицы dBASE III Plus, dBASE IV или dBASE под Windows)

1-33 байтаДата последнего обновления в формате YYMMDD

4-732-битное числоКоличество записей в таблице

8-916-битное числоКоличество байтов, занимаемых заголовком

10-1116-битное числоКоличество байтов, занимаемых записью

12-132 байтаЗарезервированная область, заполнена нулями

141 байтФлаг, указывающий на наличие незавершенной транзакции

151 байтФлаг кодировки

16-2712 байтЗарезервированная область для многопользовательского использования

281 байтФлаг наличия MDX-файла: 01H — файл присутствует, 00H — файл отсутствует

291 байтID драйвера языка

30-312 байтаЗарезервированная область, заполнена нулями

32-n*по 32 байтаМассив с описаниями полей (структура каждого такого описания показана ниже)

n 11 байт0DH в качестве терминатора

n — последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.

Описание поля таблицы

БайтСодержаниеОписание

0-1011 байтИмя поля в ASCII (заполнено нулями).

111 байтТип поля в ASCII (B, C, D, F, G, L, M или N)

12-154 байтаЗарезервированная область

161 байтРазмер поля в бинарном формате

171 байтПорядковый номер поля в бинарном формате

18-192 байтаЗарезервированная область

201 байтID рабочей области

21-3010 байтЗарезервированная область

311 байтФлаг MDX-поля: 01H если поле имеет метку индекса в MDX-файле, 00H — нет.

Записи таблицы

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 20h (пробел) указывает что запись не удалена, значение 2Ah (звездочка) — запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (1Ah). Вы можете ввести данные в кодовой странице OEM как показано ниже.

Допустимый тип данных таблиц dBASE

Тип данныхВозможные значения

C (Символы)Все символы кодовой страницы OEM

D (Дата)Числа и символ-разделитель для месяца, дня и года (внутренний формат записи — 8 цифр в формате YYYYMMDD)

F (Бинарные числа с плавающей точкой)- . 0 1 2 3 4 5 6 7 8 9

N (Числовой)- . 0 1 2 3 4 5 6 7 8 9

L (Логический)? Y y N n T t F f (? — не инициализировано)

M (Мемо)Все символы кодовой страницы OEM (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока)

MEMO-поля и .DBT-файлы

MEMO-поля хранят данные в .DBT-файлах, состоящих из перечисляемых последовательных блоков (0, 1, 2 и т.д.). Переменная BLOCKSIZE определяет размер каждого блока. Первый блок в .DBT-файле (нулевой блок) — заголовок .DBT-файла.

MEMO-поле каждой записи .DBF-файла содержит номер (значение указывается в кодовой странице OEM), указывающий на блок с хранимыми данными. Если поле не содержит никаких данных, .DBF-файл будет заполнен пробелами (20h) (а не числами).

В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.

Если вы удаляете текст в МЕМO-поле, в отличие от dBASE III PLUS, таблица dBASE 5.0 под DOS для ввода нового текста использует удаленную область. dBASE III PLUS всегда добавляет новый текст в конец .DBT-файла. В dBASE III PLUS размер .DBT-файла растет всякий раз при добавления нового текста, даже если перед этим текст был удален.

Данная информация взята из справочника по dBASE под DOS («dBASE for DOS Language Reference manual», Appendix C).

Структура заголовка файла данных для таблицы dBASE 5.0 под Windows.

Заголовок табличного файла

БайтСодержаниеОписание

01-й байтКонтроль файла dBASE под Windows: биты 0-2 указывают номер версии, бит 3 — наличие MEMO-файла dBASE IV или dBASE под Windows, биты 4-6 — наличие dBASE IV SQL-таблицы, бит 7 — наличие любого .DBT MEMO-файла (MEMO-файл таблицы dBASE III Plus, dBASE IV или dBASE под Windows)

1-33 байтаДата последнего обновления в формате YYMMDD

4-732-битное числоКоличество записей в таблице

8-916-битное числоКоличество байтов, занимаемых заголовком

10-1116-битное числоКоличество байтов, занимаемых записью

12-132 байтаЗарезервированная область, заполнена нулями

141 байтФлаг, указывающий на наличие незавершенной транзакции dBASE IV

151 байтФлаг кодировки таблицы dBASE IV

16-2712 байтЗарезервированная область для многопользовательского использования

281 байтФлаг наличия MDX-файла: 01H — файл для данной таблицы присутствует, 00H — файл отсутствует

291 байтID драйвера языка

30-312 байтаЗарезервированная область, заполнена нулями

32-nпо 32 байтаМассив с описаниями полей (структура данного массива показана ниже)

n 11 байт0DH в качестве терминатора

n — последний байт массива с описаниями полей. Размер массива зависит от количества полей в табличном файле.

Описание поля таблицы

БайтСодержаниеОписание

0-1011 байтИмя поля в ASCII (заполнено нулями).

111 байтТип поля в ASCII (B, C, D, F, G, L, M или N)

12-154 байтаЗарезервированная область

161 байтРазмер поля в бинарном формате

171 байтПорядковый номер поля в бинарном формате

18-192 байтаЗарезервированная область

201 байтID рабочей области

21-3010 байтЗарезервированная область

311 байтФлаг MDX-поля: 01H если поле имеет метку индекса в MDX-файле, 00H — нет.

Записи таблицы

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 20h (пробел) указывает что запись не удалена, значение 2Ah (звездочка) — запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (1Ah). Вы можете ввести данные в кодовой странице OEM как показано ниже.

Допустимый тип данных таблиц dBASE

Тип данныхВозможные значения

B (Бинарный)Все символы кодовой страницы OEM (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока).

C (Символы)Все символы кодовой страницы OEM

D (Дата)Числа и символ-разделитель для месяца, дня и года (внутренний формат записи — 8 цифр в формате YYYYMMDD)

G (Общий)Все символы кодовой страницы OEM или OLE (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока).

N (Числовой)- . 0 1 2 3 4 5 6 7 8 9

L (Логический)? Y y N n T t F f (? — не инициализировано)

M (Мемо)Все символы кодовой страницы OEM (внутренний формат записи — 10 цифр, содержащих номер .DBT-блока)

Бинарные, МЕМО, OLE-поля и .DBT-файлы

Бинарные, MEMO и OLE-поля хранят данные в .DBT-файлах, состоящих из перечисляемых последовательных блоков (0, 1, 2 и т.д.). Переменная BLOCKSIZE определяет размер каждого блока. Первый блок в .DBT-файле (нулевой блок) — заголовок .DBT-файла.

Бинарное, OLE- или MEMO-поле каждой записи .DBF-файла содержит номер (значение указывается в кодовой странице OEM), указывающий на блок с хранимыми данными. Если поле не содержит никаких данных, .DBF-файл будет заполнен пробелами (20h) (а не числами).

В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.

Если вы удаляете текст в бинарном, OLE- или МЕМO-поле, в отличие от dBASE III PLUS и dBASE IV, таблица dBASE 5.0 под Windows для ввода нового текста использует удаленную область. dBASE III PLUS всегда добавляет новый текст в конец .DBT-файла. В dBASE III PLUS размер .DBT-файла растет всякий раз при добавления нового текста, даже если перед этим текст был удален.

Данная информация взята из справочника по dBASE под Windows («dBASE for Windows Language Reference manual», Appendix C).

Предупреждение:

У Вас есть право использовать данную техническую информацию с продуктом фирмы Borland только лишь в случае, когда это не противоречит Лицензионному соглашению, поставляемую с программным продуктом.

{/codecitation}

Добавить комментарий