PreviousDatabaseRow-Problem nach While-Schleife

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

PreviousDatabaseRow-Problem nach While-Schleife

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag 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")
Zuletzt geändert von dysti am 31.07.2009 12:21, insgesamt 1-mal geändert.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bitte vollständig ausformulieren und in den "Fehler in der Help"-Thread...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Super. Danke für die schnellen Antworten.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten