Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fehler im Kombinationsfeld bei "Change-Ereignis"

Begonnen von trebuh, Oktober 25, 2019, 20:40:54

⏪ vorheriges - nächstes ⏩

trebuh

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


markusxy

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.

Josef P.

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

trebuh

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