Table file structure (

Для кожного поля типу Varchar або Varbinary. один біт або біт "змінної довжини" переноситься останнім системне поле з ім'ям _NullFlags, яке є прихованим полем і зберігає статус значення null для всіх полів, які можуть приймати значення null. Якщо поле типу Varchar або Varbinary також може приймати значення null, то біт статусу null слід за бітом "змінної довжини". Якщо біт "змінної довжини" приймає значення 1, то це означає, що довжина поточного значення в поле записана в останньому байті, виділеній під значення поля. В іншому випадку, якщо даний біт приймає значення 0, то довжина поточного значення дорівнює довжині поля.

0x01 Системне поле (не бачимо для користувача)

0x02 Поле може приймати значення null

0x04 Інформація в поле записана в двійковому вигляді або поле має властивість Binary (тільки для полів типу Character і Memo)

0x06 (0x02 + 0x04) Коли поле може приймати і значення NULL, і інформація в поле записана в двійковому вигляді або поле має властивість binary (Integer, Currency, і Character / Memo поля)

0x0C Поле має властивість автоінкремента

Якщо Ви відкрили в Visual FoxPro табличний файл, створений в ранній версії FoxPro або ж створений в іншій системі, то Visual FoxPro не змінює заголовок таблиці, до тих пір, доки Ви не внесете такі зміни в структуру таблиці, які не підтримуються у відповідній версії табличного файлу.

Наприклад, у версії FoxPro 2. x не існувало таких типів даних як Integer або Currency, не було підтримки значень типу Null, не було властивості Binary для символьних полів, не було поняття "контейнер бази даних" (.dbc). Отже, як тільки Ви зміните структуру таблиці, створеної в версії FoxPro 2. x таким чином, що введете дані, не існує у цій версії, то таблиця перестане відповідати своїм форматом. У цьому випадку якраз і станеться зміна як версії файлу DBF, так і структури заголовка таблиці.

Ви можете використати таку формулу для підрахунку кількості полів в таблиці:

x - це позиція початку області даних (вміст з 8 по 9 байтів заголовка таблиці)
296 - це 263 (інформація про зв'язок з контейнером бази даних) + 1 (ознака завершення заголовка таблиці) + 32 (заголовна частина до початку опису першого поля таблиці)
32 - це довжина одного блоку опису поля таблиці.