DBF´S Reparieren Leicht Gemacht Von Wolfgang Pasler Und Hans-Peter Grözinger (Das Schwabenteam) Stand 12.01.04Seite 1/8
Total Page:16
File Type:pdf, Size:1020Kb
DBF´s reparieren leicht gemacht von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam) Stand 12.01.04Seite 1/8 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. DBF´s reparieren leicht gemacht von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam) Stand 12.01.04Seite 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 BytesBeschreibung 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) 0 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 – 3Letzte Aktualisierung (JJMMTT) 4 – 7Anzahl der Datensätze in der Datei 8 – 9Position des ersten Daten-Datensatzes (hiermit kann man die Anzahl der Felder bestimmen) 10 – 11Länge eines Daten-Datensatzes (einschließlich Löschattribut) 12 – 27Reserviert. 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. 29Code-Seitenmarkierung (siehe Programm CPZERO.PRG) 30 – 31Reserviert, 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+1Vorspanndatensatz-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 ASCII- Wert für Leerzeichen (0x20), wird der Datensatz nicht gelöscht. Ist das erste Byte ein Sternchen (0x2A), wird der DBF´s reparieren leicht gemacht von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam) Stand 12.01.04Seite 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 BytesBeschreibung 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 – 15Adressenversatz des Feldes im Datensatz 16Feldlänge (in Bytes) 17Anzahl 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/Memo- Felder) (VFP 8.0) 0x0C Spalte ist autoinkrementierend (VFP 8.0) 19 - 22Wert des nächsten Autoinkrementwertes (VFP 8.0) 23Stufenwert des Autoinkrementwertes (VFP 8.0) 24 – 32Reserviert. 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.04Seite 4/8 Kurzübersicht der wichtigsten Elemente des DBF-Headers: Erste "Zeile" (die ersten 32 Bytes) 012345678910111213141516171819202122232425262728293031 © g ◙ • ╠ ☺ A ☺ F ☺ ☼ DateitypDatumDatensätzeOffsetSatzlängeAttCP Feldbeschreibungszeile 012345678910111213141516171819202122232425262728293031 CNRBIGBAGCü-; ● FeldnameTypFeldoffsetLenDecAtt DBF´s reparieren leicht gemacht von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam) Stand 12.01.04Seite 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.04Seite 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 DBF- Dateien 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.04Seite 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/ -DBViewZusatztool für den Total-Commander -CDBFVIEW 1.10Plugin für den Total-Commander DBF´s reparieren leicht gemacht von Wolfgang Pasler und Hans-Peter Grözinger (das Schwabenteam) Stand 12.01.04Seite 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.