Neuigkeiten:

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

Mobiles Hauptmenü

Mehrere Kriterien in Abfrage

Begonnen von Paul Meixner, Januar 11, 2023, 13:28:19

⏪ vorheriges - nächstes ⏩

Paul Meixner

Liebe Spezialisten,
habe sicherlich zu wenig VBA Grundkenntnisse :'(
Möchte ein Unterformular mit Daten einer Abfrage füllen.
Kriterium für Firma (aus Combobox) '    'Wie "*" & [Formulare]![frm_Projekt]![cbxFirma] & "*"
Kriterium für Gewerk(aus Combobox) '    'Wie "*" & [Formulare]![frm_Projekt]![cbxGewerk] & "*"
Kriterium für Belegtyp (aus Listenfeld) siehe Code.
Leider wird nach dem Ausführen die grundlegende Abfrage reduziert und nur noch die Spalte mit dem erzeugten Kriterium gefiltert?!

Wie bekomme ich es hin, damit alle 3 Kriterien abgefragt werden und wie kann ich den Belegtyp auch wieder entsprechen 'Wie "*" & [Formulare]![frm_Projekt]![lbxBelegtyp] & "*" leeren.

Vielen Dank für eine Lösung.
Gruß OttoPrivate Sub Befehl98_Click()

'Meine Variablen
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim varItem As Variant
    Dim strCriteria As String
    Dim strSQL As String

'Abrufen der Datenbank und der gespeicherten Abfrage
    Set db = CurrentDb()
    Set qdf = db.QueryDefs("qry_Belege")
   
' Durchlaufen der ausgewählten Elemente im Listenfeld und Erstellen einer Textzeichenfolge
    For Each varItem In Me!lbxBelegtyp.ItemsSelected
        strCriteria = strCriteria & "," & Me!lbxBelegtyp.ItemData(varItem) & ""
    Next varItem
   
'Überprüfen ob ich etwas ausgewählt habe
    If Len(strCriteria) = 0 Then
    MsgBox "Es wurde kein Belegtyp ausgewählt" _
            , vbExclamation, "Pauli!"
        Exit Sub
    End If
   
'Entfernen des führenden Kommas aus der Zeichenfolge
    strCriteria = Right(strCriteria, Len(strCriteria) - 1)
   
'Erstellen der newSQL-Anweisung mit der Zeichenfolge
    strSQL = "SELECT * FROM tbl_Belege " & _
             "WHERE tbl_Belege.Typ_Nr IN(" & strCriteria & ");"             
             Debug.Print strSQL

' Anwenden der neuen SQL-Anweisung auf die Abfrage
        qdf.SQL = strSQL
   
'Aktualisieren Abfrage
     'Me.Requery '"qry_Belege"
   
   
'Leeren Sie den Speicher
    Set db = Nothing
    Set qdf = Nothing

End Sub

'    'Wie "*" & [Formulare]![frm_Projekt]![cbxFirma] & "*"


Private Sub cbxFirma_AfterUpdate()
    PID2 = Me!P_ID
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxFirma_DblClick(Cancel As Integer)
    PID2 = Me!P_ID
    Me.cbxBelegtyp = ""
    Me.cbxFirma = ""
    Me.cbxGewerk = ""
    'Me.Requery
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub


Beaker s.a.

Hallo Paul,
Zunächst mal gibt ein Kombi immer den ganzen Feldinhalt der
ausgewählten Spalte zurück,- da braucht es kein LIKE (Wie)
und das ganze Joker-Geraffel, ein einfaches "=" genügt.
Die Kriterien für Firma und Gewerk sind vermutlich in der
Abfrage fest hintelegt. Wenn du nun den SQL-String der
Abfrage änderst, überschreibst du diese Kriterien. die müssen
also wieder rein (oder gleich rauslassen)
(Luftcode)
strSQL = "SELECT * FROM tbl_Belege " & _
             "WHERE Firma = [Forms]![frm_Projekt]![cbxFirma] " & _
             " AND Gewerk = [Forms]![frm_Projekt]![cbxGewerk] " &
             " AND Typ_Nr IN(" & strCriteria & ")"

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Paul Meixner

