1.9k Aufrufe
Gefragt in Datenbanken von
Guten Tag

www.supportnet.de/listthread/177076

Dieses Thema wurde bereits in einem Thread aus dem Jahre 2004 bearbeitet, allerdings funktioniert die Lösung bei mir scheinbar nicht. Sowieso is mir schleierhaft, warum listBox.selected(i) = true "manchmal" funktioniert und manchmal nicht. Bzw. wenn ich einen normalen Button neheme und in dessen Click-Ereignis die Methode selected(i) = true aufrufe, dann funktioniert's perfekt.

Private Sub btnNext_Click()

Me.Recordset.MoveNext

lstDatenpunkt.selected(Me.Recordset.absolutePosition+1) = true

End Sub

Diese Lösung ist aber sehr problematisch, da man an jeder Stelle des Programs, an der der Datensatzzeiger auf einen anderen Datensatz gesetzt wird die Methode aufrufen muss. Eleganter wäre es die Methode selected(i) = true in der Ereignisroutine Form_Current() zu implementieren, da diese Routine immer dann aufgerufen wird, wenn der Datensatzzeiger auf einen anderen Datensatz zeigt. Leider erhalte ich nach dem öffnen des Formulars beim anklicken irgendeines Controls die Meldung "Update oderCancelUpdate ohne AddNew oder Edit".
Im Thread aus dem jahre 2004 wird geschrieben, dass anstelle von

Me.listBox.selected(i) = true

Me.ListBox = i

verwendet werden soll - aber da tut sich bei mir gar nichts. Hat da jemand eine Erklarung dafür?

Ich verwende Access2000 auf win xp.

Gruss

Chris

6 Antworten

0 Punkte
Beantwortet von rahi Experte (1.4k Punkte)
Hallo Chris,

Die Position im recordset hat nichts mit der Position in der Listbox gemeinsam. Das wird besonders
deutlich, wenn deine Funktion mit einer anderen Sortierung durchgeführt wird.

Gruß
Ralf
0 Punkte
Beantwortet von
Moin Ralf

Das ist mir durchaus bewust, Formular und Listbox haben auch unterschiedliche SELECT-Statements, schliesslich soll die Listbox nur einen Überblick über den Datenbestand geben, es werden dabei nicht alle Felder des Formulars in der Lisbox dargestellt.
Die Fehlermeldung "Update oder CancelUpdate ohne AddNew oder Edit" erscheint ja desshalb, weil irgendwo in den tiefen von MS-Access ein RecordSet.Update (oder .CancelUpdate) ausgeführt wird ohne, das vorher .Add oder .Edit ausgeführt wurde. Nur ist mir schleierhaft, warum beim Öffnen des Formulars überhaupt irgendwo .Update aufgerufen werden sollte, es wurde bisher werder ein Datensatz geändert noch hinzugefügt!
Nach dem Drücken von Esc lässt sich anschliessend, fehlerfrei durch den Datensatz navigieren und, der korrespodierende Datensatz wird in der Liste hervorgehoben dargestellt - die Methode .selected(i) = true funktioniert soweit also schon.
Vielleicht sollte ich die Routiene für die Datenbanklabfrage und füllen der Listbox selber ausprogrammieren, es kann möglicherweise sen, dass die verschiedenen Controls die gleiche Instanz von Recordset verwenden und sich damit irgendwie ins Gehege kommen, wer weiss.

Gruss

Chris
0 Punkte
Beantwortet von rahi Experte (1.4k Punkte)
Hallo Chris,

ist deine Listbox eventuell mit einem Feld aus dem Recordset des Formulars verknüpft?

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo Ralf

Das Listenfeld ist ungebunden, es bezieht den Inhalt aus einer eigenen Abfrage, das Feld "Steuerelementinhalt" ist leer.
Es ist mir überhaupt schleierhaft wieso so eine Meldung überhaupt kommen sollte, schliesslich wurde das Formular erst gerade aufgebaut, es wurde nie ein Datensatz editiert oder hinzugefügt - warum dann ausgerechnet ListBox(i) = true ausgerechnet ein Recordset.Update ausführen sollte, ist noch kurioser.

Ich hab' echt langsam keine Ahnung mehr, was ich noch tun soll!!

Gruss

Chris
0 Punkte
Beantwortet von
Scheinbar ist es nicht möglich, die Ursache dieses Problems herauszufinden - schade. Ich glaube es handelt sich ganz einfach um einen Bug, leider konnte ich bisher nirgends eine Lösung finden.

Da es nach Druck auf ESC funktioniert, rufe ich jetzt nach

ListBox.selecxted(i) = true

noch ein

SendKeys "{ESC}"

auf. Das ist zwar "gebastel", aber es scheint, "ausnahmsweise einmal ohne Nebenwirkungen", zu funktionieren.
0 Punkte
Beantwortet von rahi Experte (1.4k Punkte)
Hallo Gruber46,

habe dein Problem ein bißchen aus den Augen verloren. wenn du willst, kannst dumir die db
mal zuschicken. email: gruber46.5.hinki@spamgourmet.com

Gruß
Ralf
...