Seite 1 von 1

SQLite Abfrage ERLEDIGT

Verfasst: 11.10.2014 13:01
von Pure_Beginner
Hallo Gemeinde,

seit langem habe ich mal wider etwas Zeit gefunden mich mit PB zu Beschäftigen (hat sich einiges getan!).

Meine Frage bezieht sich aber auf SQLite, habe folgende Abfrage formuliert und mochte den ersten Eintrag erhalten.

Code: Alles auswählen

UseSQLiteDatabase()




Procedure.s GetExePath()
  Protected ExePath.s = GetPathPart(ProgramFilename())
  If LCase(ExePath) = LCase(GetTemporaryDirectory()) : ExePath = GetCurrentDirectory() : EndIf
  If Right(ExePath, 1) <> "\" : ExePath + "\" : EndIf  
  ProcedureReturn ExePath
EndProcedure




Procedure.i Preis(Bezeichnung.s, Laenge.i, Breite.i)
  
  Protected DB.i
  Protected Query.s, Preis.i
  
  DB = OpenDatabase(#PB_Any,  GetExePath() + "BaureiheE.db", "", "", #PB_Database_SQLite)
  
  If DB = 0
    MessageRequester("Fehler", GetExePath() + "BaureiheE.db konnte nicht geöffnet werden.", #MB_ICONWARNING)
    ProcedureReturn 
  EndIf 
  
  Query =  "Select Preis From '" + Bezeichnung + "' Where Laenge >= '" + Laenge + "' And Breite >= '" + Breite + "'"
  
  If DatabaseQuery(DB, Query)
    While NextDatabaseRow(DB)   ; 
      Preis = GetDatabaseLong(DB,0)  
    Wend 
    FinishDatabaseQuery(DB)
   
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: " + DatabaseError())
  EndIf
  
  
  MessageRequester("Preis in Cent", "Preis:  "+ Preis)
EndProcedure


Preis("B", 1503, 403)
Leider bekomme ich immer den letzten Eintrag, zum verrückt werden,
hab schon in SQLite3 Buch und in SQL kurz und gut nachgeschlagen aber nicht gefunden.
Kann mir jemand helfen ?

schönes Wochenede
Grüße Christian

Re: SQLite Abfrage

Verfasst: 11.10.2014 13:16
von Pure_Beginner
Hallo Gemeine,

habe es herausgefunden,
war kein SQLite Befehl sonder PB.
Poste mal das Ergebnis falls jemand ähnliche Probleme hat.

Code: Alles auswählen

If DatabaseQuery(DB, Query)
   FirstDatabaseRow(DB)   ; 
      Preis = GetDatabaseLong(DB,0)    
    FinishDatabaseQuery(DB)
   
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: " + DatabaseError())
  EndIf

Re: SQLite Abfrage ERLEDIGT

Verfasst: 11.10.2014 13:21
von Danilo
Du gehst ja immer alle gefunden Werte durch, so dass Du immer den Letzten bekommst:
Pure_Beginner hat geschrieben:

Code: Alles auswählen

    While NextDatabaseRow(DB)   ; 
      Preis = GetDatabaseLong(DB,0)  
    Wend
Der erste Wert steht nach dem ersten Aufruf von GetDatabaseLong(DB,0) zur Verfügung.

Vielleicht möchtest Du noch ein ORDER BY hinzufügen, und dann nur den ersten oder letzten Wert nehmen.
So kann man nach ID, Datum usw. sortieren lassen.

Re: SQLite Abfrage ERLEDIGT

Verfasst: 11.10.2014 14:40
von shim
Also einen "Fehler" in PB kann ich nicht erkennen, sondern eher einen Fehler im erstellen Programm. :-)

Du hast es ja jetzt anscheinend gelöst, aber hier noch eine Hinweis:
Du suchst einen Preis und gehst davon aus, das der erste gefundene Preis der korrekte Preis ist von ggf. VIELEN gefundenen Preisen? Ich hatte den Fall zwar noch nicht, aber ich würde mich nicht darauf verlassen, das dieses Ergbnis immer gleich ist. Genaugenommen ist das sogar ein ziemlich fataler Fehler, der im laufenden Betrieb unglaubliche Verwirrung stiften kann (weil es ja kein Fehler ist, der eine entsprechende Ausgabe generiert).

Ich rate Dir, dafür zu sorgen, das GENAU EIN Preis bei Deiner Abfrage gefunden wird.

Denn: Für jede spezielle Abmessung DARF es nur einen Preis geben!

Re: SQLite Abfrage ERLEDIGT

Verfasst: 12.10.2014 13:48
von Pure_Beginner
Danke für die Tipps,

in meinem Fall ist das vollkommen ausreichend, sollte kein Treffer erzielt werden, so soll 0 zurück geliefert werden.

Nochmals besten Dank.

Grüße
Christian