Проблема с DBF

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Проблема с DBF

Сообщение DarkAngel27 »

В отчёте создаётся DBF файлик для импорта в другую БД.
Данный файл не соответствует требованиям к структуре DBF. Всеми современными программами видится нормально, но dos выдаёт ошибку в структуре файла.
Попробовал создать в dos таблицу с таким же заголовком, в результате разница в заголовках между DOS и Галактической DBF составила 1 байт. Может быть кто-то знает в чём дело?
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Если можно, то поясните данный код. Я что то не понял.
Последний раз редактировалось DarkAngel27 10 июн 2005, 15:18, всего редактировалось 1 раз.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Код: Выделить всё

          PDBFHeader = ^TDBFHeader;
          TDBFHeader = object(TObject)
              Sign: Byte;                 { FoxBASE+/dBASE III +, без memo - 03H
                                            FoxBASE+/dBASE III +, с memo - 83H
                                            FoxPro/dBASE IV, без memo - 03H
                                            FoxPro с memo - F5H
                                            dBASE IV с memo - 8BH }
              YY: Byte;
              MM: Byte;
              DD: Byte;                   { Дата последнего обновления : ГГММДД }
              NRec: LongInt;              { Число записей в файле }
              HSize: Word;                { Число байт в заголовке }
              RecSize: Word;              { Число байт в записи }
              Reserved: Array[0..16] of Byte;
              KeepMemoFieldSize : boolean; { Сохранять размер мемо-поля }
              FieldNameSize : smallint;
            constructor Init(iSign, iYY, iMM, iDD : byte;
                             iNRec : LongInt; iHSize, iRecSize : Word);
          end;

...

Procedure TDBFFile.CreateHeader;
var
  YY: Word;
  MM: Word;
  DD: Word;
  DW: Word;
  b : byte;
begin
  GetDate(YY,MM,DD,DW);
  Header := New(PDbfHeader,Init($03,Byte(YY-1900),MM,DD,0,StdHSize,1));
  Stream^.Write(Header^.Sign, 1); {Запишем HEADER в файл}
  Stream^.Write(Header^.YY, 1);
  Stream^.Write(Header^.MM, 1);
  Stream^.Write(Header^.DD, 1);
  Stream^.Write(Header^.NRec, SizeOf(LongInt));
  Stream^.Write(Header^.HSize, SizeOf(Word) );
  Stream^.Write(Header^.RecSize, SizeOf(Word) );
  PutEmptyPortionToStream(Stream, StdHSize - 1, false);
  b := $0D; {Символ конца заголовка}
  Stream^.Write(b, 1);
  MakeEndOfDBFFile;
end;  {end of Procedure TDBFFile.CreateHeader}

...

gloomy
Посетитель
Сообщения: 39
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Архангельская область ООО "Фалькон плюс"
Контактная информация:

Сообщение gloomy »

Для работы с DBF-файлами я использовал стандартные функции ПК "Галактика":
function DBFOpen (name : string, mode : integer) : longInt;
procedure DBFClose (handle : longInt);
function DBFAddField (handle : longInt;
fName : string;
cField, lField, quant : integer
) : integer;
function DBFPutFieldValue (handle : longInt;
fName, str : string
) : integer;
и т. д.
Они не помогут сформировать DBF-файл ?
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Файлы создаются нормально, но не корректно...
Вопрос ещё один созрел: в каком формате DOS видит поле типа DATE?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

yyyymmdd кажись
по f3 открываешь файл и усе смотришь
Ответить