Hi Ekkehard,
vielen Dank, könnte dich "knutschen" :)
Musste erstmals noch bei deinem Code den & _ in der zweiten Zeile setzen, aber soweit reichen meine Kenntnisse.
Das "Joker-Geraffel" war angedacht Wie "*" um wieder Alle Datensätze anzuzeigen, bzw. falls ich nur ein Kriterium abfragen will, vom Rest alles angezeigt wird.
Bei Wie "*" bekomme ich, da ich jeweils die X_Nr abfrage, auch mehrfache Werte z.B. 1,11,21... überall wo eine  1(Zahl) drin ist, hierfür habe ich auch noch keine Lösung :'(
Die PID Funktion benötige ich auch, da es mehre Projekt gibt und ich wieder zum aktuellem Projekt kommen muss.

Wie könnte ich das hinbekommen?
Könntest mich nochmal glücklich machen und mir viel Zeit sparen, vielen Dank im Voraus.

Beste Grüße Paul

    strSQL = "SELECT * FROM tbl_Belege " & _
            "WHERE F_Nr = [Forms]![frm_Projekt]![cbxFirma] " & _
            " AND G_Nr = [Forms]![frm_Projekt]![cbxGewerk] " & _
            " AND Typ_Nr IN(" & strCriteria & ")"

            Debug.Print strSQL

' Anwenden der neuen SQL-Anweisung auf die Abfrage
        qdf.SQL = strSQL
   
'Öffnender Abfrage
    PID2 = Me!P_ID
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True

Josef P.

Hallo!

    strSQL = "SELECT * FROM tbl_Belege " & _
            "WHERE F_Nr = [Forms]![frm_Projekt]![cbxFirma] " & _
            " AND G_Nr = [Forms]![frm_Projekt]![cbxGewerk] " & _
            " AND Typ_Nr IN(" & strCriteria & ")"
In diesem Code mischt du einen dynamisch generierten SQL-Filterausdruck (strCriteria) mit einem direkten Zugriff auf Formular-Steuerelemente.

In Zusammenhang mit
ZitatDas "Joker-Geraffel" war angedacht Wie "*" um wieder Alle Datensätze anzuzeigen, bzw. falls ich nur ein Kriterium abfragen will, vom Rest alles angezeigt wird.
schlage ich vor, dass du nur einen dynamisch zusammengesetzte Filterausdruck verwendest, dann kannst du die Filterbedingungen weg lassen, wenn in cbxFirma oder cbxGewerk nichts ausgewählt ist.

Prinzip
dim FilterString as String
dim SqlText as String

with [Forms]![frm_Projekt] ' oder Me falls [Forms]![frm_Projekt] das Formular von diesem Code ist
   if !cbxFirma.Value > 0 then
      FilterString = "F_Nr = " & !cbxFirma.Value
   end if

   if !cbxGewerk.Value > 0 then
      if len(FilterString) > 0 then
         FilterString = FilterString  & " AND "
      end if
      FilterString =  FilterString & "G_Nr = " & !cbxGewerk.Value
   end if

   if len(strCriteria) > 0 then
      if len(FilterString) > 0 then
         FilterString = FilterString  & " AND "
      end if
      FilterString =  FilterString & "Typ_Nr IN (" & strCriteria & ")"
   end if

   strSQL = "SELECT * FROM tbl_Belege"
   if len(FilterString) then
      strSQL = strSQL  & " where " & FilterString
   end if

   qdf.SQL = strSQL

end with

Bei Änderung von cbxFirma oder cbxGewerk muss die Abfrage neu geschrieben werden.


Alternative:
Statt die Abfrage des Unterformulars zu ändern, die Filterbedingungen an das Unterformular weitergeben (Filter-Eigenschaft des Formulars verwenden) und dafür eine ungefilterte Datenquelle einsetzen.

Zum Setzen von Filterwerten für eine Formular sollten einige Beispiele zu finden sein.

Gruß
Josef




Beaker s.a.

