DBF´s reparieren leicht gemacht

Transcription

DBF´s reparieren leicht gemacht
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Das Schwaben-Team
Wer sind wir:
- Wolfgang Pasler - Pasler Software
Programmiersprachen:
- C / C++ seit 1988
- Clipper seit 1989
- Visual-FoxPro 3.0 - 8.0 seit 1996
Spezialgebiete:
- Objektorientierung und Business Objekte
- Kaufmännische Anwendungen
- über 14 Jahre Erfahrung in der Entwicklung kaufmännischer Anwendungen für die
Schmuckindustrie
- Seit 1 Jahr Linux im Einsatz von heterogenen Netzwerken.
- Hans-Peter Grözinger - Ingenieurbüro Grözinger
Programmiersprachen:
- dBase III / IV / 5.0 seit 1987
- FoxPro 2.6 seit 1994
- Visual-FoxPro 3.0 - 8.0 seit 1996
- MS-C/C++ 7.0 seit 1990
- Visual C/C++ 5.0/6.0 seit 1996
Spezialgebiete:
- C/C++ und VFP im technischen Umfeld
- Datenkonvertierung
Beide treiben sich regelmäßig im dFPUG und MS-Foxpro-Forum herum.
Seite 1/8
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 2/8
DBF-Struktur
Folgende Informationen wurden der VFP7 und VFP8-Hilfe entnommen und zum Teil ergänzt:
Struktur des Vorspanndatensatzes einer Tabelle
Versatz in Bytes Beschreibung
Dateityp für dBASE IV
Bit
0 - 2: Versionsnummer
3:
Memodatei vorhanden
4 - 6: SQL-Tabelle vorhanden
7:
DBT-Flag
Dateityp für Visual Foxpro
Bit
0 - 1: Versionsnummer
2:
Memodatei vorhanden
4:
Datenbank-Container vorhanden
7:
DBC (mit MEMO und Indexdateien)
0x02 FoxBASE/dBASE II
0x03 FoxBASE+/dBASE III PLUS, kein Memo
0x04 dBASE IV ohne Memo
0x05 dBASE V ohne Memo
0x30 Visual FoxPro
0x31 Visual FoxPro, autoinkrement aktiviert (VFP 8.0)
0x43 dBASE IV SQL-Tabellendateien, kein Memo
0x63 dBASE IV SQL-Systemdateien, kein Memo
0x83 FoxBASE+/dBASE III PLUS, mit Memo
0x8B dBASE IV mit Memo
0x8E dBASE IV mit SQL-Tabelle
0xCB dBASE IV SQL-Tabellendateien, mit Memo
0xF5 FoxPro 2.x (oder früher) mit Memo
0xFB FoxBASE
1–3
Letzte Aktualisierung (JJMMTT)
4–7
Anzahl der Datensätze in der Datei
8–9
Position des ersten Daten-Datensatzes (hiermit kann man die Anzahl der Felder bestimmen)
10 – 11
Länge eines Daten-Datensatzes (einschließlich Löschattribut)
12 – 27
Reserviert.
Tabellenattribute
0x01 Datei hat eine strukturierte CDX
0x02 Datei hat ein Memofeld
28
0x04 Datei ist eine Datenbank (DBC)
Beachten Sie, dass dieses Byte eine Summe aus oben genannten Werten enthalten kann. 0x03
gibt z. B. an, dass die Datei eine strukturierte .CDX-Datei und ein Memofeld hat.
29
Code-Seitenmarkierung (siehe Programm CPZERO.PRG)
30 – 31
Reserviert, enthält 0x00
Feld-Teildatensätze
32 - n
Die Anzahl der Felder legt die Anzahl an Feld-Teildatensätzen fest. Für jedes Feld der Tabelle
gibt es einen Feld-Teildatensatz.
N+1
Vorspanndatensatz-Endzeichen (0x0D)
Ein 263 Bytes umfassender Bereich, der die Rückverweisinformationen, also den relativen Pfad
zur zugehörigen Datenbank (.DBC), enthält. Ist das erste Byte 0x00, ist die Tabelle nicht mit
N+2 to n+264
einer Datenbank verbunden. Datenbankdateien weisen an dieser Position deshalb immer den
Wert 0x00 auf.
1
Die Daten in der Datendatei beginnen an der Position, die durch die Bytes 8 bis 9 des Vorspanndatensatzes
angegeben ist. Daten-Datensätze beginnen mit einem Byte, das das Löschattribut setzt. Ist dieses Byte der ASCIIWert für Leerzeichen (0x20), wird der Datensatz nicht gelöscht. Ist das erste Byte ein Sternchen (0x2A), wird der
0
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 3/8
Datensatz gelöscht. Die Daten der Felder, die in den Feld-Teildatensätzen genannt sind, folgen auf das
Löschattribut.
Struktur der Feld-Teildatensätze
Versatz in Bytes Beschreibung
Feldname (maximal 10 Zeichen, bei weniger als 10 Zeichen wird der Name mit Nullzeichen
0 – 10
(0x00) aufgefüllt)
Feldtyp:
C – Zeichen
Y – Währung
N – Numerisch
F – Gleitkomma
D – Datum
T – DatumZeit
11
B – Double
I – Integer
L – Logisch
M – Memo
G – Objekt
C – Zeichen (binär)
M – Memo (binär)
P – Bild
12 – 15
Adressenversatz des Feldes im Datensatz
16
Feldlänge (in Bytes)
17
Anzahl der Dezimalstellen
Feldattribute
0x01 Systemspalte (für Benutzer nicht sichtbar)
0x02 Spalte kann Nullwerte enthalten
18
0x04 Binärspalte (nur für CHAR und MEMO)
0x06 (0x02+0x04) Wenn ein Feld NULL und binär ist (Integer, Währung und Zeichen/MemoFelder) (VFP 8.0)
0x0C Spalte ist autoinkrementierend (VFP 8.0)
19 - 22
Wert des nächsten Autoinkrementwertes (VFP 8.0)
23
Stufenwert des Autoinkrementwertes (VFP 8.0)
24 – 32
Reserviert.
Weiter Info´s zur DBF-Struktur gibt´s hier:
http://www.klaban.torun.pl/prog/pg2xbase/contrib/dbf-format.html
http://www.e-bachmann.dk/docs/xbase.htm
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 4/8
Kurzübersicht der wichtigsten Elemente des DBF-Headers:
Erste "Zeile" (die ersten 32 Bytes)
0
1
♥
g ◙ ↑ ╠ ☺
Dateityp
2
3
4
Datum
5
6
7
8
Datensätze
9
10
11
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
A ☺ F
☺☼
Offset Satzlänge
Att CP
Feldbeschreibungszeile
0
1
2
3
4
5
6
7
8
C
N
R
B
I
G
B
A
G
Feldname
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
C
Typ
ü
-
;
Feldoffset
●
Len Dec Att
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 5/8
FOXFIX
Info zu Foxfix gibt´s hier: http://www.xitech-europe.co.uk/
FoxFix erlaubt das Wiederherstellen von beschädigten Datenbanken. Dies kann für den
Anwender völlig transparent erfolgen. Man kann die Fix-Funktionen in seinen Error-Handler
einbinden und somit sofort beim Auftreten eines Fehlers die Datenbank korrigieren lassen.
FoxFix ist die einzige Möglichkeit, eine Datenrettungs-Engine ohne weitere Kosten in die eigene
Applikation einzubinden und weiterzugeben!
FoxFix kann sowohl einfache Dateifehler beheben, als auch komplett gelöschte Dateien an
Hand der Indexdatei wiederherstellen. Bei der Rekonstruktion aus Indexdateien werden alle
Felder rekonstruiert, auf denen zum Zeitpunkt des Fehlers ein Index lag. Berücksichtigt werden
auch gelöschte Indizes, die nur über ein REINDEX versteckt wurden.
Vor allem für Programmierer gibt es noch einige nützliche Funktionen. So kann FoxFix aus
einem SPR wieder eine Maskendatei (SCX) erstellen, die dann in gewohnter Art und Weise mit
MODIFY SCREEN... bearbeitet werden kann. Das Selbe funktioniert natürlich auch mit
Menüdateien.
Weiters kann aus einer Applikation (APP) wieder ein Projekt regeneriert werden. Dabei wird die
komplette PJX- Datei mit allen Pfaden, usw. wieder erstellt. FoxFix kann jedoch keinen Source Code aus APP - Files erstellen. Dies erledigt das Tool "ReFox" vom gleichen Hersteller.
FoxFix - Funktionsumfang:
SPR to SCX
Masken aus Source- Codes erstellen
MPR to MNX
Menüs aus Source- Codes erstellen
APP to PJX
Projekte aus Applikationen erstellen
CDX to DBF
Datenbanken aus Indizes wiedererstellen
CDX to PRG
Erstellt den Source- Code zum Indizieren einer Datei unter Verwendung der
momentanen Indizes
DBF - Repair
Repariert unlesbare Datenbanken
Feststellung von Header-Korruption in der CDX Indexdatei.
Eine DLL, in welche die Aufspürung von Headern in der Runtime eingeschlossen werden kann.
Diese DLL hat auch einen "Tarnkappenmodus"; das bedeutet, dass FoxFix automatisch auf
jeder offenen Tabelle angewendet werden kann, ohne dass hierzu ein kodierter Funktionsaufruf
nötig wird.
Live-Demo
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 6/8
DBF´s mittels Binär/Hexeditor bearbeiten/reparieren
Der Editor TSE Pro v4.0 von http://www.semware.com/ bietet die für eine Reparatur von DBFDateien folgende spezielle Optionen:
- Binär-Modus
- Hex-Ansicht
- DBF-Makro
Live-Demo:
-
Reparatur von defekten Header (Binärmodus) aus einer Sicherung - REPOS
Reparatur von Datenfehlern (DBF-Makro) mit Daten aus einer Sicherung - WARENBGSCHEIN
Anzahl der Datensätze im Kopf korrigieren (DBF-Makro) - RECHTE
Spaltenweise Reparatur (Stichwort lange Feldnamen) - REKOPF - Feld Lieferstatus
Kleine nützliche Tools:
- dBStruct (Struktur von DBF´s anzeigen)
- dBSplit (DBF´s in kleine Stückchen teilen).
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 7/8
Weitere Möglichkeiten:
- Eingebaute Reparaturmöglichkeiten von VFP 7/8 (Checken beim Öffnen)
Einfach in der VFP-Hilfe mal über SET TABLEVALIDATE TO (0 - 3) nachlesen.
Verweiß auf Reparaturtools (alle von mir ungeprüft, gibt´s zum Runterladen von ):
- FoxWiki:
http://fox.wikis.com/wc.dll?Wiki~TableCorruptionRepairTools~VFP
- Freeware:
- ATFixDbfFpt
- Dbfix
- CMrepair
http://www.cmstory.com/_cm/CMrepair.zip
- Kommerziell:
- StoneField
http://www.stonefield.com/sdt.html
- FoxFix
http://www.xitech-europe.co.uk/
- dSalvage
http://www.dsalvage.com/
- RECOVER 4.0
http://www.abri.com/recover.html
Verweiß auf Freeware-Tools zum Anzeigen von Tabellen:
- DBFView 2.03
http://www.dbfview.com/
- HiBase 2000 v1.36
http://hibase.virtualave.net/
- DBF Viewer 2000 1.89 http://www.dbf2002.com/
- VFPView 3.2
http://milan.jikos.cz/main.html
- DBFRead 1.23
http://www.alxsoft.narod.ru/
- DBFNavigator 2.01
http://www.alxsoft.narod.ru/
- DBF-Editor 1.20
http://www.dbf-editor.com/
- dbEdit 3.4
http://www.arachnoid.com/dbedit/
- DBView
Zusatztool für den Total-Commander
- CDBFVIEW 1.10
Plugin für den Total-Commander
DBF´s reparieren leicht gemacht
von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam)
Stand 12.01.04
Seite 8/8
Zusammenfassung
Es ist gar nicht so schwer, defekte DBF-Tabellen zu reparieren, wenn man:
- eine Sicherung hat
- das richtige Werkzeug
- mit kurzen Feldnamen (maximal 10 Zeichen) tut man sich wesentlich leichter.
- nichts ist unmöglich
- schwieriger wird´s mit DBT/FPT-Tabellen
Wie immer gibt´s das Ganze von:
http://www.schwaben-team.de/downloads/dfpug/dbfrepair/dbfrepair.zip