Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > как узнать структуру dbf-таблицы?


Автор: Jafa 8.2.2010, 18:49
подключаюсь к dbf-таблице с помощью АДО и ODBC драйвера, могу ли я узнать структуру нужной мне таблицы (количество полей, имена полей, тип полей)? В каком направлении хоть капать (в свойствах драйвера или в функциях C++Builder)?

Автор: Voldemar2004 10.2.2010, 11:54
Цитата(Jafa @  8.2.2010,  19:49 Найти цитируемый пост)
подключаюсь к dbf-таблице с помощью АДО и ODBC драйвера, могу ли я узнать структуру нужной мне таблицы (количество полей, имена полей, тип полей)?


У этих объектов есть свойства - через них и узнавай количество полей, названия.

Цитата
СТРУКТУРА DBF-ФАЙЛОВ.

    1. Структура dbf-файла.
    
    В начале dbf-файла находится заголовок. В нём содержиться следующая информация:

    Байт 00 - всегда значение 03.

    Байт 01 - год последней модификации файла; если 2010, то в байте сохраняется 10.
        
    Байт 02 - месяц последней модификации файла.
    
    Байт 03 - день последней модификации файла.

    Байты 04-07 - количество записей в файле.
      
    Байты 08-09 - длина заголовка, т.е. смещение относительно начала файла, с которого начинается непосредственно содержание записей.
      
    Байты 09-10 - длина одной записи.
    
    Начиная с байта 32 храниться информация о полях. Информация об одном
поле занимает 32 байта и содержит:

    Байты 00-09 - имя поля.

    Байт 10 - всегда значение 00.

    Байт 11 - тип поля; "С" - character, "N" - numeric, "F" - float,
    "D" - date, "L" - logical, "M" - memo, "G" - general,
    "P" - picture.

    Байт 12-15 - смещение относительно начала записи, с которого
     начинается содержимое поля.

    Байт 16 - длина поля; для полей типа N и F длина включает и десятичную
    точку.

    Байт 17 - для полей типа N и F количество знаков после десятичной
    точки.

    После заголовка находится байт со значением 0Dh - это метка конца 
заголовка. В начале каждой записи находится байт-метка. Если в нём записан
символ "*" (2Ah), то запись помечена на удаление. Иначе в этом байте
записан пробел (20h). Байт 1Ah - метка конца файла. Если в файле нет ни
одной записи, метка конца файла не ставится.
    В полях типа C, N, F, D, L вся информация храниться в символьном виде.
В полях типа N и F символьная строка сдвинута в конец поля. В полях С
строка начинается прямо с начала поля.
    В полях D сначала записан год (4 символа), затем месяц (2 символа)
и число (2 символа). Длина поля D всегда 8 символов (байт).
    Длина поля L всегда 1 символ (байт) и содержит либо "F"- ложь, либо
"T" - истина.
    Поле "M" содержит номер кластера в файле с расширением .fpt, в котором
храниться информация поля. Номер кластера записан в виде символьной строки,
сдвинутой в конец поля. Длина поля "M" всегда 10 байт.



Цитата(Jafa @  8.2.2010,  19:49 Найти цитируемый пост)
хоть капать

кОпать

Сам же ответил на вопрос:
Цитата(Jafa @  8.2.2010,  19:49 Найти цитируемый пост)
в функциях C++Builder)?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)