Hallo,
@Josef
ZitatIn diesem Code mischt du einen dynamisch generierten SQL-Filterausdruck (strCriteria) mit einem direkten Zugriff auf Formular-Steuerelemente.
Mein Fehler  :( ; - frag mich nicht, wie ich das verbrochen habe.

@Paul
Josefs Vorschlag mit einem Filter ist auf jeden Fall dynamischer,
und zum Anzeigen aller DS musst du den Filter nur löschen.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Paul Meixner

Moin, Moin

Erstmal Danke, bin wirklich positiv überrascht, wie schnell und freundlich in diesem Forum reagiert wird!

Melde mich erst heute, da ich gestern den ganzen Tag versucht habe den Code von Josef einzubauen, musste weinend abbrechen, da ich schlicht und ergreifend zu "doof" bin diesen irgendwie hinzubekommen :'(
Dynamisch kenne ich nur aus meinem Statik Programm und direkten Zugriff von irgendwelchen Polizeieinsätzen ;)

War vorher mit "Excel" unterwegs, da gibt es eine wunderbare Funktion "Datenschnitt", eine oder mehrere Felder auswählen, anschauen/bearbeiten, Filter löschen und gut iss :)  das wäre das was ich brauche.
Hatte jedoch keine Ahnung wie schwierig das ist in ACCESS umzusetzen, jedoch habe ich jetzt "Lunte" geschnuppert, was hier alles möglich wäre/ist, wenn man weiß wies geht (gilt ja für viele Dinge :) )

Prinzip, eine Firma kann mehrere Gewerke ausführen, dazu gibt es Beleg mit verschiedenen Typen.
Ein Gewerk kann von mehreren Firmen ausgeführt werden, meine Idee mit der Abfrage war, das ich aus der aktuell gefilterte Anzeige im Formular sofort einen Bericht (Belegliste...) abrufen kann.

[code]
Private Sub Befehl120_Click()

'Deklarieren von Variablen
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim varItem As Variant
    Dim strCriteria As String
    Dim strSQL As String
'Abrufen der Datenbank und der gespeicherten Abfrage
    Set db = CurrentDb()
    Set qdf = db.QueryDefs("qry_Belege")
   
' Durchlaufen der ausgewählten Elemente im Listenfeld und Erstellen einer Textzeichenfolge
    For Each varItem In Me!lbxBelegtyp.ItemsSelected
        strCriteria = strCriteria & "," & Me!lbxBelegtyp.ItemData(varItem) & ""
    Next varItem
   
'Überprüfen Sie, ob der Benutzer etwas ausgewählt hat
    If Len(strCriteria) = 0 Then
    MsgBox "Es wurde kein Belegtyp ausgewählt" _
            , vbExclamation, "Pauli!"
        Exit Sub
    End If
   
'Entfernen des führenden Kommas aus der Zeichenfolge
    strCriteria = Right(strCriteria, Len(strCriteria) - 1)

    Dim FilterString As String
    Dim SqlText As String
   
    With [Forms]![frmProjekt] ' oder Me falls [Forms]![frmProjekt] das Formular von diesem Code ist
      If !cbxFirma.Value > 0 Then
          FilterString = "F_Nr = " & !cbxFirma.Value
      End If
   
      If !cbxGewerk.Value > 0 Then
          If Len(FilterString) > 0 Then
            FilterString = FilterString & " AND "
          End If
          FilterString = FilterString & "G_Nr = " & !cbxGewerk.Value
      End If
   
      If Len(strCriteria) > 0 Then
          If Len(FilterString) > 0 Then
            FilterString = FilterString & " AND "
          End If
          FilterString = FilterString & "Typ_Nr IN (" & strCriteria & ")"
      End If
   
      strSQL = "SELECT * FROM tbl_Belege"
      If Len(FilterString) Then
          strSQL = strSQL & " where " & FilterString
      End If
     
      Debug.Print strSQL
   
      qdf.SQL = strSQL
   
    End With
   
    Me.Requery
   
End Sub


Private Sub Befehl98_Click()

'Deklarieren von Variablen
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim varItem As Variant
    Dim strCriteria As String
    Dim strSQL As String
'Abrufen der Datenbank und der gespeicherten Abfrage
    Set db = CurrentDb()
    Set qdf = db.QueryDefs("qry_Belege")
   
