Seite 1 von 1

PreviousDatabaseRow-Problem nach While-Schleife

Verfasst: 31.07.2009 11:48
von dysti
Hallo,
wenn ich den untenstehenden Code ausführe, wird der letzte Datensatz nicht angezeigt.
Mein Verständnis: durch die Whileschleife springt er über den letzten Datensatz.
Soweit ok.
Mit PreviousDatabaseRow springe ich ein Satz zurück.
Somit müßte mit GetDatabaseString(#Datenbank,Spalte) der letzte Datensatz auszulesen sein.

Genau das macht er nicht. Warum?
Ein anschließendes FirstDatabaseRow funktioniert.
Da springt er wieder korrekt zum ersten Datensatz.

Code: Alles auswählen

#db0=0
UseSQLiteDatabase()
DatabaseFile$ = "i:\purebasic\forumexamples\bestand.sqlite"
;DatabaseFile$ = GetTemporaryDirectory()+"\Database.sqlite"
Debug DatabaseFile$
If CreateFile(#db0, DatabaseFile$)
   CloseFile(#db0)
   
   If OpenDatabase(#db0, DatabaseFile$, "", "")
      DatabaseUpdate(#db0, "CREATE TABLE bestand (Dsnr  INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE  Not NULL, Name VARCHAR(40) , Stueck NUMERIC(10) , Preis NUMERIC(10,2))")
      DatabaseUpdate(#db0, "INSERT INTO bestand (Name, Stueck, Preis) VALUES ('"+Name$+"', '"+Stueck$+"', '"+Str(Preis)+"')")
      DatabaseUpdate(#db0, "INSERT INTO bestand (Name, Stueck, Preis) VALUES ('Tastatur', '5', '25.55')")
      DatabaseUpdate(#db0, "INSERT INTO bestand (Name, Stueck, Preis) VALUES ('DVD-Laufwerk', '20', '33.00')")
      DatabaseUpdate(#db0, "INSERT INTO bestand (Name, Stueck, Preis) VALUES ('Festplatte 160GB', '23', '133.00')")
      DatabaseUpdate(#db0, "INSERT INTO bestand (Name, Stueck, Preis) VALUES ('USB-Stick 2GB', '44', '3.00')")
      If DatabaseQuery(#db0, "SELECT * FROM bestand")
         While NextDatabaseRow(#db0)
            Debug "Datensatznummer:  "+ GetDatabaseString(#db0, 0)
            Debug "Artikel        :  "+ GetDatabaseString(#db0, 1)
            Debug "Stück        :  "  + GetDatabaseString(#db0, 2)
            Debug "Preis          :  "+ GetDatabaseString(#db0, 3)
         Wend
       EndIf
       FirstDatabaseRow(#db0)
       While NextDatabaseRow(#db0)
       ;Debug GetDatabaseString(#db0, 0)
       Wend
       
       ;FirstDatabaseRow(#db0)
       PreviousDatabaseRow(#db0)
       
            Debug "_______________________"
            Debug ""
            Debug "Datensatznummer:  "+ GetDatabaseString(#db0, 0)
            Debug "Artikel        :  "+ GetDatabaseString(#db0, 1)
            Debug "Stück        :  "  + GetDatabaseString(#db0, 2)
            Debug "Preis          :  "+ GetDatabaseString(#db0, 3)
       
       FinishDatabaseQuery(#db0)
       
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf

Verfasst: 31.07.2009 12:09
von mk-soft
PreviousDatabaseRow(#db0) gibt eine Null zurück obwohl es einen Datensatz gibt.
Somit wird diese Funktion bei SQLite nicht unterstützt. Siehe F1

Verfasst: 31.07.2009 12:15
von dysti
...ich dachte, SQLite ist nativ eingebunden.
Dann muß er offensichtlich intern als ODBC von Fred eingebunden sein.
Nun, wenn es so sein sollte, dann wäre es klar, ansonsten nicht.

Dann kann man wohl die letzte Datensatznummer nur so herausbekommen:
DatabaseQuery(#db0, "SELECT max(dsnr) from bestand")

Verfasst: 31.07.2009 12:19
von Kiffi
dysti hat geschrieben:...ich dachte, SQLite ist nativ eingebunden.
Dann muß er offensichtlich intern als ODBC von Fred eingebunden sein.
Nun, wenn es so sein sollte, dann wäre es klar, ansonsten nicht.
die Doku scheint zu einer Zeit geschrieben worden zu sein, als es das native
SQLite noch nicht gab, sondern nur ODBC. Meines Erachtens sollte der
Hinweis, das SQLite das anscheinend auch nicht unterstützt, mit in die Hilfe.

Grüße ... Kiffi

Verfasst: 31.07.2009 12:37
von Kaeru Gaman
bitte vollständig ausformulieren und in den "Fehler in der Help"-Thread...

Verfasst: 31.07.2009 12:51
von Kiffi
Kaeru Gaman hat geschrieben:bitte vollständig ausformulieren und in den "Fehler in der Help"-Thread...
... dafür müsste unser Vermutung (dass SQLite das anscheinend nicht
unterstützt) erst einmal bestätigt werden (kann ja theoretisch auch
ein PB-Bug sein).

Grüße ... Kiffi

Verfasst: 31.07.2009 13:10
von dysti
Super. Danke für die schnellen Antworten.