Hallo liebe Accessfreund,
ich habe ein Formular mit Unterformularen. In einem Unterformular davon habe ich ein Kombinationsfeld eingefügt. Jetzt möchte ich in der verknüpften Tabelle, durch das Eintragen in das Kombinationsfeld, einen Datensatz ergänzen und anschließend das Kombinationsfeld aktualisieren, damit der neu eingetragene Wert in den folgenden Kombinationsfeldern im Endlosformular angezeigt wird. Das erstellen des Datensatzes funktioniert auch. Allerdings funktioniert die Aktualsierung nicht. Hier erscheint die im Betreff genannte Fehlermeldung. Die Methode Requery ist doch für Kombinatiosfelder vorhanden. Daher verstehe ich diese Fehlermeldung nicht. Übrigens: Ich habe ein Popup-Formular erstellt, das erscheint, wenn ein bestehender Wert im Kombinationsfeld geändert wird.
Hier mein Code, vielleicht habt ihr eine Idee:
Private Sub cboProdukt_NotInList(NewDataProdukt As String, Response As Integer)
Dim dbRezep As DAO.Database
p_cboProduktTextspeicherNeu = Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Text
Set dbRezep = CurrentDb
If Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.NewRecord = True Then
dbRezep.Execute "INSERT INTO tblZutatStamm(ZutatStammName) VALUES ('" & NewDataProdukt & "')", _
dbFailOnError
Response = acDataErrAdded
MsgBox "neue Zutat angelegt"
Else
Response = acDataErrContinue
DoCmd.OpenForm "frmAbfrageProduktSpeichern"
End If
End Sub
Private Sub cmdAuswahlBestaetigen_Click()
Dim dbProdukt As DAO.Database
Dim cboProduktText As String
Dim cboProduktWert As Long
Dim strSQL As String
Dim strSQLExFilterProdukt As String
Set dbProdukt = CurrentDb
'Optionsauswahlfeldgruppe: 1=ändern 2=tauschen
If ogrProduktAendernTauschen.Value = 1 Then
cboProduktText = Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Text
cboProduktWert = Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Value
strSQL = "UPDATE tblZutatStamm SET ZutatStammName = '" & p_cboProduktTextspeicherNeu & "'"
strSQL = strSQL & " WHERE ZutatStammID = " & cboProduktWert
dbProdukt.Execute strSQL, dbFailOnError
Response = acDataErrAdded
MsgBox "bestehendes Produkt geändert"
DoCmd.Close acForm, Me.Name
ElseIf ogrProduktAendernTauschen.Value = 2 Then
dbProdukt.Execute "INSERT INTO tblZutatStamm(ZutatStammName) VALUES ('" & p_cboProduktTextspeicherNeu & "')", _
dbFailOnError
Response = acDataErrAdded
MsgBox "neues Produkt gegen Altes getauscht"
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Dirty = False
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Requery
DoCmd.Close acForm, Me.Name
Else
MsgBox "Bitte eine Option wählen"
End If
End Sub
Vermutlich hier
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].Dirty = FalseEin Kombi besitzt nicht die Eigenschaft .Dirty nur das Form
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Dirty = False
Danke für deine Antwort.
Zitat von: Beaker s.a. am Mai 20, 2024, 12:01:57Ein Kombi besitzt nicht die Eigenschaft .Dirty nur das Form
Zitat von: Beaker s.a. am Mai 20, 2024, 12:01:57Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Dirty = False
Das habe ich so geändert. Jetzt erscheint die Meldung:
Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
sfrmBWTEinkaufsliste_Unter ist ja das Unterformularsteuerelement. Ich habe noch mal auf der Webseite https://learn.microsoft.com/ nachgeschaut und da gibt es die Eigenschaft für das Unterformularsteuerelement nicht. Vielleicht hängt es damit zusammen?
Dann habe ich es mit folgendem Code probiert:
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form!.Dirty = False
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form!.Requery
Dann erscheint die Fehlermeldung:
Laufzeitfehler 3270: "Eigenschaft nicht gefunden."
Hallo,
die Ausrufezeichen nach Form sind hier falsch. Ausrufezeichen vor einem Punkt kann es nie geben.
Das sind Fehler, die man eigentlich selbst erkennen müsste bzw. gar nicht erst machen sollte.
Zitat von: MzKlMu am Mai 20, 2024, 14:56:11die Ausrufezeichen nach Form sind hier falsch. Ausrufezeichen vor einem Punkt kann es nie geben.
Danke für den Hinweis. Ich habe es jetzt angepasst:
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Dirty = False
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Requery
Der Fehler 3270: "Eigenschaft nicht gefunden". Erscheint weiterhin. Habt ihr da eine Idee?
Und? Zeigt der Compiler die fehlerhafte Zeile nicht an?
Zitat von: Beaker s.a. am Mai 21, 2024, 15:57:27Und? Zeigt der Compiler die fehlerhafte Zeile nicht an?
Ja, die fehlerhafte Zeile zeigt er an.
Allerdings habe ich jetzt die Herausforderung gelöst, obwohl ich nicht so ganz verstehe warum. Ich habe ein ähnliches Feld in einem anderen Unterformular auf diesem Hauptformular und habe von dort den Code noch mal verglichen (Hätte ich gleich machen sollen.). Dort hatte ich die für das Kombinationsfeld frisch sortierte Datensatzquelle zugewiesen, um in den anderen Kombinationsfeldern den Filter aufzulösen, damit dort auch was angezeigt wird. Hier mein Code zum Auflösen des Filters:
strSQLExFilterProdukt = "SELECT ZutatStammID, ZutatStammName FROM qryZutatStammSortiert"
strSQLExFilterProdukt = strSQLExFilterProdukt & " ORDER BY ZutatStammName"
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form![cboProdukt].RowSource = strSQLExFilterProdukt
Nun kann ich auch den Datensatz verlassen und der Datensatz kann geändert und gespeichert werden.
Die Codezeilen mit:
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Dirty = False
Forms![frm00BWT_Haupt]![sfrmBWTEinkaufsliste_Unter].Form.Requery
habe ich auskommentiert und es funktioniert wie bereits geschrieben.