Avatar billede mjiw Nybegynder
18. november 2003 - 12:58 Der er 8 kommentarer og
1 løsning

dBase intern filstruktur

hvordan hænger recordene i dbf-filen sammen med dbt (memo-filen) er det et indeks eller et recordnr eller ????
Avatar billede mjiw Nybegynder
18. november 2003 - 12:59 #1
jeg har en dbf-fil, der er smadret, men dbt-filen indeholder en masse memo-tekst-data, som jeg gerne vil have fat i !
18. november 2003 - 13:22 #2
Der findes et værktøj, der kan lave en recovery fra smadrede dBase-filer.
http://www.abri.com/recover.html
Avatar billede mjiw Nybegynder
18. november 2003 - 13:40 #3
tak for linket...
det ser ud til, at man skal have FoxPro installeret - det har jeg ikke...

desuden er min situation den, at den smadrede dbf-fil er blevet overskrevet af et excel-program,
således, at de fleste oprindelige felter ikke længere findes,
derfor har jeg "retableret" dbf-filen med en oprindelig TOM dbf-fil og har nu en "fyldt" dbt-fil -
min plan var så, at oprette record i den tomme dbf-fil,
idet håb om, at kunne få fat i memo-felt-indholdet fra dbt - MEN DET KAN JEG IKKE !!!
Avatar billede arne_v Ekspert
18. november 2003 - 20:53 #4
Formatet af DBF og DBT er velkendt.

I DBF gemmes blok nummeret i DBT for memo felter. DBT indeholder
så data. Der er både en header for hele DBT filen og en header for hver memo
blok.
Avatar billede arne_v Ekspert
18. november 2003 - 20:54 #5
Det kan godt kodes fra bunden af i C, men det vil nok tage nogen
timer at få det til at virke.

Jeg har nogen struct definitioner liggende.
Avatar billede mjiw Nybegynder
20. november 2003 - 11:57 #6
arne_v >>>

er blok nummer det samme som record nummer ?

hvis ja, så vil jeg være interesseret i struct definitioner -
evt. sendt via e-mail: mjiw@seher.dk ?
Avatar billede arne_v Ekspert
21. november 2003 - 21:28 #7
// type constants
const int DBF_no_memo = '\x03';
const int DBF_III_memo = '\x83';
const int DBF_IV_memo = '\x8B';
const int DBF_FoxPro_memo = '\xF5';

// data type constants
const int DBF_Character = 'C';
const int DBF_Number = 'N';
const int DBF_Logical = 'L';
const int DBF_Memo = 'M';
const int DBF_General = 'G';
const int DBF_Date = 'D';
const int DBF_Float = 'F';
const int DBF_Picture = 'P';

// record status
const int DBF_valid = ' ';
const int DBF_deleted = '*';

// DBF table header
struct DBF_TableHeader {
                      UCHAR Type;                  // database type
                      UCHAR LastUpdate[3];        // format YYMMDD
                      long int NoRecords;          // #
                      short int HeaderSize;        // bytes in table header + field headers
                      short int RecordSize;        // bytes in record
                      char fill1[2];
                      UCHAR IncompleteTransaction; // flag 1=TRUE 0=FALSE
                      UCHAR Encrypted;            // flag 1=TRUE 0=FALSE
                      char fill2[12];
                      UCHAR ProductionFile;        // flag 1=TRUE 0=FALSE
                      char fill3[3];
                      };

// DBF field header
struct DBF_FieldHeader {
                      char FieldName[11];          // zero-filled
                      char DataType;              // ASCII
                      long int Displacement;      // byte offset in record
                      UCHAR FieldLength;          // bytes in field
                      UCHAR NoDecimals;            // #
                      char fill1[2];
                      UCHAR WorkAreaID;            // ?
                      char fill2[10];
                      UCHAR ProductionFile;        // flag 1=TRUE 0=FALSE
                      };

// DBF memo header
struct DBF_MemoHeader {
                      long int NextFreeBlock;      // #
                      char fill1[4];
                      char Name[9];                // database name
                      char fill2[4];
                      short int BlockSize;          // bytes
                      };

// DBF memo value header
struct DBF_MemoValueHeader {
                          short int ID;
                          short int OffsetData;
                          long int RecLength;
                          };
Avatar billede mjiw Nybegynder
22. november 2003 - 19:17 #8
arne_v >>>
tak for specifikationerne...
send et svar ...
Avatar billede arne_v Ekspert
22. november 2003 - 19:40 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester