Database

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

Database

Beitrag von Pure_Beginner »

Hallo Forum,

habe Probleme mit folgendem Code.

Code: Alles auswählen

UseSQLiteDatabase()  
#Database = 1          

DB = OpenDatabase(#Database, "d:\TK_SQL_Lite\Baureihee.db", "Table", "" ,#PB_Database_SQLite)



Procedure.s Cent2Euro(cent.s)
  Protected Laenge.i = Len(cent), Euros.s
  Euros = InsertString(cent, ",", Laenge - 1)
  ProcedureReturn Euros.s
EndProcedure






Procedure DB1(DB)
  
  If DB = 0
    MessageRequester("Mitteilung", "SQL Tabelle konnte nicht geöffnet werden.")     
    ProcedureReturn 
  EndIf   
  
  
  If DatabaseQuery(#Database, "SELECT Preis FROM kb  WHERE Laenge = 1000 And Breite  = 600")
    While NextDatabaseRow(#Database)
      
      Summe.s = GetDatabaseString(#Database, 0)
      
      If StringByteLength(Summe) = 0
        
        FinishDatabaseQuery(#Database)
        MessageRequester("Fehler", "Kann die Daten nicht finden: "+DatabaseError())
        ProcedureReturn      
      EndIf
      
      Debug Cent2Euro(Summe) + " Euro"
    Wend
    
    FinishDatabaseQuery(#Database)
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
  EndIf
  
  
EndProcedure

db1(DB)

insbesondere mit der Stelle

Code: Alles auswählen

If StringByteLength(Summe) = 0
        
        FinishDatabaseQuery(#Database)
        MessageRequester("Fehler", "Kann die Daten nicht finden: ")
        ProcedureReturn      
      EndIf
denn wen der Wert Summe 0 ist wird der Codeblock (IF Anweisung nicht ausgeführt) und kein MessageRequester ausgeführt.
Wo liegt mein Fehler ?

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Database

Beitrag von Kiffi »

Dein Code ist zu strubbelig, als dass ich jetzt auf
Einzelheiten eingehen möchte. Ich habe ihn mal kurz etwas
umgeschrieben. Falls Fragen sind: Immer her damit.

Code: Alles auswählen

EnableExplicit

UseSQLiteDatabase()

Procedure.s Cent2Euro(cent.s)
  Protected Laenge.i = Len(cent), Euros.s
  Euros = InsertString(cent, ",", Laenge - 1)
  ProcedureReturn Euros.s
EndProcedure

Procedure.s GetPreis()
  
  Protected DB
  Protected Preis.s
  
  DB = OpenDatabase(#PB_Any, "d:\TK_SQL_Lite\Baureihee.db", "", "" ,#PB_Database_SQLite)
  
  If DB
    
    If DatabaseQuery(DB, "SELECT Preis FROM kb  WHERE Laenge = 1000 And Breite  = 600")
      NextDatabaseRow(DB)
      Preis = GetDatabaseString(DB, 0)
      FinishDatabaseQuery(DB)
    Else
      MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
    EndIf
    
    CloseDatabase(DB)
    
  Else
    
    MessageRequester("Mitteilung", "Datenbank konnte nicht geöffnet werden.")     
    
  EndIf
  
  ProcedureReturn Preis
  
EndProcedure

Define Preis.s

Preis = GetPreis()

If Preis
  Debug Cent2Euro(Preis) + " Euro"
EndIf
Grüße ... Kiffi
a²+b²=mc²
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: Database

Beitrag von Pure_Beginner »

Hallo Kiffi,

Danke für die rasche Antwort.

Und ja der Code ist ziemlich strubbelig, bin gerade am lernen und üben der Befehle.

Leider funktioniert dein Code auch nicht.

Code: Alles auswählen

 If DatabaseQuery(DB, "SELECT Preis FROM kb  WHERE Laenge = 1000 And Breite  = 600")
      NextDatabaseRow(DB)
      Preis = GetDatabaseString(DB, 0)
      FinishDatabaseQuery(DB)
    Else
      MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
    EndIf
Wenn ich die Breite in 700 ändere und die Abfrage damit ins leere läuft bekomme ich keine Fehlermeldung. :freak:
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Database

Beitrag von Kiffi »

Pure_Beginner hat geschrieben:Wenn ich die Breite in 700 ändere und die Abfrage damit ins leere läuft bekomme ich keine Fehlermeldung. :freak:
das ist auch korrekt so. Eine Fehlermeldung würdest
Du bekommen, wenn Deine Abfrage syntaktisch falsch
wäre (z.b. 'Slect Preis From ...') oder aber wenn Du
Tabellen- oder Spaltennamen falsch benennst. Wenn Deine Abfrage
allerdings inhaltlich korrekt ist aber aufgrund der Parameter
kein Ergebnis zurückgeliefert wird, musst Du entsprechend anders
reagieren. Du könntest beispielsweise die letzten Zeilen meines
Codes wie folgt erweitern:

Code: Alles auswählen

Preis = GetPreis()
If Preis
  Debug Cent2Euro(Preis) + " Euro"
Else
  Debug "Keinen Preis gefunden"
EndIf
Grüße ... Kiffi
a²+b²=mc²
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: Database

Beitrag von Pure_Beginner »

Hallo Kiffi,

funktioniert :allright: .

hat mein Code nicht funktioniert weil er innerhalb der DB Abfrage stand ?.(while Schleife)

Hatte auch versucht was mit Len(summe) zu basteln, obwohl der Wert 0 ergab wurde die if Anweisung nicht ausgeführt.

Danke für deine Hilfe

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Database

Beitrag von Kiffi »

Pure_Beginner hat geschrieben:hat mein Code nicht funktioniert weil er innerhalb der DB Abfrage stand ?.(while Schleife)
StringByteLength() ist für diese Art der Abfrage
ungeeignet (siehe PureBasic-Hilfe).

Überdies vermute ich, dass die While-Schleife auch
ein Mitverursacher ist (kommt ganz darauf an, was
in Deiner Datenbank steht...).

Letztendlich willst Du ja nur einen Preis auslesen. Hier
genügt dann ein einmaliges NextDatabaseRow() und
das darauf folgende GetDatabaseString().

Grüße ... Kiffi
a²+b²=mc²
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: Database

Beitrag von Pure_Beginner »

@ Kiffi,

hab's ausprobiert mit

Code: Alles auswählen

If Len(Summe) = 0
ausserhalb der While-Schleife und es geht.

Deine Methode ist aber noch eleganter, obwohl ich die Überprüfung der Daten gerne im dazugehörigen Unterprogramm habe.

Nochmals besten Dank für die Hilfe und gute Nacht. <)

Christian

Ps.
Warum hast du keinen Danke Button ?
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten