Seite 1 von 1

SQLITE und der Befehl DatabaseUpdate

Verfasst: 29.11.2010 19:12
von ALF1965
Hallo Spezialisten.

Ich versuche ja schon seit einiger Zeit, mich durch PureBasic in Verbindung mit SQLITE durchzuwurschteln. Nun ist aber ein Punkt erreicht, wo ich einfach verzweifle. Ganz einfaches Beispiel, es ist sogar an die Hilfe in Purebasic angelehnt

Code: Alles auswählen

Procedure Database_NewCalc()
  If DatabaseQuery(0, "SELECT * FROM kassetbl") ; Ermittelt alle Einträge in der 'kassetbl' Tabelle
    While NextDatabaseRow(0)   ; alle Einträge durchlaufen
      a = GetDatabaseLong(0,0)
      Debug a
      Ergebnis=DatabaseUpdate(0,"update kassetbl set kassecol = 1 where acol =" + Str(a))
      Debug Ergebnis
    Wend

    FinishDatabaseQuery(0)
  EndIf
So, wenn ich die Passage nach "Ergebnis=..." rauskommentiere, fräst er brav durch jeden einzelnen Datensatz, der in der Tabelle steht (belegt durch Debug a, dabei handelt es sich um meinen primary key).

Sobald ich jedoch den Befehl DatabaseUpdate in dieser Schleife verwende, bricht die ganze Sache nach dem ersten Datensatz ab. Der wird noch brav verändert, so wie es der Befehl auch machen soll.

Was ist da wohl falsch????

Gruß aus Lengerich

Ralf

Re: SQLITE und der Befehl DatabaseUpdate

Verfasst: 29.11.2010 19:58
von Kiffi
ALF1965 hat geschrieben:Was ist da wohl falsch????
DatabaseQuery() und DatabaseUpdate() dürfen nicht geschachtelt
werden. Lösung: Die speicherst die Ergebnisse von DatabaseQuery()
beispielsweise in einer LinkedList und iterierst dann über diese Liste
Dein DatabaseUpdate().

Grüße ... Kiffi

Re: SQLITE und der Befehl DatabaseUpdate

Verfasst: 29.11.2010 20:10
von ALF1965
Daaaanke...

Schau Dir doch bitte mal die Hilfe zu DatabasUpdate in PB an, insbesondere das Beispiel. Da steht nämlich

Code: Alles auswählen

 ; Zuerst stellen wir eine Verbindung zu der 'employee' (Angestellten) Tabelle her
  ;
  If DatabaseQuery(#Datenbank, "SELECT * FROM employee") ; Ermittelt alle Einträge in der 'employee' Tabelle
  
    While NextDatabaseRow(#Datenbank)   ; alle Einträge durchlaufen
      
      ; Aktualisieren des 'checked' Felds für jeden Eintrag, vorausgesetzt
      ; das 'id' Feld ist das erste in der 'employee' Tabelle
      ;
      DatabaseUpdate(#Datenbank, "UPDATE employee SET checked=1 WHERE id="+GetDatabaseString(#Datenbank, 0)) 
    Wend

    FinishDatabaseQuery(#Datenbank)
  EndIf
Wie soll ich darauf kommen :-(

Re: SQLITE und der Befehl DatabaseUpdate

Verfasst: 29.11.2010 21:07
von Kiffi
ALF1965 hat geschrieben:Da steht nämlich...
... ein offensichtlich falscher Code. ;-)

Code: Alles auswählen

UseSQLiteDatabase()

#Database = 0

OpenDatabase(#Database, ":memory:", "", "", #PB_Database_SQLite)

DatabaseUpdate(#Database, "Create Table employee (id, checked)")

For Counter = 1 To 10
  DatabaseUpdate(#Database, "Insert Into employee (id, checked) values (" + Str(counter) + ", 0)")
Next

; ######################

Debug "So funktioniert es nicht :-("

If DatabaseQuery(#Database, "SELECT * FROM employee") ; Get all the records in the 'employee' table
  
  While NextDatabaseRow(#Database) ; Loop for each records
    
    ; Update the 'checked' field for each records, assuming the 'id' field is 
    ; the first one in the 'employee' table
    ;
    Ergebnis = DatabaseUpdate(#Database, "UPDATE employee SET checked=1 WHERE id="+GetDatabaseString(#Database, 0)) 
    Debug Ergebnis
    
  Wend
  
  FinishDatabaseQuery(#Database)
EndIf

; ######################

Debug "---------------------------"
Debug "So 'funztet' :-)"

NewList id.s()

If DatabaseQuery(#Database, "SELECT * FROM employee") ; Get all the records in the 'employee' table
  
  While NextDatabaseRow(#Database) ; Loop for each records
    
    ; Update the 'checked' field for each records, assuming the 'id' field is 
    ; the first one in the 'employee' table
    ;
    AddElement(id())
    id() = GetDatabaseString(#Database, 0)
    
  Wend
  
  FinishDatabaseQuery(#Database)
EndIf

ForEach id()
  Ergebnis = DatabaseUpdate(#Database, "UPDATE employee SET checked=1 WHERE id="+id()) 
  Debug Ergebnis
Next
Grüße ... Kiffi