Hallo zusammen,
in meiner MS Access Datenbank habe ich ein Formular frmAnlagenBearbeiten, mit dem ich Einträge in meine Tabelle tblAnlagen einfüge, bearbeite oder lösche. Da jedem Eintrag auch ein Hersteller zugeordnet wird, habe ich ein Kombinationsfeld erstellt, mit welchem ich nach den Herstellern filtern kann, wobei sich dann ein neues Formular frmAnlagen in Datenblattansicht öffnet, in dem die gefilterten Anlagen nach dem ausgewählten Hersteller angezeigt werden.
Gibt es eine Möglichkeit, per Mausklick auf einen beliebigen Eintrag in der Datenblattansicht wieder auf das Formular frmAnlagenBearbeiten zurückgeleitet zu werden, um den ausgewählten Datensatz zu bearbeiten?
Würde mich über eure Hilfe sehr freuen!
Gruß
Simon
			
			
			
				Angenommen, die erste Spalte heißt txtID und enthält die Datensatz-ID, dann liefert ein Klick auf txtID die ID dieses Datensatzes.
Private Sub txt_Click()
   Debug.Print Me.txtID
End SubMit der ID hast Du Zugriff auf den Datensatz in allen möglichen anderen Formularen.
ZitatMausklick auf einen beliebigen Eintrag
Beliebig kostet. Dann benötigst Du für jede Spalte eine Auswertung per Ereignisprozedur.
			
				Hallo,
die Datenblattansicht des Formulars frmAnlagen sieht wie folgt aus:
Unbenannt.PNG 
Hierbei sind die Spalten "Produkt", "Hersteller", "Standort" und "Technologie" jeweils mit Fremdschlüsseln auf andere Tabellen verwiesen. 
Nun möchte ich durch einen Klick auf z. B. das Produkt in einer Zeile wieder auf das Formular frmAnlagenBearbeiten zurückgeleitet werden. Dieses Formular wird ganz normal in der Formularansicht geöffnet.
Da es in dem Formular frmAnlagen wirklich keine eindeutige Datensatz ID gibt (weil ja nur Fremdschlüssel verwendet werden), bin ich unsicher, wie ich deine Methode implementieren soll.
Gruß
Simon 
			
			
			
				EDIT:
Ich habe es gerade mit dem folgenden Code hinbekommen:
Private Sub DeineDatenblattansicht_DblClick(Cancel As Integer)
    On Error Resume Next
    
    Dim rs As DAO.Recordset
    
    ' Überprüfe, ob eine Zeile ausgewählt ist
    If Me.Dirty Then Me.Dirty = False ' Speichere die Änderungen, falls erforderlich
    If Me.RecordsetClone.RecordCount = 0 Then Exit Sub ' Beende die Prozedur, wenn keine Zeile vorhanden ist
    
    ' Öffne das andere Formular
    DoCmd.OpenForm "DeinAnderesFormular", acNormal, , , , acWindowNormal
    
    ' Suche den Datensatz im anderen Formular, der dem ausgewählten Datensatz entspricht
    Set rs = Forms!DeinAnderesFormular.RecordsetClone
    rs.FindFirst "ID = " & Me.ID
    If Not rs.NoMatch Then
        Forms!DeinAnderesFormular.Bookmark = rs.Bookmark
    End If
    
    rs.Close
    Set rs = Nothing
End Sub
Gruß
Simon
			
			
			
				Zitatum den ausgewählten Datensatz zu bearbeiten?
Für eine eindeutige Auswahl braucht man eine eindeutige ID (könnte auch ein Mehrfelderschlüssel sein).
Wenn Du so etwas nicht hast (eigene Aussage!), dann findest Du nicht DEN ausgewählten Datensatz, sondern bestenfalls EINEN davon. FINDFIRST dürfte selbsterklärend sein.
ZitatIch habe es gerade mit dem folgenden Code hinbekommen:
Ich weiß nicht, ob Du erkennen kannst, dass Du etwas anderes umsetzt, als Deine ursprüngliche Aufgabe aussagte. Mit einer derartigen Unklarheit provozierst Du folgende "Überraschungen".
			
 
			
			
				Mit dem oben genannten Code gehe ich ja über die AnlageID, der eindeutige Schlüssel in der zugehörigen Tabelle tblAnlagen. Daher sollte es funktionieren und keine Doppelungen anzeigen.
Gruß
Simon
			
			
			
				Hallo,
Du wolltest doch nach Herstellern suchen, wie du selbst geschrieben hast.
Mit der AnlageID findet man aber keinen bestimmten Hersteller. 
			
			
			
				Zitatwirklich keine eindeutige Datensatz ID
Mit dem Interpretieren, ob man Deine Aussagen für wahr nehmen kann, bin ich offensichtlich überfordert.
			
 
			
			
				Zitat von: MzKlMu am März 04, 2024, 09:59:08Du wolltest doch nach Herstellern suchen, wie du selbst geschrieben hast.
Hallo, 
nicht ganz, die Einträge im Formular 
frmAnlagen sind Anlagen, keine Hersteller. Daher ist die Verwendung von AnlageID schon korrekt. 
Wie bereits gesagt konnte ich das Problem schon selbst lösen!
Gruß
Simon