Seite 8 von 9

Verfasst: 19.10.2006 12:21
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

Verfasst: 19.10.2006 15:08
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?

Verfasst: 19.10.2006 15:25
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

Verfasst: 19.10.2006 15:28
von NicTheQuick
Du solltest weiterlesen und den Code testen... :wink:

Verfasst: 19.10.2006 15:33
von Kiffi
NicTheQuick hat geschrieben:Du solltest weiterlesen und den Code testen... :wink:
Ah! Sorry, my fault! :oops:

Grüße ... Kiffi

Verfasst: 30.10.2006 11:44
von dysti
Jetzt fehlt nur noch die Sortierung einer Spalte nach dem ABC.

Verfasst: 12.11.2006 03:32
von ts-soft
Mit PB4.01 scheints nicht mehr zu funktionieren :cry:
Hab hier nen Invaliden

Verfasst: 04.12.2006 15:48
von NicTheQuick
Was genau funktioniert denn nicht? /:->

Bei mir klappt nämlich alles.
Hast du ein Beispiel?

Verfasst: 13.04.2007 01:54
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

Verfasst: 02.05.2007 14:46
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?