' Durchlaufen der ausgewählten Elemente im Listenfeld und Erstellen einer Textzeichenfolge
    For Each varItem In Me!lbxBelegtyp.ItemsSelected
        strCriteria = strCriteria & "," & Me!lbxBelegtyp.ItemData(varItem) & ""
    Next varItem
   
'Überprüfen Sie, ob der Benutzer etwas ausgewählt hat
    If Len(strCriteria) = 0 Then
    MsgBox "Es wurde kein Belegtyp ausgewählt" _
            , vbExclamation, "Pauli!"
        Exit Sub
    End If
   
'Entfernen des führenden Kommas aus der Zeichenfolge
    strCriteria = Right(strCriteria, Len(strCriteria) - 1)
   
'Erstellen der newSQL-Anweisung mit der Zeichenfolge

               
    strSQL = "SELECT * FROM tbl_Belege " & _
            "WHERE F_Nr = [Forms]![frmProjekt]![cbxFirma] " & _
            " AND G_Nr = [Forms]![frmProjekt]![cbxGewerk] " & _
            " AND Typ_Nr IN(" & strCriteria & ")"
           
            Debug.Print strSQL

' Anwenden der neuen SQL-Anweisung auf die Abfrage
        qdf.SQL = strSQL
   
'Öffnender Abfrage
   
    PID2 = Me!P_ID 'Projektnummer zwischenspeicher
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
       
'Leeren Sie den Speicher
    'Set db = Nothing
    'Set qdf = Nothing

End Sub

'    'Wie "*" & [Formulare]![frmProjekt]![qryBelegtyp] & "*"

Private Sub cbxBelegtyp_AfterUpdate()
    PID2 = Me!P_ID
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxBelegtyp_DblClick(Cancel As Integer)
    PID2 = Me!P_ID
    Me.lbxBelegtyp = ""
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxFirma_AfterUpdate()
    Dim FilterString As String
    Dim SqlText As String
   
    With [Forms]![frmProjekt] ' oder Me falls [Forms]![frmProjekt] das Formular von diesem Code ist
     
      If !cbxFirma.Value > 0 Then
          FilterString = "F_Nr = " & !cbxFirma.Value
      End If
        strSQL = "SELECT * FROM tbl_Belege"
      If Len(FilterString) Then
          strSQL = strSQL & " where " & FilterString
      End If
     
      Debug.Print strSQL
   
      qdf.SQL = strSQL
   
    End With
   
    Me.Requery
     
     
'    PID2 = Me!P_ID
'    DoCmd.Requery
'    DoCmd.GoToControl "P_ID"
'    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxFirma_DblClick(Cancel As Integer)
    PID2 = Me!P_ID
    Me.lbxBelegtyp = ""
    Me.cbxFirma = ""
    Me.cbxGewerk = ""
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxGewerk_AfterUpdate()
PID2 = Me!P_ID
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

Private Sub cbxGewerk_DblClick(Cancel As Integer)
    PID2 = Me!P_ID
    Me.cbxGewerk = ""
    'Me.Requery
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
End Sub

@ Ekkehard und Josef, evtl. könnt ihr mir nochmal unter die Arme greifen?
Anbei nochmal mein aktueller Code.
Mein Dank  wir euch ewig nachschleichen.

Beste Grüße Paul

Josef P.

Hallo!

Vorab ein Tipp: wenn du den Code in mehre Prozeduren aufteilst, wird er meiner Meinung nach verständlicher.

Ich lasse einmal den Inhalt deines Filter-Codes (fast) gleich (den Rest habe ich nicht übernommen) und strukturiere ihn nur etwas um und ergänze ihn mit Kommentaren.


Private Sub Befehl120_Click()
' Name des CommandButtons ist ursuper, da weiß man gleich welcher das ist. ;)

   ' Prüfung, ob etwas ausgewählt wurde, bereits vor dem Erstellen des Filters durchführen
   ' .. falls das überhaupt notwendig ist (eventuell diese Prüfung in die Prozedur ApplyFilter verschieben)
   If Me!lbxBelegtyp.ItemsSelected.Count = 0 Then
      MsgBox "Es wurde kein Belegtyp ausgewählt" _
            , vbExclamation, "Pauli!"
        Exit Sub
   End If

   ApplyFilter

