Seite 3 von 4

Re: Sqlite und sum

Verfasst: 27.12.2013 23:53
von Kiffi
gnaps hat geschrieben:Beachte auch mein Post voran, hast Du eine Idee?
da werfe ich Dir einfach mal das PB - AddDate() vor die Füße.

Auf SQL-Seite kannst Du mit > (größer als) und < (kleiner als) oder BETWEEN x AND y arbeiten.

Grüße ... Kiffi

Re: Sqlite und sum

Verfasst: 28.12.2013 00:13
von HeX0R
[OT]
Kiffi hat geschrieben:@Derren: Ich glaube, heute kommen wir nicht mehr auf einen grünen Zweig. ;-)
Ich wollte nur anmerken, dass Derren (bevor der Gute noch aus dem Fenster springt :mrgreen:) völlig Recht hatte.
Das nur am Rande, macht nur weiter ;)

[Edit]
Schnell noch was dazuschreiben, bevor das auch falsch verstanden wird:
Kiffis Umbau war aber natürlich auch korrekt.
[/OT]

Re: Sqlite und sum

Verfasst: 28.12.2013 00:18
von Derren
Danke Hex0R!

Warum ist das Ergebnis hier immer 0?

Code: Alles auswählen

Procedure myDumbProc(query.s)
  If query = "richtig"
    ProcedureReturn #True
  Else 
    ProcedureReturn #False
  EndIf 
EndProcedure 

myVar.i = myDumbProc("Warum geht das nicht?")
Debug myVar.i ; Immer 0... Was stimmt denn hier nicht?
Das Ergebnis sollte immer abgefragt werden

Code: Alles auswählen

If myDumbProc("Warum geht das nicht?")
  Debug "Siehste? Geht doch, Grüße Kiffi"
EndIf 


Naja, habe aber nicht den Nerv mich mit dem Datenbankgedöns in PB auseinander zu setzen solange ich es nicht selber brauche. Würde jetzt viel zu viel Zeit kosten mir genau so eine Datenbank wie gnaps sie hat zu basteln etc.
Deswegen tut es mir leid, dass ich nicht wirklich behilflich sein kann. Wollte nur anmerken, dass die Feuerwehr hier den Hydranten aufschraubt obwohl doch eigentlich eine Katze vom Baum geholt werden müsste.

edit: Ja, Kiffi's Code war natürlich korrekt und auch hilfreich. Er hat ja recht damit, dass der Rückgabe wert überprüft werden sollte. Aber das tut in dem Fall ja schon "Debug". Der Wert wird halt von Programmierer überprüft und nicht von der Software. Dafür ist die Debug Funktion ja da.

Re: Sqlite und sum

Verfasst: 28.12.2013 00:37
von gnaps
Hi Kiffi,

danke für AddDate() das bekomme ich hin.

Wenn ich dann wie du schreibst
Kiffi
Auf SQL-Seite kannst Du mit > (größer als) und < (kleiner als) oder BETWEEN x AND y arbeiten.
das ganze abfrage.

Wie bekomme ich da die Gesamtkilometer ? :D

Gruß
gnaps

Re: Sqlite und sum

Verfasst: 28.12.2013 00:52
von gnaps
Hi nochmal,

zu früh gefreut.

Ich habe 2 Km Werte

20,50 und 20,75

berechnet werden 40

was jetzt, genug PB gemacht, ab ins Bett, morgen gehts weiter

Gruß
gnaps

Re: Sqlite und sum

Verfasst: 28.12.2013 02:53
von Kiffi
<OT>

@HeX0R & @Derren,

ich muss zugeben, dass heute ein harter Tag für mich war und ich vielleicht
deswegen ein bisschen schwer von Kapee bin. Ich schnalle es auf jeden Fall
immer noch nicht, was Ihr mir versucht mitzuteilen.

Nochmal für mich zum Mitschreiben:

