New user
Beiträge: 2
| Hallo allseits
Nach vielen Jahren Erfahrung mit MS Access, bin ich auf einen mir bisher gänzlich unbekannten Bug gestossen. Ich habe keine diesbezügliche Dokumentation im Web gefunden; kann mich natürlich täuschen. Oder kennt jemand eine entsprechende Dok? Soll ich den Bug irgendwo "offiziell" deponieren? Es geht um rs.FindFirst, rs.FindNext, rs.FindPrevious beim Suchen mit Strings die Hochkommata enthalten. Zusammenfassend: Wenn in einem DAO.Recordset, das mit dbOpenDynaset geöffnet wurde, mittels .FindFirst oder .FindNext oder .FindPrevious gesucht wird, und zwar mit einem Suchstring, der ein oder mehrere Hochkommata enthält, und wenn ausserdem das Such-Feld indexiert ist, dann funktioniert rs.FindFirst etc nicht; ein eigentlich vorhandener Datensatz wird nicht gefunden!
Wenn eines der Kriterien nicht erfüllt ist, also z.B. wenn dbOpenSnapshot statt dbOpenDynaset, wenn der Suchstring kein Hochkomma enthält, wenn das Such-Feld nicht indexiert ist, dann funktioniert .FindFirst etc. tiptop. Hinweise: Selbstverständlich muss im Suchstring das Hochkomma verdoppelt sein, also so etwas "ABC''DEF". Ich habe nur DAO.Recordset getestet. Mein Test mit rs.findprevious ist unten nicht abgebildet. Mich interessiert Eure Meinung dazu, vielen Dank. Hier mein Test (Auszug) zur Dokumentation: -------------------------------------------------------------------------------------------------- Public Sub TESTFindFirst() Dim rs As DAO.Recordset
' Ausgangslage:
' Tabelle "MeineTabelleT", zwei Records, drei Felder, wie folgt: ' Felder: ' ID MeinFeldIndexiert MeinFeldNichtIndexiert ' Inhalte: ' 1 TestWert1a TestWert1b ' 2 TestWert'2a TestWert'2b Beachte: Die Felder enthalten Strings mit Hochkommata.
' Zur Kontrolle mit DLookup: Ergebnis: DLookupfunktioniert tadellos Debug.Print DLookup("ID", "MeineTabelleT", "MeinFeldIndexiert = 'TestWert''2a'" ' ergibt den Wert 2, weil ID = 2 Debug.Print DLookup("ID", "MeineTabelleT", "MeinFeldNichtIndexiert = 'TestWert''2b'" ' ergibt den Wert 2, weil ID = 2 ' nun mit FindFirst ' -------------------- ' a) mit dbOpenSnapshot: Alle .findfirst-Fälle bringen korrekte Ergebnisse!
Set rs = CurrentDb.OpenRecordset("MeineTabelleT", dbOpenSnapshot) rs.FindFirst "MeinFeldIndexiert = 'TestWert1a'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt rs.FindFirst "MeinFeldNichtIndexiert = 'TestWert1b'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt rs.FindFirst "MeinFeldIndexiert = 'TestWert''2a'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt rs.FindFirst "MeinFeldNichtIndexiert = 'TestWert''2b'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt ' -------------------- ' b) nun mit dbOpendynaset
Set rs = CurrentDb.OpenRecordset("MeineTabelleT", dbOpenDynaset) rs.FindFirst "MeinFeldIndexiert = 'TestWert1a'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt, weil kein Hochkomma im Suchstring rs.FindFirst "MeinFeldNichtIndexiert = 'TestWert1b'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt, weil kein Hochkomma im Suchstring ' !!!!!!!!!!!!!!!!!!!!!!!! BUG! rs.FindFirst "MeinFeldIndexiert = 'TestWert''2a'" Debug.Print rs.NoMatch ' ergibt WAHR, also NoMatch, was NICHT KORREKT ist. !!!!!!!!!!!!!!!!!!! ' !!!!!!!!!!!!!!!!!!!!!!!! rs.FindFirst "MeinFeldNichtIndexiert = 'TestWert''2b'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt, weil Feld nicht indexiert ist. ' ------------------------------- ' Tests mit FindNext? Ebenfalls Buggy! Set rs = CurrentDb.OpenRecordset("MeineTabelleT", dbOpenDynaset) ' !!!!!!!!!!!!!!!!!!!!!!!! BUG, also auch mitFindNext! rs.FindFirst "ID = 1" rs.FindNext "MeinFeldIndexiert = 'TestWert''2a'" Debug.Print rs.NoMatch ' ergibt WAHR, also NoMatch, was NICHT KORREKT ist. !!!!!!!!!!!!!!!!!!! ' !!!!!!!!!!!!!!!!!!!!!!!! rs.FindFirst "ID = 1" rs.FindNext "MeinFeldNichtIndexiert = 'TestWert''2b'" Debug.Print rs.NoMatch ' ergibt FALSE, korrekt, weil Feld nicht indexiert ist. End Sub
|