End Sub

Private Sub ApplyFilter()
' Diese Prozedur überall dort aufrufen, wo Filterwerte geändert werden

'Deklarieren von Variablen
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
   
    Dim strSQL As String
'Abrufen der Datenbank und der gespeicherten Abfrage
    Set db = CurrentDb()
    Set qdf = db.QueryDefs("qry_Belege")
   
' FilterString holen:
    Dim FilterString As String
    FilterString = CreateFilterString()
   
' SQL-Text zusammenstellen:
    Dim SqlText As String
   
    strSQL = "SELECT * FROM tbl_Belege"
    If Len(FilterString) Then
        strSQL = strSQL & " where " & FilterString
    End If
     
    Debug.Print strSQL
   
    qdf.SQL = strSQL
   
    Me.Requery
   
End Sub

Private Function CreateFilterString() As String

   Dim FilterString As String
   Dim BelegtypFilterString As String
   
   With Me
   
      If !cbxFirma.Value > 0 Then
          FilterString = "F_Nr = " & !cbxFirma.Value
      End If
   
      If !cbxGewerk.Value > 0 Then
          If Len(FilterString) > 0 Then
            FilterString = FilterString & " AND "
          End If
          FilterString = FilterString & "G_Nr = " & !cbxGewerk.Value
      End If
   
      BelegtypFilterString = CreateBelegtypFilterString()
      If Len(BelegtypFilterString) > 0 Then
          If Len(FilterString) > 0 Then
            FilterString = FilterString & " AND "
          End If
          FilterString = FilterString & BelegtypFilterString
      End If

    End With

    CreateFilterString = FilterString

End Function

Private Function CreateBelegtypFilterString() As String
   
   Dim varItem As Variant
   Dim strCriteria As String

   ' Durchlaufen der ausgewählten Elemente im Listenfeld und Erstellen einer Textzeichenfolge
    For Each varItem In Me!lbxBelegtyp.ItemsSelected
        strCriteria = strCriteria & "," & Me!lbxBelegtyp.ItemData(varItem) & ""
    Next varItem
   
'Überprüfen Sie, ob der Benutzer etwas ausgewählt hat
    If Len(strCriteria) = 0 Then
    MsgBox "Es wurde kein Belegtyp ausgewählt" _
            , vbExclamation, "Pauli!"
        Exit Function
    End If
   
'Entfernen des führenden Kommas aus der Zeichenfolge
    strCriteria = Right(strCriteria, Len(strCriteria) - 1)

    CreateBelegtypFilterString = "Typ_Nr IN (" & strCriteria & ")"

End Function


Gruß
Josef

Paul Meixner

Hi Josef, Danke für die schnelle Antwort.
Ich check es einfach nicht :'(
Habe deine Code eingebaut, der Stoppt nach Private Sub ApplyFilter() bei qdf.SQL = strSQL, Anzeige im Direktbereich SELECT * FROM tbl_Belege where F_Nr = 33 AND G_Nr =  AND Typ_Nr IN (1)
Komme da nicht weiter zu den nächsten Funktionen Private Function CreateFilterString() As String
Teile das ganze gerne auf, aber wie?
' .. falls das überhaupt notwendig ist (eventuell diese Prüfung in die Prozedur ApplyFilter verschieben) die Abfrage benötige ich eigentlich nicht, wenn ich Firma oder/und Gewerk gewählt habe sollten eigentlich dementsprechend alle Belege erscheinen.

Vielen Dank wenn du mir nochmal auf die Sprünge helfen könntest.

Name des CommandButtons ist ursuper, da weiß man gleich welcher das ist, da hast Du recht, habe schon soviel Kopien der Testdatenbanken auf dem Computer, das meine Festplatte fast voll ist ;), wenn ich mal einen Stand habe der funktioniert, werde ich die Befehle gut Beschriften. Möchte eh immer lieber "After Update" verwenden...

Beste  Grüße Paul

Josef P.

