| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Прямой доступ к DBF |
| Автор: Thunder2 13.9.2005, 22:12 |
| Есть исходник компонент который ломиться на прямую к таблица DBF. Все хорошо , но ... кодировка ! Стал разбирать в исходнике и иот наткнулся на такую штуку: Имеем определение типа данных "Запись" следующего вида TdbfField = record FieldName :array[1..11] of char; { Name of this record } FieldType :char; { type of record - C,N,D,L,etc. } fld_addr :longint; { not used } Width :byte; { total field width of this record } Decimals :byte; { number of digits to right of decimal } MultiUser :smallint; { reserved for multi user } WorkAreaID :byte; { Work area ID } MUser :smallint; { reserved for multi_user } SetFields :byte; { SET_FIELDS flag } Reserved :array[1..4] of byte; { 8 bytes reserved } end; { record starts } {оригинальный кусок из исходника} Казалось бы все просто, но ... далее следует объявление переменной: var Fld: TdbfField; Тоже ничего особенного. Но вот непонятная для меня вещь: выражение SizeOf(Fld) дает значение 32 байта, а выражение SizeOf(Fld.FieldName)+SizeOf(Fld.FieldType)+SizeOf(Fld.fld_addr)+SizeOf(Fld.Width) +SizeOf(Fld.Decimals)+SizeOf(Fld.MultiUser)++SizeOf(Fld.WorkAreaID)+SizeOf(Fld.MUser) +SizeOf(Fld.SetFields)+SizeOf(Fld.Reserved) дает значение 28. Тот же результат можно получить просуммировав размеры значений полей записи: 11+1+4+1+1+2+1+2+1+4. Как ни странно компонент работает из этого исходника на "живой" форме. Ошибок при работе не возникает, но ,еще раз повторюсь, DBF файл из VFP 5.0 отображает (как я понял) по DOS-кодировке. |
| Автор: bas 14.9.2005, 15:39 |
| 18-32 - зарезервированные байты и в основном не используються. |
| Автор: p0s0l 14.9.2005, 17:12 | ||
(28 - это сумма размеров полей, но где-то между некоторыми полями есть промежуток, поэтому размер структуры например не 28, а 29)... |