Tabellenstrukturen in einer Verwaltungstabelle ablegen

Der folgende Beitrag dient dazu Informationen über die diversen Felder in den Tabellen Ihrer Datenbank in einer Verwaltungstabelle abzuspeichern, um einerseits Informationen zu haben, welche Felder es gibt, andererseits um festzustellen, welche durch das Programm erzeugt worden sind und welche benutzerspezifisch sind.

Natürlich haben die meisten Datenbanken Ihr eigenes Dictionary, aber diese enthalten  immer alle Informationen über Felder / Indizes – egal, ob die Felder von Ihnen bzw.  dem Programm oder dem Anwender hinzugefügt worden sind.

Um diesen Problem in den Griff zu bekommen, lohnt sich die Anlage einer eigenen Tabelle  ‚Verwaltung‘, die wie folgt aufgebaut ist:

Tabelle: String, 80
Feldname: String, 80
Feldtyp: String, 20
Feldlaenge: Integer

Dies kann natürlich an Ihre Gegebenheiten angepasst oder erweitert werden,  je nachdem welche Infos Sie aufnehmen möchten.

Nachdem die Tabellen Ihrer Datenbank angelegt sind, führen Sie folgenden Code aus.  Dieser Code (Basis, aber ausbaufähig) prüft, ob schon Informationen in ‚Verwaltung‘ abgelegt sind. Wenn nicht, so wird die Datenbank (hier eine Nexus-DB) gescannt und alle Informationen über Tabellen + Felder der Verwaltungstabelle hinzugefügt:

procedure Checkverwaltung;
var mytable:TnxTable; tableList:TStringlist; i,x:Integer;
_datasize: Integer;
begin

tableVerwaltung.open; // unsere Verwaltungstabelle
tableverwaltung.First;
if tableverwaltung.eof then  // noch keine Tabelleninformationen vorhanden, also scannen + einlesen
begin
tableList:=TStringlist.create;   // speichert die Tabellennamen
DatabaseVeox.GetTableNames( TableList );
// Nexus-spezifisch, prüfen Sie bei Ihrer DB, wie Sie eine Liste aller
// enthaltenen Tabellen erhalten;

for i := 0 to TableList.Count – 1 do
begin
mytable:=TnxTable.Create(nil);           // Tabelle dynamisch erzeugen
mytable.TableName:=tableList.Strings[i];
mytable.Database:=DatabaseVeox;
mytable.name:=tableList.Strings[i];
mytable.Open;
for x := 0 to mytable.FieldCount – 1 do
begin
tableVerwaltung.Insert;
tableVerwaltung.FieldByName(‚tabelle‘).AsString:=mytable.Name;
tableVerwaltung.FieldByName(‚Feldname‘).AsString:=mytable.Fields[x].FieldName;
case mytable.Fields[x].DataType of
ftGuid: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Guid‘;
ftAutoInc: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Autoinc‘;
ftDate: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Date‘;
ftDateTime: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Datetime‘;
ftFloat: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Float‘;
ftInteger: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Integer‘;
ftMemo: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Memo‘;
ftString: tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’String‘;
// weitere Feldtypen fall nötig hinzufügen
else
tableVerwaltung.FieldByName(‚Feldtyp‘).AsString:=’Unknown‘;
end;
_datasize:=mytable.Fields[x].DataSize;
if mytable.Fields[x].DataType=ftString then
Dec(_datasize);
// Datasize ist bei Stringtypen immer +1 als die tatsächliche Größe
// generell oder nur bei NexusDB?
tableVerwaltung.FieldByName(‚Feldlaenge‘).AsInteger:=_datasize;

tableVerwaltung
.post;
end;
mytable.Close;
mytable.Free;
end;
tableVerwaltung.close;
tablelist.Free;
end;
end;

Datasize,  Datatype, fieldname… sollten bei allen DB unter Delphi funktionieren

Fügen Sie zu einem späteren Programm neue Datenbankfelder (oder Änderungen) ein (durch),  so aktualisieren Sie die Verwaltungstabelle entsprechend. Vom Benutzer hinzugefügte Felder werden dagegen nicht gespeichert, so dass immer eine saubere Trennung möglich ist.

Ebensfalls erweitern könnte man obiges Beispiel noch um Try…Except – Blöcke, um mögliche Probleme abzufangen. Ebenso beinhaltet obiges Beispiel noch keine Indexfeld-Informationen, ist also noch ausbaufähig.

Eine solche Tabelle kann dann natürlich auch prima dazu dienen, um entsprechende Prüfroutinen einzubauen, ob alle notwendigen Felder beim Kunden vorhanden sind und natürlich auch als Ausgangsbasis für Datenbank- / Tabellenerweiterungen.

Werbung

Aktuelle Top Aktionen bei Acer, HP, Lenovo, Bitdefender & Co

Angebote bei Acer

» Acer Halloween Angebot: Gratis Zubehör im Wert von bis zu 449 Euro beim Kauf eines ausgewählten Notebooks – von Swift bis Predator Helios Modellen
» Acer Spezialangebote:Rabatt und Extras auf viele Acer Notebooks, Convertibles, Gaming Notebooks und PC, Monitore und mehr


Angebote bei HP
» 10% Rabatt auf HP Pavilion Notebooks:
10% Rabatt auf HP Pavilion Notebooks/Convertibles im HP Store. Teilnehmende Notebooks und Gutschein hier im HP Store.

» HP Herbst Angebote: Attraktive Herbstangebote mit aktuellen HP Notebooks und Convertibles und vieles mehr bis 31.10.2018

Angebote bei Lenovo

» Lenovo Top Wochenangebote: Heiße ThinkPad und IdeaPad Wochenangebote mit großer Auswahl und dicken Rabatten


Weitere interessante Angebote

» Top bei Otto: Sehr gute HP Notebook Angebote, teils mit Extras wie 4 Jahre Garantie und mehr
» Mehr Aktionen in der Übersicht: Aktuelle HP Angebote und mehr auf einem Blick


Aktuelle Bitdefender Aktionen:

» Bitdefender „Schulstart“ Angebot mit bis zu 44% Rabatt
» Bitdefender +1 Jahr dazu-Aktion
» Top für neue PCs! Bitdefender AntiVirus Plus Lebenslang Edition: 5 Jahre Schutz für nur für nur 89,95

Weitere aktuelle Bitdefender Angebote
» Alle Bitdefender Angebote auf einem Blick

Werbung


Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.