Seite 1 von 4

Sqlite und sum

Verfasst: 27.12.2013 17:27
von gnaps
Hallo Forum,

ich habe hier ein kleine Hürde die ich nicht gebacken bekomme.

Ich schreibe ein Fahrtenbuch-Programm für mich.
Hier habe ich eine SQLite Datenbank mit zwei Tables (Adresse,Besuchdaten)

Adresse hat folgende Spalten
ID, Name, Adresse, ort, km

Besuchdaten hat folgende
ID, IDAdresse, Datum, km

der Bezug besteht zwischen id und IDAdresse.

Wenn ich jetzt in meinem ListViewGadget eine Adresse anwähle, werden in meinem Besuch ListViewGadget
alle Besuche angezeigt.

Jetzt mein Problem.
Wie bekomme ich in meine Variable Kilometer.i die Summe (sum) der gesamten Kilometer von diese Adresse.

Ich hoffe mir kein jemand helfen.

Gruß
gnaps

Re: Sqlite und sum

Verfasst: 27.12.2013 17:32
von STARGÅTE

Code: Alles auswählen

SELECT Name, Adresse, Ort, Sum(Besucher.km) AS GesamtKM FROM Adresse
LEFT JOIN Besucher ON Besucher.IDAdresse = Adresse.ID
GROUP BY Adresse.ID
Ich summiere hier alle "Besucher.km" einer Adressen ID und gebe sie als GesamtKM für die Adressentabelle zurück.

Re: Sqlite und sum

Verfasst: 27.12.2013 18:32
von gnaps
Hallo,

danke Stargate für die schnelle Antwort jedoch ist mir das zu hoch.
Ich verstehe die Anweisung nicht.

Ich dachte das geht einfach so

Code: Alles auswählen

GesamtkilometerAdresse.i=DatabaseQuery(#DB, "Select sum(km) from Besuchdaten where BesuchAdresseid = "+Str(IDAdresse.i))
IDAdresse.i = meine eindeutige Adressen ID

nicht hauen bin Anfänger in SQLIte

Gruß
gnaps

Re: Sqlite und sum

Verfasst: 27.12.2013 19:37
von STARGÅTE
Ja klar geht das auch so, aber dann wäre es doch nur einzeln.
Dann muss da aber trotzdem ein GROUP BY rein, damit die Summe gebildet werden kann:

Code: Alles auswählen

SELECT sum(km) FROM Besuchdaten WHERE IDAdresse = 1 GROUP BY IDAdresse
Ich dachte du wolltest deine vollständige Adressenanzeige (ListViewGadget) gleich den den summierten Kilometern anzeigen.

Re: Sqlite und sum

Verfasst: 27.12.2013 20:51
von gnaps
Hi Stargate,

danke für die Antwort.
Ja, ich brauch die GesamtKM nur beim anklicken, alles andere sind zu viele Zahlen, und unnötig.

folgende Datenbanken
Adresse hat folgende Spalten
ID, Name, Adresse, ort, km

Besuchdaten hat folgende
ID, BesuchAdresseid, Datum, km
ich habe jetzt folgenden Code

Code: Alles auswählen

    GesamtkilometerAdresse.i=DatabaseQuery(#DB,"Select sum(km) from Besuchdaten where BesuchAdresseid = "+Str(IDAdresse.i)+" GROUP BY BesuchAdresseid" )
    Debug GesamtkilometerAdresse.i
Das Ergebiss ist aber immer 0. Was mache ich jetzt noch falsch ?

Gruß
gnaps

Re: Sqlite und sum

Verfasst: 27.12.2013 21:25
von Kiffi
gnaps hat geschrieben:

Code: Alles auswählen

    GesamtkilometerAdresse.i=DatabaseQuery(#DB,"Select sum(km) from Besuchdaten where BesuchAdresseid = "+Str(IDAdresse.i)+" GROUP BY BesuchAdresseid" )
    Debug GesamtkilometerAdresse.i
Das Ergebiss ist aber immer 0. Was mache ich jetzt noch falsch ?

Code: Alles auswählen

If DatabaseQuery(#DB,"Select sum(km) from Besuchdaten where BesuchAdresseid = "+Str(IDAdresse.i)+" GROUP BY BesuchAdresseid" )
  NextDatabaseRow(#DB)
  GesamtkilometerAdresse = GetDatabaseLong(#DB, 0)
  Debug GesamtkilometerAdresse
  [...]
Grüße ... Kiffi

Re: Sqlite und sum

Verfasst: 27.12.2013 21:38
von Derren
gnaps hat geschrieben:

Code: Alles auswählen

    GesamtkilometerAdresse.i=DatabaseQuery()
    Debug GesamtkilometerAdresse.i
Das Ergebiss ist aber immer 0. Was mache ich jetzt noch falsch ?
Kiffi hat geschrieben:IF DatabaseQuery()
Naja, wenn sein Rückgabewert von oben 0 ist, dann wird der Code nicht funktionieren, weil der If-block gar nicht erst betreten wird.
Für solche Fälle gibt's eigentlich sowas wie GetLastDBError(). Musst mal schauen ob es dafür ein Äquivalent in PB gibt. Wenn die Query nicht richtig formatiert ist, gibt's logischerweise auch kein Ergebnis, das man aus auslesen könnte.

Re: Sqlite und sum

Verfasst: 27.12.2013 21:48
von Kiffi
Derren hat geschrieben:Naja, wenn sein Rückgabewert von oben 0 ist, dann wird der Code nicht funktionieren, weil der If-block gar nicht erst betreten wird.
öhm, verstehe ich jetzt nicht. IMO sollte der Rückgabewert von DataBaseQuery() immer ausgewertet werden.
DataBaseQuery: Returns nonzero if the query was successful or zero if it failed

Code: Alles auswählen

If DatabaseQuery(...
  ; mit dem Ergebnis der Abfrage weiterarbeiten...
Else
  ; Fehlerbehandler. Evtl. DatabaseError() ausgeben lassen
EndIf
Grüße ... Kiffi

Re: Sqlite und sum

Verfasst: 27.12.2013 21:51
von STARGÅTE
@Derren
Du musst natürlich die SQL Abfrage an deine Tabelle anpassen.
Heißt die eine Spalte wirklich "BesuchAdresseid" ??

Re: Sqlite und sum

Verfasst: 27.12.2013 22:09
von Derren
Stargate: Ich hab nix getestet. Aber bei OP scheint's ja nicht zu klappen. Daran ändert der weiterführende Code auch nichts.

Kiffi: Ja, eben. Den Rückgabewert "debuggen" ist doch ein logischer Schritt, wenn die Auswertung fehl schlägt.

"Debug DatabaseQuery()" gibt doch ganz offensichtlich "0" aus. Von daher ist dein Code natürlich lieb gemeint, hilft ihm aber auch nicht weiter. Weil er gar nicht ausgeführt wird.