Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AMB am Februar 18, 2014, 09:30:35

Titel: Datensatz über Kombinationsfeld auswählen
Beitrag von: AMB am Februar 18, 2014, 09:30:35
Hallo Zusammen,

In einem Formular habe ich zwei ungebundene Kombinationsfelder. Hierüber sollen die entsprechenden Datensätze ausgewählt werden. Kombifeld1 nur die Aktiven, Kombifeld2 Alle.
Die Datensatzherkunft ist eine Abfrage.
Code der Felder:
-Private Sub cboAktiv_AfterUpdate()
'Datensatz speichern'
DoCmd.RunCommand acCmdSaveRecord
On Error GoTo Fehler
'Datensatz anwählen'
Dim Datensatz1 As Object
    Set Datensatz1 = Me.Recordset.Clone
    Datensatz1.FindFirst "tblQMA0500901ID = " & Int(Me!cboAktiv)
    If Not Datensatz1.EOF Then Me.Bookmark = Datensatz1.Bookmark
Me.Refresh
Exit Sub
Fehler:
    MsgBox Err.Description & vbCrLf & Err.Number
End Sub
-Private Sub cboAktiv_GotFocus()
Me.Refresh
End Sub

-Private Sub cboAlle_AfterUpdate()
'Datensatz speichern'
DoCmd.RunCommand acCmdSaveRecord
On Error GoTo Fehler
'Datensatz anwählen'
Dim Datensatz2 As Object
    Set Datensatz2 = Me.Recordset.Clone
    Datensatz2.FindFirst "tblQMA0500901ID = " & Int(Me!cboAlle)
    If Not Datensatz2.EOF Then Me.Bookmark = Datensatz2.Bookmark
Me.Refresh
Exit Sub
Fehler:
    MsgBox Err.Description & vbCrLf & Err.Number
End Sub
-Private Sub cboAlle_GotFocus()
Me.Refresh
End Sub

Das funktionierte bis zu einer gewissen Anzahl von Datensätzen einwandfrei.
Nun ist es allerdings so, dass (manchmal) nach der Auswahl ein falscher Datensatz angezeigt wird. Oder der richtige Datensatzsatz wird angezeigt und beim Ändern des Datensatzes wird direkt in den falschen Datensatz gesprungen und dort die Änderung eingetragen.
Der wird dann immer um genau 100 Datensätze zurückgesprungen. Nur wenn ich das Formular verlasse und neu öffne, passiert dies nicht.

Wo liegt der Fehler? Jemand eine Idee?
Gruß
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: Hondo am Februar 18, 2014, 09:59:53
Hallo,
was genau möchtest du jetzt machen? Den entsprechenden Datensatz mittels ungebundenem Kombinationsfeld auswählen?
Warum verwendest du dann nicht einfach einen Filter?
Private Sub cboAktiv_AfterUpdate()
    Me.Filter = "Textfeld='" & Me.cboAktiv & "'"
    Me.FilterOn = True
End Sub
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: DF6GL am Februar 18, 2014, 10:04:40
Hallo,

neben dem was Hondo sagt, frage ich mich, warum Me.Refresh nach dem Positionieren auf den Datensatz gemacht wird..


Und beim Aktualisieren der Kombiliste(n) , was vermutlich bezweckt werden soll, wäre ein Requery des Kombis angebrachter (bei "Enter"-Ereignis, sollte es überhaupt nötig sein)


Private Sub cboAktiv_Enter()
Me.Requery
End Sub
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: AMB am Februar 18, 2014, 12:40:51
Hallo,

ich habe es nun mal über die Methode von Hondo probiert, aber bekomme nur eine Fehlermeldung:
Datentypenkonflikt in Kriterienausdruck
3464

Was ist an meiner Methode falsch?
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: Hondo am Februar 18, 2014, 13:08:18
Warum postest du deinen Code nicht?
So können wir nur raten dass die gebundene Spalte im Kombinationsfeld ein Zahlenfeld ist.
Dann müsstest du die Hochkommatas entfernen.
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: AMB am Februar 18, 2014, 15:45:28
Die Spalte ist ein Zahlenfeld (ID). Die Hochkommatas habe ich nun entfernt.
Code:
Me.Filter = "tblQMA0500901ID= Me.cboAlle"
Me.FilterOn = True

Wenn ich nun einen Datensatz auswähle, dann kommt eine Parameterabfrage.
1. Der Datensatz soll aber über das Kombifeld ausgewählt werden, keine Parameterabfrage
2. Eine erneute Abfrage eines weiteren Datensatzes soll auch möglich sein (ist in dem Fall nicht möglich)
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: Hondo am Februar 18, 2014, 16:40:46
Verweis auf Formularfelder müssen außerhalb des Strings sein:
Me.Filter = "tblQMA0500901ID = " & Me.cboAlle
Titel: Re: Datensatz über Kombinationsfeld auswählen
Beitrag von: bahasu am Februar 18, 2014, 17:39:27
Hi,

anbei ein Vorschlag, der auch einen leeren Inhalt im Auswahlfeld berücksichtigt.

Private Sub cboAlle_AfterUpdate()
    If Nz(Me.cboAlle, 0) > 0 Then
        Me.Filter = "tblQMA0500901ID=" & Me.cboAlle
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub


Harald