Visual FoxPro использует таблицы для хранения данных определяемых в различных типах файлов. Следующий список включает типы файлов, которые хранят данные в виде таблиц:
Вы можете использовать и просматривать эти файлы точно так же, как Вы просматриваете любые табличные файлы, поскольку эти файлы фактически являются таблицами.
Табличный файл состоит из заголовочной части и собственно данных. Заголовочная часть описывает структуру таблицы и содержит прочую информацию, связанную с таблицей. Она начинается с нулевой позиции файла. Собственно данные следуют непосредственно за заголовком в последовательно располагающихся байтах и содержат собственно текст полей.
Замечание |
---|
Собственно данные в файле начинаются с позиции, указанной в 8 и 9 байтах заголовочной части. Каждая строка данных начинается с байта, содержащего флаг (признак) удаленной записи. Если этот байт в кодировке ASCII является пробелом (0x20), то данная запись не является удаленной. Если первый байт строки - это звездочка (0x2A), то данная запись является удаленной. Данные из собственно полей следуют непосредственно за флагом удаления.
|
Замечание |
---|
Файл таблицы может заканчиваться дополнительным байтом - признаком конца файла (0x1A). Но может его и не иметь. На работу с таблицей это не оказывает никакого влияния.
|
Длина записи в байтах определяется как сумма длин всех полей плюс один байт на флаг удаления.
Данные типа Integer в табличном файле хранятся, начиная с младшего разряда.
Дополнительную информацию о структуре таблиц разных типов файлов Вы можете посмотреть Структура таблиц табличных файлов.
Структура заголовка таблицы
Смещение в байтах
|
Описание
|
0
|
Тип файла:
0x02 FoxBASE
0x03 FoxBASE+/Dbase III plus, нет memo
0x30 Visual FoxPro
0x31 Visual FoxPro, поддержка свойства autoincrement
0x32 Visual FoxPro, поддержка полей типа Varchar, Varbinary, или Blob
0x43 dBASE IV SQL табличный файл, нет memo
0x63 dBASE IV SQL системный файл, нет memo
0x83 FoxBASE+/dBASE III PLUS, с memo
0x8B dBASE IV с memo
0xCB dBASE IV SQL табличный файл, с memo
0xF5 FoxPro 2.x (или младше) с memo
0xFB FoxBASE
Замечание |
---|
Visual FoxPro может работать со всеми перечисленными типами файлов как с собственными файлами без дополнительных драйверов и преобразований, но только в том случае, если все остальные структуры таблиц соответствуют системным ограничениям Visual FoxPro.
|
Замечание |
---|
При создании новых таблиц в Visual FoxPro значение данного байта устанавливается в одно из трех значений: 0x30, 0x31 или 0x32 в зависимости от факта использования соответствующих типов полей. В случае добавления, удаления или изменения полей произойдет и модификация данного байта, если необходимо.
|
|
1 - 3
|
Дата последнего изменения области данных таблицы (YYMMDD)
|
4 – 7
|
Количество записей в таблице
|
8 – 9
|
Позиция начала области данных
|
10 – 11
|
Длина одной строки (записи) данных, включая флаг удаления
|
12 – 27
|
Зарезервировано
|
28
|
Табличные флаги:
0x01 файл имеет структурный индексный файл .cdx
0x02 файл имеет связанный с ним файл .fpt для хранения содержимого полей типа Memo и Blob
0x04 файл является контейнером базы данных (.dbc)
Этот байт может содержать сумму любых допустимых значений. Например, значение 0x03 указывает на то, что таблица имеет как структурный индексный файл .cdx так и файл .fpt для хранения содержимого полей типа Memo и Blob.
|
29
|
Обозначение кодовой страницы
|
30 – 31
|
Зарезервировано, содержит 0x00
|
32 – n
|
Описание полей. Количество полей определяется количеством описаний. Для каждого поля таблицы существует одно и только одно описание. Блок описания одного поля занимает ровно 32 байта.
|
n+1
|
Признак конца заголовочной части (0x0D)
|
n+2 to n+264
|
Область в 263 байта, которая содержит относительный путь к файлу контейнера базы данных (.dbc) связанному с данной таблицей. Если первый байт этой области 0x00, то данный файл не связан с контейнером базы данных. Поэтому сам файл контейнер базы данных всегда содержит в первом байте этой области 0x00.
|
Структура описания полей
Смещение в байтах
|
Описание
|
0 – 10
|
Имя поля длиной не более 10 символов. Если количество символов в имени поля меньше 10, то недостающее количество символов дополняется значением null (0x00).
|
11
|
Тип поля:
W - Blob
C – Character
C – Character (binary)
Y – Currency
B – Double
D – Date
T – DateTime
F – Float
G – General
I – Integer
L – Logical
M – Memo
M – Memo (binary)
N – Numeric
P – Picture - оставлено для совместимости с FoxPro 2.x
Q - Varbinary
V - Varchar
V - Varchar (binary)
Замечание |
---|
Для каждого поля типа Varchar или Varbinary, один бит или бит "переменной длины" переносится в последнее системное поле с именем _NullFlags, которое является скрытым полем и хранит статус значения null для всех полей, которые могут принимать значение null. Если поле типа Varchar или Varbinary также может принимать значение null, то бит статуса null следует за битом "переменной длины". Если бит "переменной длины" принимает значение 1, то это значит, что длина текущего значения в поле записана в последнем байте, выделенном под значение поля. В противном случае, если данный бит принимает значение 0, то длина текущего значения равна длине поля.
|
|
12 – 15
|
Смещение поля в записи
|
16
|
Длина поля (в байтах)
|
17
|
Количество знаков в дробной части
|
18
|
Флаги поля:
0x01 Системное поле (не видимое для пользователя)
0x02 Поле может принимать значение null
0x04 Информация в поле записана в двоичном виде или поле имеет свойство Binary (только для полей типа Character и Memo)
0x06 (0x02+0x04) Когда поле может принимать и значение NULL, и информация в поле записана в двоичном виде или поле имеет свойство binary (Integer, Currency, и Character/Memo поля)
0x0C Поле имеет свойство автоинкремента
|
19 - 22
|
Значение для автоинкрементного поля. Следующее значение, которое будет присвоено в новой записи
|
23
|
Значение для автоинкрементного поля. Шаг приращения значения
|
24 – 31
|
Зарезервировано
|
Подробнее об ограничениях на количество символов в записи, максимальном числе полей и прочих ограничениях, смотрите Системные возможности Visual FoxPro.
Замечания
Смотрите также