СУБД dBase. Хранение данных в формате DBF.

 

В восьмидесятые годы было разработано большое число однопользовательских СУБД. В нашей стране наибольшее распространение получили FoxBASE, dBASE (III, IV), Paradox, а в конце восьмидесятых годов приобрел популярность пакет Clipper. FoxBASE, dBASE и Clipper использовали одни и те же принципы организации информации и были совместимы на уровне файлов баз данных, поэтому иногда все эти системы рассматривали как модификации dBASE.

 

Система программирования dBASE была разработана фирмой Ashton-Tate. В dBASE III plus основное внимание было уделено совершенствованию пользовательского интерфейса (режим ASSIST), что существенно упростило процедуру создания и модификации баз данных, сортировку и индексацию записей. Создание и использование довольно сложных структур баз данных было возможно непосредственно из режима ASSIST без составления прикладных программ на языке dBASE, что делало эту СУБД доступной для широкого круга пользователей. Это обеспечило огромную популярность dBASE III plus, и в конце восьмидесятых годов эта СУБД являлась фактическим стандартом для реляционных баз данных.

 

Одним из недостатков СУБД dBASE, Paradox являлась невозможность создания с их помощью файлов .EXE, автономно работающих под управлением DOS. Именно поэтому широкое распространение (в нашей стране) приобрел пакет Clipper фирмы Nantucket, который с самого начала предназначался для компиляции прикладных программ. Clipper работал с файлами .DBF, обеспечивая достаточно высокое быстродействие. В тоже время это была открытая система, позволявшая расширять возможности языка за счет приложений, написанных на других языках программирования - Assembler'е и С.

 

Файл формата DBF состоит из записи заголовка и записей с данными. В записи заголовка определяется структура набора данных. Количество полей определяет число подзаписей полей. Для описания каждого поля существует одна подзапись поля. Данные начинаются с позиции, указываемой в записи заголовка в байтах 08-09. Записи с данными начинаются с байта, содержащего признак удаления. Если в этот байт занесен пробел в коде ASCII (0х20), то запись не удалялась; если же в первом байте – звездочка (0х2A), то запись удалена. Записи с данными следуют за заголовком (байты располагаются последовательно), и включают в себя фактическое содержимое полей без каких-либо дополнительных символов. Длина записи (в байтах) определяется суммированием указанных длин всех полей. Индексный файл строится самой СУБД. В признаке завершения заголовка файла Microsoft FoxPro и Access ставят символ с кодом 0x0D.

 

Ниже приведены два варианта формата DBF – для dBASE версии III и версии IV:

 

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

Заголовок табличного файла
Байт Содержание Описание
1-й байт Определение наличия MEMO-файла в таблице dBASE III PLUS (03h без MEMO-файла (.DBT-файл;) 83h с MEMO-файлом).
1-3 3 байта Дата последнего обновления в формате YYMMDD
4-7 32-битное число Количество записей в таблице
8-9 16-битное число Количество байтов, занимаемых заголовком
10-11 16-битное число Количество байтов, занимаемых записью
12-31 20 байтов Зарезервированная область
32-n 32 байта Массив с описаниями полей (структура каждого такого описания показана ниже)
n+1 1 байт Хранится значение 0Dh, выполняющее роль терминатора описаний полей

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

Структура заголовка файла данных для таблицы dBASE III PLUS.
Байт Содержание Описание
0-10 11 байт Имя поля в ASCII (заполнено нулями).
1 байт Тип поля в ASCII (C, D, L, M или N)
12-15 4 байта Адрес данных поля (ссылка на память, а не на диск)
1 байт Размер поля в бинарном формате
1 байт Порядковый номер поля в бинарном формате
18-19 2 байта Зарезервировано для сетевой версии dBASE III PLUS
1 байт ID рабочей области
21-22 2 байта Зарезервировано для сетевой версии dBASE III PLUS
1 байт Флаг установки поля
24-31 1 байт Зарезервированная область

 

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

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 0x20 (пробел) указывает, что запись не удалена, значение 0x2A (звездочка) – запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (0x1A). Вы можете ввести данные в кодовой странице OEM, как показано ниже.

Допустимый тип данных dBASE III
Тип данных Возможные значения
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-файл будет заполнен пробелами (0x20) (а не числами). В случае изменения данных какого-либо поля, блоки могут изменить свои порядковые номера для отображения новой позиции данных в .DBT-файле.

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

Структура файла
Байт Содержание Описание
1-й байт Контроль файла dBASE IV: биты 0-2 указывают номер версии, бит 3 - наличие MEMO-файла dBASE IV, биты 4-6 - наличие SQL-таблицы, бит 7 - наличие любого MEMO-файла (или dBASE III Plus, или dBASE IV)
1-3 3 байта Дата последнего обновления в формате YYMMDD
4-7 32-битное число Количество записей в таблице
8-9 16-битное число Количество байтов, занимаемых заголовком
10-11 16-битное число Количество байтов, занимаемых записью
12-13 2 байта Зарезервированная область, заполнена нулями
1 байт Флаг, указывающий на наличие незавершенной транзакции
1 байт Флаг кодировки
16-27 12 байт Зарезервированная область для многопользовательского использования dBASE IV
1 байт Флаг наличия MDX-файла: 01H - файл присутствует, 00H - файл отсутствует
1 байт ID драйвера языка
30-31 2 байта Зарезервированная область, заполнена нулями
32-n* по 32 байта Массив с описаниями полей (структура каждого такого описания показана ниже)
n+1 1 байт 0DH в качестве терминатора

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

Описание поля таблицы
Байт Содержание Описание
0-10 11 байт Имя поля в ASCII (заполнено нулями)
1 байт Тип поля в ASCII (C, D, F, L, M или N)
12-15 4 байта Зарезервированная область
1 байт Размер поля в бинарном формате
1 байт Порядковый номер поля в бинарном формате
18-19 2 байта Зарезервированная область
1 байт ID рабочей области
21-30 10 байт Зарезервированная область
1 байт Флаг MDX-поля: 01H если поле имеет метку индекса в MDX-файле, 00H - нет.

 

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

Записи в табличном файле располагаются непосредственно за заголовком таблицы. Данным записи предшествует байт, указывающий на удаленность записи: значение 0x20 (пробел) указывает, что запись не удалена, значение 0x2A (звездочка) – запись была удалена. Поля упаковываются записями без разделителей полей или терминаторов записи. Конец файла помечается единственным байтом (с EOF-маркером), OEM-код которого соответствует значению 26 (0x1A).

Допустимый тип данных dBASE IV
Обозначение типа Тип Диапазон значений
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-файлы для DBASE IV:

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

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

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








Дата добавления: 2015-07-30; просмотров: 2604;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.