Recuperați dbf

IK> Este posibil să restaurați (dacă este posibil ca) un dbf un fișier?
IK> Fox spune că nu este o bază de date.

Cod de eroare 15, nu?
De obicei, acest lucru se întâmplă din cauza răsturnării antetului,






care se întâmplă uneori când computerul este repornit (manual sau întrerupe alimentarea)
în timpul lucrului activ cu baza de date.

Încă nu m-am deranjat să găsesc sau să scriu un utilitar cu care să lucrez
și folosesc următoarea tehnică:
(structura bazei de date deteriorate trebuie să fie exact cunoscută)

1. Se creează o bază de date cu exact aceeași structură ca cea deteriorată
2. Pentru aceasta, obținem antetul și dimensiunea înregistrărilor
3. Se taie un antet din fișierul deteriorat,
iar restul este tăiat în înregistrare (după fiecare înregistrare este adăugată
line feed - obțineți formatul SDF)
4. În baza de date nou creată, vom importa datele din SDF-ul primit
5. Verificăm vizual modul în care arată datele recuperate.
Dacă există gunoi (imediat vizibil pe date și linii)






- înseamnă că au făcut o greșeală cu structura.

Abordare, desigur inconfortabil (aveți nevoie pentru a stoca structuri de tabel)
și funcționează lent, dar ajută chiar și în cazul unei deprecieri complete
antet, de exemplu, ca urmare a deteriorării sectorului (desigur în
În acest din urmă caz, trebuie mai întâi să instalați scandisk sau NDD și,
desigur, înregistrările care se încadrează pe insigne vor fi în continuare pierdute, dar restul -
vor fi restaurate).

Iată programul:
badfile este numele fișierului corupt (împreună cu extensia ".dbf")
repb - numele bazei de date temporare (create)
strfile - numele mesei auxiliare, în care structura este prescrisă.

CREA (repetă) FROM (strfile)
hsize = HEADER () + 1
rsize = RECSIZE ()
tempf = '_ temp.sdf' numele temporar al fișierului
file1 = FOPEN (badfile) deschideți fișierul deteriorat
= FSEEK (fișierul 1, hsize) săriți antetul
fișier2 = FCREATE (tempf) creați un fișier temporar

FOF (fișierul 1)
C = FREAD (fișier1, rsize) citiți intrarea de la deteriorat
= FPUTS (fișier2, C) scrieți-l într-unul temporar, adăugând feedul de linie
ENDDO

= FCLOSE (fișier2)
= FCLOSE (fișier1)
SELE (reprob)
APROAPE DE LA (tempf) TYPE SDF

IK> Dos navitopop p.pomatpivaet în mod normal jumătate din formula

Nu am nimic de-a face cu DN, nu pot spune nimic.
Și dbview.exe în astfel de cazuri, de obicei, se uită în mod normal la baza de date.

IK> ceea ce acea parte dbf a intrat în sectorul rău







Articole similare

Trimiteți-le prietenilor: