Thema: Delphi Arbeiten mit Records

Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Arbeiten mit Records

  Alt 5. Sep 2013, 07:36
Kleine Entwicklungsgeschichte von dBase...

Am Anfang gab es nur Records mit fester Satzlänge (in Pascal/Delphi als typisierte Datei bekannt).
Dann tauchte aber schon das erste Problem auf:
wie kann man einen Datensatz mitten in der Datei löschen ohne dass man unter Unständen viele Megabytes in der Datei verschieben muss?
Die Lösung ist, dass das 1 Byte im Record den Löschstatus angibt.
' ' bedeutet Datensatz gültig
'*' bedeutet Datensatz gelöscht bzw. als gelöscht markiert

Irgendwann muss man die als gelöscht markierten Datensätze wieder entfernen.
Daher braucht man ein Tool, dass die Recordlänge und die Datei kennt und dann nur die nicht-gelöschten Records in eine neue Datei kopiert.
Das Problem dabei ist falls die Recordlänge nicht stimmt ist das Ergebnis nur noch Datenmüll.

Der nächste Entwicklungsschritt war also dass die Datei einen Header bekommt in dem die Recordlänge vermerkt ist.
Im Header wird zusätzlich aber noch eine Feldliste geführt.
Für jedes Feld wird der Feldname (max 10 Zeichen), Feldlänge, Datentyp (C=Character, N=Numerisch, D=Datum, L=Logisch/Boolean) und ggf. Anzahl der Nachkommastellen gespeichert.
Im Header stehen noch weitere Infos wie z.B. die dBase-Version, Datum der letzten Änderung, Anzahl Datensätze, Zeichensatz, ...
http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm

Die Datenfelder werden aus der Software auch nicht mehr über ihre feste Position im Record sondern über ihren Feldnamen angesprochen.
Diese Technik war vor vielen Jahren revolutionär und hat dBase zur Erfolgsgeschichte gemacht.
Durch die Feldbeschreibung im Header konnte man z.B. neue Felder hinzufügen oder die Reihenfolge ändern ohne dass die Anwendungen damit ein Problem bekommen.

Das ist aber noch nicht alles.
Um Datensätze schnell aufzufinden wurde parallel zur dBase Datendatei noch eine oder mehrere Indexdateien geführt.
Ausserdem gab es noch eine weitere Datei in der Felder mit variabler Länge (Memo Felder) gespeichert wurden.

Was ich hier beschrieben habe ist Stand der Technik im Jahr 1985 und die war den alten typisierten Dateien weit überlegen.
fork me on Github
  Mit Zitat antworten Zitat