Kleine dynamische Datenbank im Interface-Stil

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hai Nic,

ich glaube einen Bug gefunden zu haben. Das erste Element im
folgenden Code wird nicht erkannt.

Code: Alles auswählen

*DB.DB
*DB = DB_Create("test")
 
*DB\AddCol('l', "feld", 1)

For i = 1 To 4
  DB_AddRow(*DB)
  DB_SetEntry(*DB, 1, i)
Next

DB_FirstRow(*DB)
DB_SelectRowByEntry(*DB, 1, 1)
Debug DB_GetSelectedRow(*DB) ; ausgabe: 4 -> falsch
Debug DB_GetErrorText(*DB)   ; ausgabe: 'kein fehler'

Debug "-------------"

DB_FirstRow(*DB)
DB_SelectRowByEntry(*DB, 1, 3)
Debug DB_GetSelectedRow(*DB) ; ausgabe: 3 -> korrekt
Debug DB_GetErrorText(*DB)
Läuft die For-Next-Schleife von 0 bis 4, wird
DB_SelectRowByEntry(*DB, 1, 1) korrekt selektiert.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Eigentlich funktioniert dein Code so, wie er soll.

Du vergisst nämlich den Rückgabewert von SelectRowByEntry()
auszuwerten. Da der in deinem Beispiel #False ist, wurde die Zeile nicht
gefunden. Und wenn eine Zeile nicht gefunden wurde, ist immer die letzte
Zeile in der Datenbank ausgewählt. Ich dachte den Fehler muss ich nicht
mehr extra einbauen, weil es aus dem Rückgabewert ersichtlich ist.

Ansonsten musst du daran denken vor dem Durchsuchen der Datenbank ein
ResetRow() auszuführen, weil SelectRowByEntry() immer einen Eintrag nach
dem aktuellen anfängt zu suchen. Daher funktioniert es auch mit einer
For-Schleife von 0 bis 4.

So wäre dein Code richtig:

Code: Alles auswählen

*DB.DB
*DB = DB_Create("test")
 
*DB\AddCol('l', "feld", 1)

For i = 1 To 4
  *DB\AddRow()
  *DB\SetEntry(1, i)
Next

*DB\FirstRow()
Debug *DB\SelectRowByEntry(1, 1) ;ausgabe: 0 -> nicht gefunden
Debug *DB\GetSelectedRow() ; ausgabe: 4 -> logischerweise falsch
Debug *DB\GetErrorText()   ; ausgabe: 'kein fehler'

Debug "-------------"

*DB\ResetRow()
*DB\SelectRowByEntry(1, 1)
Debug *DB\GetSelectedRow() ; ausgabe: 1 -> korrekt
Debug *DB\GetErrorText()
Jetzt noch zwei Fragen an alle:
- Soll ich eine zusätzliche Fehlermeldung für das Nicht-Finden einer Zeile
einbauen oder reicht der Rückgabewert #False?
- Ist es okay, wenn nach einem Nicht-Finden die letzte Zeile aktuell ist
oder soll die Zeile aktuell bleiben, die vor dem Aufruf aktuell war?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Du vergisst nämlich den Rückgabewert von SelectRowByEntry()
> auszuwerten. Da der in deinem Beispiel #False ist, wurde die Zeile nicht
> gefunden.

darum geht's mir ja. Der Eintrag ist doch vorhanden. Wieso wird er nicht
gefunden?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du solltest weiterlesen und den Code testen... :wink:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

NicTheQuick hat geschrieben:Du solltest weiterlesen und den Code testen... :wink:
Ah! Sorry, my fault! :oops:

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Jetzt fehlt nur noch die Sortierung einer Spalte nach dem ABC.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit PB4.01 scheints nicht mehr zu funktionieren :cry:
Hab hier nen Invaliden
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Was genau funktioniert denn nicht? /:->

Bei mir klappt nämlich alles.
Hast du ein Beispiel?
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Beitrag von Aspirant »

Hallo,
wollte mal höfflich an fragen ob es schon eine Hilfe gibt das ich die Datenbank gern verwenden würde.
ich habe zwar raus gefunden wie ich eine Datenbank speichere aber das Laden bekomme ich nicht hin.

dann würde ich noch gerne wissen wenn hier wirklich Zeile 2 mit 28 getauscht warum das so ist.

Code: Alles auswählen

Debug ""
Debug "Zeile 2 und 28 vertauschen"
*DB\SwapRows(2, 20)
ich würde das so interpretieren das hier Zeile 2 mit 20 getauscht wird?
der ist aus den Beispiel
danke für die Infos
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Die Links von NicTheQuick sind alle tot.
Es kommt eine Error-Seite und dann die Page von Lycos.de.
Kann die DB.PBI nicht mehr heruntergeladen werden?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten