SQLite Abfrage ERLEDIGT

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

SQLite Abfrage ERLEDIGT

Beitrag 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
Zuletzt geändert von Pure_Beginner am 11.10.2014 13:17, insgesamt 1-mal geändert.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: SQLite Abfrage

Beitrag 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
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: SQLite Abfrage ERLEDIGT

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
shim
Beiträge: 65
Registriert: 12.09.2004 23:09

Re: SQLite Abfrage ERLEDIGT

Beitrag 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!
Windows 8.1 Pro 64 Bit | PB 5.31 x86
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: SQLite Abfrage ERLEDIGT

Beitrag 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
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten