Datenspeicherung

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 17. Juni 2013, 15:47 Uhr von Manfred (Diskussion | Beiträge) (→‎Historie)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Historie

dBase trat mit einem erstaunlichen, heute immer noch aktuell anmutenden Konzept an: die Datei enthält sowohl die Beschreibung der Daten, als auch die Daten selbst.

Im Vergleich dazu musste bei einer reinen Text-Datei immer eine zusätzliche Beschreibung mitgeliefert werden.

Dieses Konzept wird - mit vielen Verfeinerungen - auch heute noch verwendet.

Im Markt etablierte sich auch FoxBase, das später in Visual FoxPro überging und heute von Microsoft vertrieben wird.

FoxBase und seine nachfolgenden Generationen brachten neue Ideen in den Markt, die dazu führten, dass der rudimentäre dBase-Ansatz deutlich erweitert wurde.

Der Kopf einer dBase-Datei

Die Feld-Typen einer dBase-Datei

Die klassischen Feld-Typen einer dBase-Datei sind:

C - CHAR - Charakter, also Buchstaben, Zahlen und Sonderzeichen, max. 64 KB
D - DATE - Datum, Datumswerte die vom 1.1.1 bis 31.12.9999 reichen, immer 8 Byte
L - LOGICAL - logische Werte, die JA und NEIN widerspiegeln, immer 1 Byte
M - MEMO - spezielle Ausprägung des CHAR Feldes mit grösseren Feldlängen *)
N - NUMERIC - Ganz- oder Dezimalzahlen, maximal 19 Stellen, incl. Komma und Vorzeichen
*) in der dBase-Datei werden 10 Byte für einen Pointer in eine spezielle Memo-Datei verwendet

Bis auf MEMO sind die jeweiligen Felder implizit (DATE) oder explizit durch Definition in ihrer Länge festgelegt. Lediglich Memo-Felder weisen eine variable Länge auf.

Ein Memo-Feld in einer dBase-Datei kann ausschliesslich CHAR-Werte speichern. Das Speichern von binären Informationen kann zu ungewolltem Verhalten führen!

Durch FoxBase/Visual FoxPro sind weitere Feldtype hinzugekommen:

B - DOUBLE - wird auf N gemappt
F - FLOAT - wird auf N gemappt
G - GENERIC - wird auf M gemappt
I - LONG SIGNED INTEGER - wird auf N gemappt
T - TIMESTAMP - Zeitmarke, wird auf C gemappt, immer 8 Byte
Y - CURRENCY - wird auf N gemappt, immer 8 Byte
V - VARCHAR - Memo-Feld-Variante, wird auf M gemappt
O - VARBINARY - Memo-Feld-Variante, die binäre Werte akzeptiert, wird auf M gemappt
X - CHAR (binary) - wird auf C gemappt

Dass beim Mapping dieser Werte Genauigkeit und/oder Funktionalität verloren geht, ist leider so.

Daten werden immer (Ausnahme Memo-Felder) mit der definierten Grösse gespeichert, d.h. ein Datensatz in einer dBase-Datei hat immer die gleiche Länge.

Das eigentliche Memo-Feld in der Datei ist ein Pointer, der auf einen Eintrag in einer zweiten Datei verweist. Für dBase-Dateien trägt die Datei den gleichen Namen mit der Erweiterung DBT, bei FoxBase lautet die Erweiterung FPT.


Änderungen an der Struktur einer dBase-Datei

Es gibt keinen Mechanismus, der eine einfache Änderung der Struktur ermöglicht. Jede Änderung, ob es sich um den Wegfall eines Feldes, ein neues Feld oder eine Änderung in der Grösse eines Feldes handelt, muss durch den Programmierer umgesetzt werden:

Erstellen einer neuen Datei (unter anderem Namen)
Übernahme der Daten aus der ursprünglichen Datei
Löschen der ursprünglichen Datei (gegebenenfalls auch die Memo-Datei!)
Umbenennen der neuen Datei (gegebenenfalls auch die Memo-Datei!)