Vielleicht führst du statt
Private Sub Befehl120_Click()diese Prozedur aus:
Private Sub Befehl98_Click()
...
   strSQL = "SELECT * FROM tbl_Belege " & _
            "WHERE F_Nr = [Forms]![frmProjekt]![cbxFirma] " & _
            " AND G_Nr = [Forms]![frmProjekt]![cbxGewerk] " & _
            " AND Typ_Nr IN(" & strCriteria & ")"
          
            Debug.Print strSQL
...

Da fehlt die Prüfung ob in cbxFirma ein Wert enthalten ist.
Zitatwenn ich mal einen Stand habe der funktioniert, werde ich die Befehle gut Beschriften.
Möglicherweise würdest du einen funktionierenden Stand früher schaffen, wenn der Code übersichtlich wäre - und da gehören verständliche Steuerelementnamen dazu.
Gruß
Josef

Paul Meixner

Servus Josef,
dein Code funktioniert vom "Feinsten" 8)
Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht :(
Die qry_Belege wird richtig gefiltert :) aber das Unterformular wird nicht aktualisiert, wenn ich das Formular Projekt schließe und wieder öffne wird es perfekt angezeigt.
Kannst du mir bitte noch mitteilen was ich als Datenquelle für das Unterformular angeben muss, bzw. gibt es einen Requery Befehl der das richtig stellt?

Befehl198 war noch für den Code von Ekkehard.

Dann wäre mein Wochenende gerettet und Du der Retter ;)

Beste Grüße Paul

Paul Meixner

Servus Josef und Ekkehard,
nochmal vielen Dank, habe das jetzt irgendwie hinbekommen.

Noch eine Frage, obwohl ich damit Leben könnte, gibt es für die Funktion PID PID2 = Me!P_ID
    DoCmd.Requery
    DoCmd.GoToControl "P_ID"
    DoCmd.FindRecord PID2, , , , , , True
irgend was anderes, damit ich im Hauptformular im aktuellem Projekt bleibe?

Beste Grüße Paul

ebs17

DoCmd.Requery
DoCmd.GoToControl "P_ID"
Das sind zwei Aktionen zum Verlassen des aktuellen Datensatzes. Was könnte einem da einfallen?
Mit freundlichem Glück Auf!

Eberhard

Paul Meixner

Hi Eberhard,
geht so nicht.
Hauptformular besteht aus mehreren Projekten, wenn ich Requery anleiere ohne mir vorher die Projektnummer (P_Nr) zu merken, wird das erste Projekt geöffnet und nicht das in dem ich gearbeitet habe.
Schönen Sonntag, Gruß Paul

Josef P.

Hallo!

Das nutze ich:

Prinzip:
1. ID wie in deinem Code merken
2. Requery
3. Im RecordsetClone zum gewünschten Datensatz gehen
4. Bookmarks gleichsetzen


Der Aufruf würde bei mir so aussehen:
FormTools.RequeryData Me, "P_ID"
Code siehe Klasse FormTools

Gruß
Josef

Beaker s.a.

Hallo Josef,
Nettes Tool.
Ich hätte da noch eine Function, die da gut reinpassen würde.
Kannst du sicher noch verbessern (den Namen wahrscheinlich zuerst  ;) ),
- du bist mir da ja um einige Schritte voraus.
Public Function NotInListControls( _
        sTableName As String, _
        sFieldName As String, _
        vNewData As Variant) As Integer
    Dim rst As DAO.Recordset
    If MsgBox(Prompt:="Möchten sie den Eintrag übernehmen?", _
            Buttons:=vbOKCancel, _
            Title:="Eintrag noch nicht vorhanden ...") = vbOK Then
        Set rst = CurrentDbC.OpenRecordset(sTableName)
        With rst
            .AddNew
                .FIELDS(sFieldName) = vNewData
            .Update
        End With
        NotInListControls = acDataErrAdded
    Else
        NotInListControls = acDataErrContinue
    End If
rst.Close
Set rst = Nothing
End Function
Aufruf
Private Sub EinKombi_NotInList(NewData As String, Response As Integer)
    Response = NotInListControls("Tabelle", "Feld", NewData)
End Sub

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)