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.