Wir haben eine Tabelle 'myTable' mit diversen Feldern.

Jetzt mache ich eine Abfrage:

Code: Alles auswählen

Result = DatabaseQuery(DB, "Select * From myTable")
-> Result ist in diesem Fall immer ungleich 0. Eben weil die Abfrage erfolgreich durchgeführt wurde. Und das unabhängig davon, ob in der Tabelle was steht oder nicht.

Code: Alles auswählen

Result = DatabaseQuery(DB, "Select * From myTable Where 1=2")
-> auch hier ist Result immer ungleich 0, auch wenn die Abfrage eigentlich unsinnig ist (1=2) und deshalb keine Treffer liefert.


Jetzt mache ich eine andere Abfrage:

Code: Alles auswählen

Result = DatabaseQuery(DB, "Select * From myTabel")
-> Result ist in diesem Fall immer 0, weil es die Tabelle 'myTabel' nicht gibt. (DatabaseError() liefert: "no such table: myTabel")

Code: Alles auswählen

Result = DatabaseQuery(DB, "Select * From myTable Where")
-> Result ist in diesem Fall immer 0, weil die Abfrage syntaktisch unvollständig / fehlerhaft ist. (DatabaseError() liefert: "near "Where": syntax error")

Zusammengefasst: Result liefert nur eine Aussage, ob die Abfrage erfolgreich ausgeführt werden
konnte oder nicht. Result liefert keine Aussage über etwaige Treffer, die eine Abfrage erzielt.

Stimmen wir dahingehend erst einmal überein?

</OT>

Grüße ... Kiffi

Re: Sqlite und sum

Verfasst: 28.12.2013 04:03
von Derren
Darin stimmen wir überein :)
Und jetzt sagt gnaps, dass Result bei ihm immer 0 ist. Also stimmt ja was mit der Query nicht.
Also bringt das hier ja auch nichts^^

Code: Alles auswählen

If DatabaseQuery(DB, "Select * From myTable Where") ; Dein 4tes Beispiel
    ;....
Endif

@gnasp: Aus dem ganzen hin und her, jetzt folgender Code:
Was wird dir im Debugger angezeigt?

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
Else
  Debug DataBaseError()
Endif

Re: Sqlite und sum

Verfasst: 28.12.2013 04:12
von Kiffi
Derren hat geschrieben:Und jetzt sagt gnaps, dass Result bei ihm immer 0 ist. Also stimmt ja was mit der Query nicht.
Gnarf! Bild

Jetzt ist der Groschen bei mir endlich gefallen.

Danke für die Aufklärung & nix für ungut ;-) ... Kiffi

Re: Sqlite und sum

Verfasst: 28.12.2013 09:59
von gnaps
Hi Leute,

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
Else
  Debug DataBaseError()
Endif
Die Anweisung stimmt, jedoch bekomme ich nicht den richtigen Wert.

ich habe zwei Datensätze
Datensatz1 = 20.75km
Datensatz2 = 3.05km

in PB bekomme ich 23km zurück.
im SQL-Browser werden 23,8 angezeigt

was mache ich nun wieder falsch ?

Gruß gnaps

Re: Sqlite und sum

Verfasst: 28.12.2013 10:11
von gnaps
Hi nochmal,

Code: Alles auswählen

If DatabaseQuery(#DB,"Select sum(km) from Besuchdaten where BesuchAdresseid = "+Str(IDAdresse.i)+" GROUP BY BesuchAdresseid" )
  NextDatabaseRow(#DB)
  GesamtkilometerAdresse.f = GetDatabaseFloat(#DB, 0)
  Debug GesamtkilometerAdresse.f
Else
  Debug DataBaseError()
Endif

Debug StrF(GesamtkilometerAdresse.f,2)
jetzt kommen bei den zwei Datensätze
Datensatz1 = 20.75km
Datensatz2 = 3.05km

23.80 zurück.
:D jetzt passt es