Blättern in SQLite-Datenbank

Startseite Foren Deutsches LiveCode-Forum Blättern in SQLite-Datenbank

Ansicht von 13 Antwort-Themen
  • Autor
    Beiträge
    • #17092
      Radmuehl
      Teilnehmer

      Ich habe folgendes vor. Ich möchte alle Felder der Datensätze in der Tabelle mit dem Namen Kosten addieren un die Gesamtsumme zu erhalten. In Profan habe ich das immer mit einer Schleife gemacht. Ich bin zum ersten Datensatz gegangen und habe dort den Wert ausgelesen und in eine Variable geschrieben. Dann zum nächsten Datensatz und den Wert dort zu dem ersten Wert addiert. Das ging dann bis der letzte Daensatz in der Datenbank erreicht wurde. In Livecode habe ich jetzt das ganze Wochenende recherchiert und bisher nicht gefunden wie ich das Erreichen des letzten Datensatzes abfragen könnte. Zum Blättern in den Datensätzen habe ich nur Befehle gefunden, die mir leider Fehlermeldungen bringen.

      Z.B.

      move To First()

      Viele Grüße

      Radmühl

    • #17094
      Klaus Major
      Moderator

      Das geht sogar direkt in SQL:

      ...
      put "SELECT SUM('kosten') FROM 'alle_kosten';" into tSQL
      revexecute...
      ...

      Ich schlage immer hier nach, wenn es mal wieder um SQL geht, man kann nicht alles im Kopf haben:
      https://www.w3schools.com/sql/default.asp

    • #17116
      Radmuehl
      Teilnehmer

      Hallo Klaus,

      Danke für die rasche Antwort.

      Mit dem von Dir mitgeteiltem Code habe ich Schwierigkeiten und er bringt mir auch bei revexecute eine Fehlermeldung. Ich habe eine Datenbank die Auto.db heißt. Die Tabelle heißt einfach nur Auto. Die Summe soll auf das Datenfeld Kosten gemacht werden.

      Wenn ich den Code richtig verstehe müsste die gesamtsumme dann in der Variablen tSQL stehen. Hier mal der von mir verwendete Code

      on mouseup
        
          put revOpenDatabase ("sqlite","d:auto.db", , , , ) into dbid
      put "SELECT SUM('Kosten') FROM 'Auto';" into tSQL
      revexecute...
       
          revCloseDatabase dbid
         
      end mouseup

      Viele Grüße

      Radmühl

    • #17120
      Klaus Major
      Moderator

      Hallo Radmühl,

      Wenn ich den Code richtig verstehe müsste die gesamtsumme dann in der Variablen tSQL stehen.

      korrekt!

      Aber aus reiner Faulheit habe ich das mit "revexecute..." nicht ausgeschreiben, ich hatte gehofft, Du würdest diesen Part erkennen und übernehmen! 😎

      ...
      put revOpenDatabase ("sqlite","d:auto.db", , , , ) into dbid
      put "SELECT SUM('Kosten') FROM 'Auto';" into tSQL
      revexecute dbid,tSQL
      put THE RESULT into die_gesammelten_kosten 
      revCloseDatabase dbid
      ...

      Rührt die Fehlermeldung eventuell daher?
      Oder hast Du die Zahlen in Deiner Tabelle mit KOMMA eingeben?
      Also nicht 10.32 sondern 10,32?
      Livecode rechnet nämlich auf englisch.

      Gruß

      Klaus

    • #17124
      Radmuehl
      Teilnehmer

      Hallo Klaus,

      wenn ich den Code abspeichere bringt er keinen Fehler. Wenn ich dann den Button teste bleibt er bei der Zeile revexecute dbId,tSOL stehen und bringt folgende Fehlermeldung

      button "Button": execution error at line 22 (Handler: can't find handler) near "revexecute", char 1

      Die Werte stehen mit . in der Datenbank. Liegt es vielleicht an der Feldart? Die habe ich in der Datenbanktabelle auf NUMERIC gesetzt.

      Gruß

      Radmühl

    • #17126
      Klaus Major
      Moderator

      Oh, pardon, mein Fehler, es muss heissen:
      ...
      revExecuteSQL tDBID, tSQL
      ...

    • #17128
      Radmuehl
      Teilnehmer

      Danke aber es funktioniert leider immer noch nicht. In dem beschriebenen Ausdruck scheint ein Schreibfehler zu sein. revExecuteSQL tDBID, tSQL. Da ist wohl ein t zuviel. Ich habe s in revExecuteSQL DBID, tSQL abgeändert und es laäuft jetzt durch. Ich habe mal alles möglich abgefragt:

      on mouseup
      put revOpenDatabase ("sqlite","d:auto.db", , , , ) into dbid
      answer dbid
      put "SELECT SUM('Kosten') FROM 'Auto';" into tSQL
      revExecuteSQL DBID, tSQL
      put THE RESULT into die_gesammelten_kosten 
      answer die_gesammelten_kosten 
      answer tSQL
      revCloseDatabase dbid  

      answer dbID = bringt einen Wert
      answer die_gesammelten_kosten bringt 0
      answer tSQL bringt als Rückgabewert den Text SELECT SUM('Kosten') FROM 'Auto';

      Ich denke da ist der Fehler begraben.

      Gruß

      Radmühl

    • #17130
      Klaus Major
      Moderator

      Hm, die SQL Syntax ist definitiv korrekt, siehe oben verlinkte Website.
      Sorry, keine brillante Idee im Moment...

    • #17142
      Axwald
      Teilnehmer

      Hallo,
      nimm die Hochkommata raus - die machen aus dem Feldnamen ("Kosten") einen String. Wenn Du Feld-Tabellen-Namen "quoten" willst, nimm ` ("backquote").

      Und wenn Du mit SQL arbeiten willst, besorg Dir am Besten ein Tool, mit dem Du Deine SQL-Strings direkt in der DB testen kannst, z.B. "DB Browser for SQLite". Ist gut gegen graue Haare 😉

      Viel Spaß!

    • #17144
      Klaus Major
      Moderator

      Hi Axwald,

      alle Beispiele bei z.B. https://www.w3schools.com/sql/default.asp benutzen das "Hochkomma" -> ' = SHIFT-#. Das macht aber noch keinen String daraus! Oder ist das eine SQLite Eigenart?

      Jedenfalls benutze ich das immer und hatte nie Probleme damit.

      Ausserdem denke ich, Kosten und Autos sind hier die echten Namen des Feldes bzw. der Tabelle. 🙂

      Aber einen Datenbank-Browser benutze ich auch, um SQL Befehle auszuprobieren, ein kleiner Fehler ist immer drin in meiner Syntax. 😎

      Gruß

      Klaus

    • #17146
      Radmuehl
      Teilnehmer

      Ausserdem denke ich, Kosten und Autos sind hier die echten Namen des Feldes bzw. der Tabelle. 🙂

      Das ist richtig.

      Gruß

      Radmühl

    • #17148
      Radmuehl
      Teilnehmer

      Der Code funktioniert aus unerklärlichen Gründen zawr nicht, aber ich habe trotzdem einiges gelernt. Besten Dank.

      Ich habe es jetzt wie ursrünglich geplant realisiert. Ich habe die Anzahl der Datensätze der Datenbank ausgelesen und dann mit einer Schleife die einzelnen Werte summiert. Durch eingefügte Abfragen konnte ich die Summenbildung dann auch den unterschiedlichen Fahrzeugen zuordnen.

      Viele Grüße

      Dieter
      (Radmühl)

    • #17185
      Axwald
      Teilnehmer

      Irgendwie hat das Forum meinen Beitrag gefressen. Ich hatte ihn 2 mal geändert (wegen versemmelter Formatierung), und dann war er auf einmal weg. Nochmal einstellen geht nicht, weil das Forum meint, das hätte ich doch schon gepostet :/
      Egal, ich probiere es noch mal:
      ---------------------------------------------------------------------------------
      Hmmm.

      alle Beispiele bei z.B. https://www.w3schools.com/sql/default.asp benutzen das "Hochkomma" -> ' = SHIFT-#. Das macht aber noch keinen String daraus! Oder ist das eine SQLite Eigenart?
      Jedenfalls benutze ich das immer und hatte nie Probleme damit.

      Ich hatte es im SQLite Manager (mein Tool der Wahl, geht noch im Waterfox) probiert, und da hat mir:
      SELECT SUM('FeldName') FROM 'TabellenName';
      0 gegeben, wie Du auch schriebst.

      SELECT SUM(FeldName) FROM TabellenName;
      hingegen ergab die korrekte Summe.

      Ich arbeite auch mit viel mit MySQL/ MariaDB, und habe mir das irgendwann angewöhnt:
      Feld- und Tabellenname in backquotes (`), Strings in Hochkommata (').
      Wobei der "backquote" eigentlich nur notwendig ist, wenn ein Feld- oder Tabellen-Name zufällig auch ein SQL-Schlüsselwort ist.

      Aber warum die SUM()-Funktion in der DB nicht gehen soll, ist mir auch nicht klar. Es handelt sich schon um ein numerisches Feld? VARCHARS lassen sich schlecht summieren ...

      Viel Spaß!

      PS: Jetzt hab ich nochmal in "w3schools.com/sql" geschaut - aber gar kein Beispiel für gequotete Feld- oder Tabellennamen gefunden :/

    • #17187
      Klaus Major
      Moderator

      Hier zum Beispiel:
      https://www.w3schools.com/sql/sql_where.asp
      ...
      Example Where Clause:
      SELECT * FROM Customers
      WHERE Country='Mexico';
      ...

Ansicht von 13 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.