В отчёте создаётся DBF файлик для импорта в другую БД.
Данный файл не соответствует требованиям к структуре DBF. Всеми современными программами видится нормально, но dos выдаёт ошибку в структуре файла.
Попробовал создать в dos таблицу с таким же заголовком, в результате разница в заголовках между DOS и Галактической DBF составила 1 байт. Может быть кто-то знает в чём дело?
Проблема с DBF
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Если можно, то поясните данный код. Я что то не понял.
Последний раз редактировалось DarkAngel27 10 июн 2005, 15:18, всего редактировалось 1 раз.
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Код: Выделить всё
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}
...
-
- Посетитель
- Сообщения: 39
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Архангельская область ООО "Фалькон плюс"
- Контактная информация:
Для работы с 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-файл ?
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-файл ?
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация: