Hallo.
Brauche mal wieder eure Hilfe. Und zwar habe ich ein Kombinationsfeld, welches ich zum Suchen von Datensätzen
nutze. Auch mittels von Teilworten.
Dazu habe ich zum Anzeigen aller Datensätze einmal folgenden Code im Ereignis Fokuserhalt:
Private Sub Auswahl1_GotFocus()
10 On Error GoTo Auswahl1_GotFocus_Error
Dim suchSQL As String
20 suchSQL = "SELECT Aufträge_Holzlisten.Listennummer, Kunden.[Name der Firma], Aufträge_Holzlisten.Gesamt_FM AS [Fm Gesamt], " & _
"Aufträge_Holzlisten.Stämme_gezählt AS Stämme, Aufträge_Holzlisten.Anzahl_polter AS Polter " & _
"FROM Aufträge_Holzlisten LEFT JOIN Kunden ON Aufträge_Holzlisten.[Betrieb-NR] = Kunden.[Kunden-Nr] " & _
"ORDER BY Aufträge_Holzlisten.Holi_Datum DESC;"
30 Me.Auswahl1.RowSource = suchSQL
40 Me.Auswahl1.Dropdown
50 On Error GoTo 0
60 Exit Sub
Auswahl1_GotFocus_Error:
70 MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Auswahl1_GotFocus, line " & Erl & "."
End Sub
Zum Suchen mittels Teilworten habe ich im "Bei Änderung"-Ereignis folgenden Code:
Private Sub Auswahl1_Change()
10 On Error GoTo Auswahl1_Change_Error
Dim suchSQL As String
20 suchSQL = "SELECT Aufträge_Holzlisten.Listennummer, Kunden.[Name der Firma], Aufträge_Holzlisten.Gesamt_FM AS [Fm Gesamt], " & _
"Aufträge_Holzlisten.Stämme_gezählt AS Stämme, Aufträge_Holzlisten.Anzahl_polter AS Polter " & _
"FROM Aufträge_Holzlisten LEFT JOIN Kunden ON Aufträge_Holzlisten.[Betrieb-NR] = Kunden.[Kunden-Nr] " & _
"WHERE (((Aufträge_Holzlisten.Listennummer) Like '*" & Me.Auswahl1.Text & "*')) " & _
"ORDER BY Aufträge_Holzlisten.Holi_Datum DESC;"
30 Me.Auswahl1.RowSource = suchSQL
40 Me.Auswahl1.Dropdown
50 On Error GoTo 0
60 Exit Sub
Auswahl1_Change_Error:
70 MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Auswahl1_Change, line " & Erl & "."
End Sub
Und zur Übergabe des gewünschten Datensatzes folgenden Code im "Nach Aktualisierung"-Ereignis
Private Sub Auswahl1_AfterUpdate()
10 On Error GoTo Auswahl1_AfterUpdate_Err
20 If IsNull(Me.Auswahl1) Then Exit Sub
30 DoCmd.GoToControl "Listennummer"
40 DoCmd.FindRecord Auswahl1, acEntire, False, acDown, False, acCurrent, True
50 ' Me.Auswahl1 = Null
Auswahl1_AfterUpdate_Exit:
60 Exit Sub
Auswahl1_AfterUpdate_Err:
70 MsgBox Error$
80 Resume Auswahl1_AfterUpdate_Exit
End Sub
Soweit klappt auch alles wunderbar. Nur bekomme ich nach der Datensatzübernahme
den Fehler 2185.
(Sie können auf Eigenschaften oder Methoden eines Steuerelements nur verweisen, wenn das Steuerelement den Fokus hat.)
Der Fehler ist in der Procedure Auswahl1_Change Zeile 20.
Was muss ich da korrigieren?
Gruß
Hubert
Zitat von: trebuh am Oktober 25, 2019, 20:40:54
Der Fehler ist in der Procedure Auswahl1_Change Zeile 20.
Hallo Hubert,
dein Problem ist offenbar, dass der Change Code ausgelöst wird, wenn du die Daten übernehmen willst.
Ich würde mal darauf tippen, dass du entweder Enter oder Tab drückst.
Du musst dir also eine Strategie überlegen, wie du die Ausführung des Changes Codes unterbinden kannst, wenn du gar nicht mehr suchst.
Eine Möglichkeit wäre, zu prüfen, ob sich der Focus auf dem Control Auswahl1 befindet.
Eine weitere Möglichkeit: du verwendest ein anderes Event.
Ich hätte vermutlich das KeyUp Event verwendet, bin mir aber nicht sicher, da die gesamte Vorgehensweise Datenbank-technisch mehr als bedenklich ist.
Wenn überhaupt würde ich so was nur mittels Filter im Recordset umsetzen und nicht bei jedem Zeichen alle Daten erneut von der Datenbank anfordern - zumindest so bald die Daten über ein Netzwerk müssen.
Es gibt natürlich noch eine Reihe weiterer Möglichkeiten.
Da das Problem aber klar ist, kannst du das ja selbst überlegen.
Hallo!
NotInList ist auch ganz praktisch.
Ein Beispiel mit einer Combobox, in der man Einträge innerhalb der Combobox filtern kann:
http://www.access-codelib.net/download/samples/ComboboxFilterControlTest.zip
mfg
Josef
Hallo.
Danke für die Antwort.
Na da werde ich die Vorgehensweise wohl nochmal überdenken.
Das Kombinationsfeld war, oder ist ürsprünglich als gezieltes Auswählen von Datensätzen gedacht.
Da ich den Code zum Suchen mit Teilworten gefunden habe, dachte ich, daß ich das einfach mal probiere.
Auslöser des Fehlers ist im Prinzip, wenn ich den gefundenen Datensatz mit der Maus anklicke.
Werde es mal mit dem Filtern probieren, bzw. mal mit dem NotinList.
Gruß
Hubert