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?