newQueryStat()

Seit der Einführung der neuen Datenbank SQLite als Speicher für Cockpit-XP ist es deutlich einfacher geworden, Daten aus den Datenbanken zu holen und damit zu arbeiten.

Es gibt nur noch zwei Datenbanken. cpv2stamm für die Stammdaten wie z.B. Fahrer, Fahrzeuge und cpv2statistik, die die Renndaten enthält.

Dieser Befehl ist definiert, um auf die Statistikdaten zuzugreifen. Es ist nicht möglich, damit an die Stammdaten zu gelangen.

Syntax

Befehl newQueryStat()
Funktion Stellt eine Verbindung zur Statistikdatenbank von Cockpit-XP her
Typ TZQuery

Codebeispiel 1

var
  message : String;
  sGesamtZeit : String;
  sGesamtRunden : String;
  sGesamtStrecke : String;
  intGesamtZeit : Extended;
  intHours : Extended;
  intMinutes : Extended;
  intSeconds : Extended;

begin

  // Kopfzeile für Meldung generieren
  message := 'Fahrer - Gesamtzeit - Gesamtstrecke - Gesamtrunden';
  
  // Abfrage Statistikdatenbank
  with newQueryStat do
  begin
    
    // Objekt erst mal initialisieren
    sql.Clear;
    // SQL-Abfrage formulieren
    sql.Text := 'SELECT * FROM StRennCounter WHERE Typid=0 AND Totaldistance>0 ORDER BY Totaltime DESC LIMIT 3';
    // Abfrage ausführen
    Open;
    // Fokus auf den ersten Datensatz setzen
    First;
    
    // alle gefundenen Datensätze durchlaufen
    while not EOF do
    begin
    
      // Fahrer, Strecke und Runden auslesen und 
      // direkt als String für die Ausgabe aufbereiten
      sFahrerName    := FieldByName('Name').AsString;
      sGesamtStrecke := cpIntToStr3(FieldByName('Totaldistance').AsInteger)+' km';
      sGesamtRunden  := FormatFloat('#,##0',FieldByName('Totalround').AsInteger)+' Runden';

      // Gesamtzeit (Sekunden) ins Format hh:mm:ss bringen
      intGesamtZeit := FieldByName('Totaltime').AsInteger;
 
      // Über 3.600 sek. = min. 1 Stunde Gesamtzeit
      if intGesamtZeit >= 3600 then
      begin
        intHours   := Trunc(intGesamtZeit/3600);
        intMinutes := Trunc((intGesamtZeit-(3600*intHours))/60);
        intSeconds := Trunc((intGesamtZeit-(3600*intHours)-(60*intMinutes)));
      end
      // Immerhin noch über 60 sek. = min. 1 Minute Gesamtzeit
      else if (intGesamtZeit >=60) AND (intGesamtZeit < 3600) then
      begin
        intHours   := 0;
        intMinutes := Trunc( intGesamtZeit/60 );
        intSeconds := Trunc( intGesamtZeit-(60*intMinutes) );
      end
      // nur Sekunden als Gesamtzeit
      else
      begin
        intHours   := 0;
        intMinutes := 0;
        intSeconds := intGesamtZeit;
      end;

      // Gesamtzeit für Ausgabe aufbereiten
      sGesamtZeit := FormatFloat('00',intHours) + ':';
      sGesamtZeit := sGesamtZeit + FormatFloat('00',intMinutes) + ':';
      sGesamtZeit := sGesamtZeit + FormatFloat('00',intSeconds);

      // Meldung zusammenstellen
      message := message + Chr(10) + Chr(13) + sFahrerName + ' - ';
      message := message + sGesamtZeit + ' - ' + sGesamtStrecke + ' - ';
      message := message + sGesamtRunden;
      
      // Den nächsten Datensatz holen
      Next;

    end;

    // Resourcen wieder freigeben
    Free;
     
  end;

  // Alle gefundenen Fahrer in Meldung anzeigen
  cpShowMessage(message);
  
end.


Dieser Code sucht in der Tabelle StRennCounter der Datenbank den 3 Fahrern, die die längste Gesamtzeit an der Bahn verbracht haben. Dazu kommt die zurückgelegte Gesamtstrecke in km und die insgesamt gefahrenen Runden. Im StatistikCenter stehen diese Zahlen in der Rubrik Ewige Zähler → Fahrer.

Der Code ist mit Kommentaren versehen, die beim Verständnis helfen sollen.

Tatsächlich liegt die Schwierigkeit eher darin, die Daten in den beiden Datenbanken und Ihren Tabellen zu lokalisieren und irgendwie zusammen zu bringen.

Das intensive arbeiten mit message := message + … ist nur der Lesbarkeit hier im Wiki geschuldet. Sonst würde es bei diesen langen Zeilen im Beispielcode viele Umbrüche geben, die das Ganze unübersichtlich machen.

Informationsmaterial

Es gibt online die Seite von W3Schools, die ein gutes Tutorial zur SQL-Abfragesprache anbieten, allerdings in englischer Sprache.

Die Liste der Befehle ist in der Hilfe-Spalte im AddOn-Editor zu sehen, wenn man den TZQuery-Zweig aufklappt. Um ausführlichere Informationen zu den Befehlen zu bekommen, muss man Online recherchieren.

So ist das Schlüsselwort sql z.B. über den Befehl NewQueryStat() automatisch initialisiert. Es muss nicht separat als Variable deklariert werden. Eine weitere Erleichterung ist die Verwendung von with … do . Sonst müsste vor jedes sql noch das Objekt notiert werden, also newQueryStat.sql…..



Start - FAQ - Glossar - Sitemap - Impressum

 
cockpit-xp/addon/befehlsreferenz/newquerystat.txt · Zuletzt geändert: 2020/11/28 12:15 (Externe Bearbeitung)