DBF
Файл базы данных состоит из записи заголовка и записей с данными. В записи заголовка определяется структура базы данных и содержится вся другая информация, относящаяся к базе данных. В файле она начинается с нулевой позиции.
Записи с данными (*) следуют за заголовком (байты располагаются последовательно) и включают в себя фактическое содержимое полей. Длина записи (в байтах) определяется суммированием указанных длин всех полей. Числа в данном файле размещаются в обратном порядке.
struct Header { char id; // Типы файлов с данными // FoxBASE+/dBASE III +, без memo - 0х03 // FoxBASE+/dBASE III +, с memo - 0х83 // FoxPro/dBASE IV, без memo - 0х03 // FoxPro с memo - 0хF5 // dBASE IV с memo - 0x8B char modifed[3]; // Последнее изменение (ГГММДД) long records; // Число записей в файле int fdata; // Положение первой записи с данными int ldata; // Длина одной записи с данными (включая признак удаления) char reserved[16]; // Зарезервированы char cdxfile; // 1-есть структ.составной инд.файл (типа .CDX),0-нет char reserved1[3]; // Зарезервированы char field[32]; // Подзаписи полей (см. ниже) (**) .... char field[32]; // Подзаписи полей char end; // Признак завершения записи заголовка (0х01) } struct field { // Подзаписи полей char name[10]; // Название поля (максимально - 10 символов, если // меньше 10, то дополняется пустым символом (0х00)) char type; // Тип данных: // C - символьное; // N - числовое; // L - логическое; // M - типа memo; // D - дата; // F - с плавающей точкой; // P - шаблон. long where; // Расположение поля внутри записи char length; // Длина поля (в байтах) char reserved[15]; // Зарезервированы
Примечания по структуре файла с данными.
(*) Данные в файле с данными начинаются с позиции, указываемой в записи заголовка в байтах 08-09. Записи с данными начинаются с байта, содержащего признак удаления. Если в этот байт занесен пробел в коде ASCII (0х20), то запись не удалялась; если же в первом байте - звездочка (0х2A), то запись удалена. За признаком удаления следуют данные из полей, названия которых находятся в подзаписях полей.
(**) Количество полей определяет число подзаписей полей. В базе данных для каждого поля существует одна подзапись поля.
(***) Ограничения по количеству знаков в записи, максимальному числу полей и т.д. смотрите в данном приложении в таблице "Системные возможности".
Системные возможности
FoxPro | Усоверш. FoxPro | |
---|---|---|
Максимальное число записей в файле базы данных | 1 миллиард (*) | 1 миллирд (*) |
Максимальное число символов в записи | 4000 | 4000 |
Максимальное число полей в записи | 255 | 255 |
Максимальное число одновременно открытых баз данных | 25 | 25 |
Максимальное число символов в поле базы данных | 254 | 254 |
Максимальное число символов в индексном ключе (.IDX) | 100 | 100 |
Максимальное число символов в индексном ключе (.CDX) | 254 | 254 |
Максимальное число открытых индексных файлов в базе данных | без ограничения (**) | без ограничения (**) |
Максимальное число открытых индексов во всех рабочих областях | без ограничения (**) | без ограничения (**) |
Характеристики полей | ||
Максимальный размер символьных полей | 254 | 254 |
Максимальный размер числовых (и с плавающей точкой) полей | 20 | 20 |
Максимальное число символов в названиях полей | 10 | 10 |
Точность цифр при числовых вычислениях | 16 | 16 |
Оставить комментарий
Комментарии
Т.е., должно быть:
"char name[11]; // Название поля ..."
Поскольку вместо признака завершения может появиться первый символ названия следующего поля, который обязан быть латинской буквой, признаком завершения на самом деле может быть любой символ больше 0x0 и меньше 0x41 ('A').