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.



Start - FAQ - Glossar - Sitemap - Impressum

 
cockpit-xp/addon/befehlsreferenz/cockpit.checkanwenderdb.txt · Zuletzt geändert: 2023/04/23 06:46 von slotx