Inhaltsverzeichnis
Cockpit.checkAnwenderDB
Einleitung
Dieser Befehl dient dem initialen Anlegen einer Anwenderdatenbank cpanwender und deren Anwesenheitsprüfung.
So legt der Befehl für sich genommen eine neue Anwenderdatenbank an. Mit den drei möglichen Rückgabewerten lässt sich prüfen, ob
- das Anlegen nicht möglich war (0)
- die Datenbank bereits existiert (1)
- die Datenbank angelegt wurde (2)
Speziell der 2. Punkt ist von essentieller Bedeutung bei der Programmierung eines AddOns.
Stellt euch vor, ihr fragt vor weiteren Aktionen NICHT ab, ob es die Datenbank bereits gibt. In diesem Fall würde das erneute Anlegen den Verlust der Datenbank und sämtlicher Inhalte bedeuten.
Das ist besonders fatal, wenn darin bereits Daten anderer Entwickler liegen. Es ist daher mehr als empfohlen, zu erst die Existenz der Datenbank selbst und im Anschluss das Vorhandensein von Tabellen mit gleichem Namen in der Datenbank zu prüfen. Die Beispiele bieten entsprechende Codezeilen.
Syntax
Befehl | Cockpit.checkAnwenderDB |
---|---|
Funktion | Befehl zum Anlegen der Anwenderdatenbank oder Prüfung auf deren Existenz und Bearbeitungsmöglichkeit |
Typ | Integer |
ab | 3.3.0 build 474 |
Codebeispiel 0
var msg: String; begin // Statuswert des Befehls abfragen if Cockpit.checkAnwenderDB = 0 then begin // Meldung konfigurieren und ausgeben msg := 'Fehler beim Anlegen der Anwender DB aufgetreten'; cpShowMessage(msg); end; end.
Dieses Beispiel fragt den Status des Befehls ab. Wenn der Wert '0' ist, wird eine entsprechende Meldung ausgegeben.
Codebeispiel 1
var msg: String; begin // Statuswert des Befehls abfragen if Cockpit.checkAnwenderDB = 1 then begin // Meldung konfigurieren und ausgeben msg := 'Anwender DB existiert bereits'; cpShowMessage(msg); end; end.
Dieses Beispiel fragt den Status des Befehls ab. Wenn der Wert '1' ist, wird eine entsprechende Meldung ausgegeben.
Codebeispiel 2
var msg: String; begin // Statuswert des Befehls abfragen if Cockpit.checkAnwenderDB = 2 then begin // Meldung konfigurieren und ausgeben msg := 'Anwender DB wurde angelegt'; cpShowMessage(msg); end; end.
Dieses Beispiel fragt den Status des Befehls ab. Wenn der Wert '2' ist, wird eine entsprechende Meldung ausgegeben.
Was passiert, nachdem die Anwenderdatenbank erzeugt wurde oder wenn klar ist, dass sie bereits existiert?
Es wäre jetzt eine gute Idee, zu prüfen, ob es in der Datenbank überhaupt schon eine Tabelle gibt. Während das eindeutig ist, wenn man das AddOn selbst programmiert hat und sich auf seinem eigenen System befindet, kann die Situation auf Rennbahnrechner anderer Anwender ganz anders aussehen.
Hier ist es möglich, auf die Datenbankdatei eines anderen Entwicklers zu treffen
Codebeispiel 3
var sNameTabelle : String; msg : String; begin // Namen der Tabelle initialisieren sNameTabelle := 'cpAnwenderTest'; // 1. Abfrage der Anwenderdatenbank with newQueryAnw do begin // prüfen, ob überhaupt eine Tabelle vorhanden ist sql.Clear; sql.Text := 'SELECT count(name) as Tabellen ' + 'FROM sqlite_master ' + 'WHERE type="table"'; Open; First; // Es gibt noch keine Tabellen if FieldByName('Tabellen').AsInteger = 0 then begin // Tabelle cpAnwenderTest anlegen with newQueryAnw do begin sql.Clear; sql.Text := 'CREATE TABLE "cpAnwenderTest" (' + '"ID" INTEGER NOT NULL UNIQUE, ' + '"Name" TEXT, ' + 'PRIMARY KEY("ID" AUTOINCREMENT)' + ')'; ExecSQL; Free; end else begin // Es gibt schon Tabellen // Prüfen, ob die gesuchte schon existiert. with newQueryAnw do begin sql.Clear; sql.Text := 'SELECT Count(*) AS TableExists ' + 'FROM sqlite_master ' + 'WHERE type="table" AND ' + 'name=:sTabelleName'; ParamByName('sTabelleName').AsString := sNameTabelle; Open; First; // Gibt es die Tabelle cpAnwenderTest schon if fieldByName('TableExists').AsInteger = 0 then begin // Nein. Anlegen. Siehe oben ... end else begin // Ja. Meldung anzeigen msg := 'Tabelle cpAnwenderTest existiert.'; cpShowMessage(msg); end; // Abfrage schließen Free; end; end; end; // Abfrage schließen Free; end; end.
Dieses komplexe Beispiel zeigt letztlich 3 Schritte für den Einsatz der Anwender-DB
- Prüfung, ob die Datenbank überhaupt Tabellen enthält
- Sind keine Tabellen enthalten, wird eine Tabelle angelegt
- Gibt es Tabellen, wird auf einen Tabellennamen geprüft
- Ist die Tabelle nicht existent, wird sie angelegt. Da der Code Punkt 2 entspricht, ist er im Beispiel ausgelassen
- Gibt es die Tabelle schon, wird eine Meldung angezeigt
Bilder folgen ! Ggfs. auch ein PDF mit zusätzlichen Details.