Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!
=([Anzahl]*[Preis])
With rcsRezeptZutatenGpEinzelnGefiltert
.Edit
.Fields("ZutatStammWertung").Value = lngZutatSammlIDUfo1
.Update
End With
.Edit
Wenn ich den Code durchlaufe, dann erscheint folgende Fehlermeldung:ZitatLaufzeitfehler 3027: Aktualisieren nicht möglich; Datenbank oder Objekt ist schreibgeschützt.Habt ihr da eine Idee, woran das liegen könnte?
Private Sub Form_BeforeUpdate(Cancel As Integer)
'________________________________________________________________________
'EINGABEPRÜFUNG VON STEUERELEMENT txtZugabeMenge UND cboZugabeEinheit
Select Case True
Case IsNull(Me.txtZugabeMenge.Value) And IsNull(Me.cboZugabeEinheit.Value)
MsgBox "Es sind Leerzeichen in den Textfeldern ""Zugabemenge"" und ""Zugabeeinheit""" & vbCrLf & _
"Bitte in beide Felder einen Wert eintragen."
Cancel = True
Case IsNull(Me.txtZugabeMenge.Value) And Me.cboZugabeEinheit.Value <> ""
MsgBox "Es sind Leerzeichen im Textfeld ""Zugabemenge"". Bitte einen Wert eintragen."
Cancel = True
Case IsNull(Me.txtZugabeMenge.Value) And Not IsNull(Me.cboZugabeEinheit.Value)
MsgBox "Bitte eine Zugabemenge eingeben"
Cancel = True
Case Me.txtZugabeMenge.Value = 0 And IsNull(Me.cboZugabeEinheit.Value)
MsgBox "Bitte eine Zugabemenge > 0 und eine Zugabeinheit eingeben"
Cancel = True
Case Me.txtZugabeMenge.Value = 0 And Not IsNull(Me.cboZugabeEinheit.Value)
MsgBox "Bitte eine Zugabemenge > 0 eingeben"
Cancel = True
' Case Not IsNull(Me.txtZugabeMenge.Value) And IsNull(Me.cboZugabeEinheit.Value): MsgBox "Bitte eine Zugabeeinheit eingeben"
Cancel = True
Case Not IsNull(Me.txtZugabeMenge.Value) And Not IsNull(Me.cboZugabeEinheit.Value)
Dim ZEWert As Integer 'Variable f. Wert des Feldes cboZugabeEinheit deklariern
Dim rcsZugabeEinheit As DAO.Recordset 'Variable f. Recordset m.d. Tabelle tblRezeptGewicht deklariern
Dim rcsEinheiten As DAO.Recordset 'Variable f. Recordset m.d. Tabelle tblGewichtsEinheitenName deklariern
Dim ZEText As String 'Variable f. Text des Feldes ZugabeEinheit deklariern
Dim RezIDRef As Integer 'Variable f. Zahl die in txtRezepID drin steht deklariern
Dim db As DAO.Database '"db" als Variable für eine Datenbank aus der DAO Bibliothek deklarieren - aktuell keine Verwendung
Dim lngZutatSammlID As Long '"lngZutatSammlID" als Variable für das 1. Schlüsselfeld des zu kopierenden DS deklarieren (Acces selbst vergeben lassen weil Autowert & sonst doppelt & Fehlermeldung)
Dim lngZutatSammlIDNeu As Long '"lngZutatSammlIDNeu" als leere Variable zur Übergabe der DS-Nummer deklarieren auf den nach der Akualisierung gesprungen werden soll
Dim lngZutatSammlLaMaZIDRef As Long '"lngZutatSammlIDNeu" als Variable für das 2. Schlüssslfeld des zu kopierenden DS deklarieren (Acces selbst vergeben lassen weil Autowert & sonst doppelt)
Dim lngZutatSammlRezepIDRef As Long 'Variable als Übergabe für den Wert des Fremdschlüsselfeldes ZutatSammlRezepIDRef (damit alle Zutaten des Rezepts aufgelistet werden)
Dim lngZutatSammlRezepIDRef2 As Long 'Variable als Übergabe für den Wert des Fremdschlüsselfeldes für ZutatSammlRezepIDRef (damit alle Zutaten in den Zielrecordset kopiert werden)
Dim SQLRcsZiel As String '"SQL String für den Inhalt des Recordsets für das 2. Unterformular in "sfrmPopRezeptAlsZutatUnter2"
Dim rcsRezeptZutatenGesamt As DAO.Recordset
Dim rcsRezeptZutatenGpEinzeln As DAO.Recordset
Dim rcsRezeptZutatenGpEinzelnGefiltert As DAO.Recordset
Dim fld As Field
Dim lngZutatNr As Long
Dim rcsZutatStammName As DAO.Recordset
Dim lngZutatSammlIDUfo1 As Integer 'Variable für den Wert 1 für das Textfeld "txtRotAn" deklarieren. Damit mit bedingter Formatierung der Hintergrund aller STE rot gefärbt
'werden kann
ZEWert = Forms("frmPopRezeptAlsZutat").Controls("cboZugabeEinheit").Value 'Variablen f. ZEWert den Wert zuweisen
ZEText = Forms("frmPopRezeptAlsZutat").Controls("cboZugabeEinheit").Text 'Variablen f. ZEText den Wert zuweisen
RezIDRef = Forms("frmPopRezeptAlsZutat").Controls("txtRezepID").Value 'Variablen f. RezIDRef den Wert zuweisen
Set rcsZugabeEinheit = CurrentDb.OpenRecordset("SELECT * FROM tblRezeptGewicht WHERE rezgeEhIDRef = " & ZEWert & " AND rezgeRezepIDRef = " & RezIDRef, dbOpenDynaset)
'Recordset der Variablen rcsZugabeEinheit zuweisen: Alle Felder aus der Tabelle tblRezeptGewicht, bei denen der Wert aus dem Feld cboZugabeEinheit mit dem
'Tabellenfeld rezgeEhIDRef (Feld f. ID d. Fremdschlüsselfeldes f.d. Einheit) übereinstimmt UND
'der Fremdschlüssel zur tblRezept mit dem Wert in txtRezepID (Variable: RezIDRef) übereinstimmt
'kurz: alle DS zu der ausgewählten Einheit im cbo cboZugabeEinheit für das Rezept mit der Nummer aus dem Textfeld txtRezepID im RS auflisten
'kurz2: rcsZugabeEinheit ist der Recordset für die Sammlung der Gewichte der einzelnen Rezepteinheiten des bestimmten Rezepts
Set rcsEinheiten = CurrentDb.OpenRecordset("SELECT * FROM tblGewichtsEinheitenName WHERE GweNameID = " & ZEWert, dbOpenDynaset)
'Recordset der Variablen rcsEinheiten zuweisen: alle Felder der Tabelle tblGewichtsEinheitenName bei denen das Feld GweNameID mit dem Wert des Textfeldes cboZugabeEinheit
'(Variable: ZEWert) übereinstimmt
If rcsZugabeEinheit.EOF Then 'Wenn es keine DS für die ausgewählte Einheit im Textfeld cboZugabeEinheit gibt dann (das Rezeptgewicht für die Einheit wurde noch nicht ermittelt):
MsgBox "Bitte die Einheit " & """" & ZEText & """" & " eingeben." 'Wenn die Einheit
rcsZugabeEinheit.AddNew 'Eingabezeile anlegen (Die gibt es im Recordsetelement nicht. Sonst können dem Recordset keine
'Daten hinzugefügt werden.)
rcsZugabeEinheit.Fields("rezgeRezepIDRef").Value = Forms("frmPopRezeptAlsZutat").Controls("txtRezepID").Value
'Wert aus cboZugabeEinheit in das Feld rezgeEhIDRef des Recordset schreiben
rcsZugabeEinheit.Fields("rezgeEhIDRef").Value = Forms("frmPopRezeptAlsZutat").Controls("cboZugabeEinheit").Value
'Den Wert für die Einheit (Zahl) aus cboZugabeEinheit kopieren & in rcsZugabeEinheit einfügen
rcsZugabeEinheit.Fields("rezgeMenge").Value = Forms("frmPopRezeptAlsZutat").Controls("txtZugabeMenge").Value
'Hier den Wert aus txtZugabeMenge eintragen
'Prüfung ob txtZugabeMenge 0 oder Null oder "" erfolgt mit EXIT-Ereigniss in txtZugabeMenge
'Erst mal eine 0 reinschreiben, damit der Datensatz überhaupt erzeugt werden kann.
rcsZugabeEinheit.Update 'Speichern (Damit der Datensatz wieder verlassen werden kann.)
Forms("frmPopRezeptAlsZutat").Controls("sfrmRezepGeE").Requery
' Forms("frmPopRezeptAlsZutat").Controls("sfrmRezepGeE").SetFocus 'Das Feld für die Einheitenangabe schon mit der in cboZugabeEinheit ausgewählten Einheit vorauswählen
'UFO setfocus?
Else 'Die ausgewhälte Einheit im cbo "cboZugabeEinheit" gibt es.
' MsgBox "Einheit " & """" & rcsEinheiten.Fields("GweNameText").Value & """" & " vorhanden"
'__________________________________________________________________________________________________________________
'GEWICHTSPRÜFUNG DER EINZELNEN ZUTATEN FÜR DIE AUSGEWÄHLTE REZEPTEINHEIT
Set rcsRezeptZutatenGesamt = CurrentDb.OpenRecordset("SELECT * FROM qryZutatenEinkaufsliste WHERE ZutatSammlRezepIDRef =" & RezIDRef, dbOpenDynaset)
Set rcsRezeptZutatenGpEinzeln = CurrentDb.OpenRecordset("SELECT * FROM qryRezepteGewichtSumZutatenEinzeln WHERE rezepID =" & RezIDRef, dbOpenDynaset)
'Variable lngRezetNr Set rcsRezeptZutatenGpEinzelnGefiltert = CurrentDb.OpenRecordset("SELECT * FROM qryRezepteGewichtSumZutatenEinzeln WHERE rezepID =" & lngRezetNr, dbOpenDynaset)
'qryRezepteGewichtSumZutatenEinzeln
If Not rcsRezeptZutatenGesamt.EOF Then
rcsRezeptZutatenGesamt.MoveLast
rcsRezeptZutatenGesamt.MoveFirst
rcsRezeptZutatenGpEinzeln.MoveLast
rcsRezeptZutatenGpEinzeln.MoveFirst
' MsgBox "insgesamt: " & rcsRezeptZutatenGesamt.RecordCount & " Zutaten" & vbCrLf & _
' "mit Gewicht pro Einheit: " & rcsRezeptZutatenGpEinzeln.RecordCount & " Zutaten", , "Rezept: " & Me.txtRezeptAlsZutat.Value
If rcsRezeptZutatenGesamt.RecordCount = rcsRezeptZutatenGpEinzeln.RecordCount Then
MsgBox "auf Nullwerte prüfen"
Else
Do Until rcsRezeptZutatenGesamt.EOF 'alle Zeilen im RS qryZutatenEinkaufsliste bis zum Ende durchlaufen (Das RS mit ALLEN Zutaten)
lngZutatNr = rcsRezeptZutatenGesamt("LaMaZzutatIDRef").Value 'Das Fremdschlüsselfeld der Variablen zuweisen (zum merken)
Set rcsRezeptZutatenGpEinzelnGefiltert = _
CurrentDb.OpenRecordset("SELECT * FROM qryRezepteGewichtSumZutatenEinzeln WHERE ZutatStammID =" & lngZutatNr, dbOpenDynaset)
'Recordset mit nur den Gewichtsangaben nach der rezepID mit dem Wert von lngRezetNr filtern
'Wenn leer oder NULL dann Hintergrund rot einfärben
Set rcsZutatStammName = CurrentDb.OpenRecordset("SELECT * FROM tblZutatStamm WHERE ZutatStammID = " & _
lngZutatNr, dbOpenDynaset)
If rcsRezeptZutatenGpEinzelnGefiltert.EOF Then
'Wenn für die Zutat vom Rezept noch
'Wenn kein Gewicht für die im Rezept verwendete Einheit vergeben wurde.
'Recordset um den Namen der Zutat anhand der Variablen lngZutatNr (von LaMaZzutatIDRef) zu ermitteln
MsgBox "Hintergrund" & " von " & rcsZutatStammName.Fields("ZutatStammName").Value & " rot einfärben "
lngZutatSammlIDUfo1 = 1 'Hier könnte noch eine Enumeration eingebaut werden, so dass der Wert der Variable nicht "1" Sonder "RotAn" heißt
'(1=rot an 0=Rot aus
With rcsRezeptZutatenGpEinzelnGefiltert
.Edit
.Fields("ZutatStammWertung").Value = lngZutatSammlIDUfo1
.Update
End With 'jetzt steht der Wert im DS im Formular und die bedingte Formatierung nach diesem Feld greift und kann den DS rot färben
Else
If IsNull(rcsRezeptZutatenGpEinzelnGefiltert.Fields("GweZutatgweGewicht").Value) Then
lngZutatSammlIDUfo1 = 1 'Hier könnte noch eine Enumeration eingebaut werden, so dass der Wert der Variable nicht "1" Sonder
'"RotAn" heißt (1=rot an 0=Rot aus
With rcsRezeptZutatenGpEinzelnGefiltert
.Edit
.Fields("ZutatStammWertung").Value = lngZutatSammlIDUfo1
.Update
End With 'jetzt steht der Wert im DS im Formular und die bedingte Formatierung nach diesem Feld greift und kann den DS rot färben
'Wert 1 in das Textfeld "txtWertung DS im Formular schreiben und die bedingte Formatierung nach diesem Feld greift und kann den DS rot färben
MsgBox "Hintergrund" & " von " & rcsZutatStammName.Fields("ZutatStammName").Value & " rot einfärben "
'Hintergrundfarbe des Textfeldes "cboProdukt" rot einfärben, wenn die Zutat der die ZutatSammlID zugeordnet ist kein Gewicht für die
'im Rezept verwendete Einheit hat
Else
lngZutatSammlIDUfo1 = 0 'Hier könnte noch eine Enumeration eingebaut werden, so dass der Wert der Variable nicht "1" Sonder
'"RotAn" heißt (1=rot an 0=Rot aus
With rcsRezeptZutatenGpEinzelnGefiltert
.Edit
.Fields("ZutatStammWertung").Value = lngZutatSammlIDUfo1
.Update
End With
'Wert 0 in das Textfeld "txtWertung DS im Formular schreiben und die bedingte Formatierung nach diesem Feld greift und kann den DS weis färben
End If
End If
rcsRezeptZutatenGesamt.MoveNext
Loop
End If
Else
MsgBox "keine Zutaten im Rezept vorhanden." & vbCrLf & "Bitte Zutaten eingeben. Ohne Zutaten können keine Zutaten dupliziert werden"
End If
'_________________________________________________________________________________________________________________
'DUPLIZIEREN DER DATENSÄTZE
'' Set db = CurrentDb 'Wert vergeben aber nicht verwendet
'' lngZutatSammlID = Nz(Forms("frmPopRezeptAlsZutat").Controls("sfrmPopBWTMahlzeitRezepteZutatenErfassen_Unter").Controls("txtZutatSammlID").Value, 0)
'' 'für den Zielrecordset um die beim Kopieren auszusparen, damit Access die Autowertvergabe selbst machen kann (Primärschlüssel)
'' lngZutatSammlRezepIDRef = Nz(Forms("frmPopRezeptAlsZutat").Controls("txtRezepID").Value, 0)
'' 'Für den Quellrecordset um die zu kopierenden DS nach dem Rezept zu filtern
'' lngZutatSammlRezepIDRef2 = Nz(Forms("frm00BWT_Haupt").Controls("sfrmBWTEinkaufsliste_Unter").Controls("ZutatSammlRezepIDRef").Value, 0)
'' If Not lngZutatSammlID = 0 Then 'Wenn im Textfeld "txtZutatSammlID" des Formulars "frmPopRezeptAlsZutat" etwas steht (nicht 0) dann
'' If KopiereDatensatzOhnePK("qryZutatenEinkaufsliste", "ZutatSammlID", "ZutatSammlLaMaZIDRef", "ZutatSammlRezepIDRef", lngZutatSammlRezepIDRef, lngZutatSammlRezepIDRef2, _
'' SQLRcsZiel, lngZutatSammlIDNeu) Then
'' ' If KopiereDatensatzOhnePK("qryZutatenEinkaufsliste", "ZutatSammlID", lngZutatSammlID, "ZutatSammlLaMaZIDRef", SQLRcsZiel, lngZutatSammlIDNeu) Then
'' Me.sfrmPopRezeptAlsZutatUnter2.Form.RecordSource = SQLRcsZiel
'' Me.sfrmPopRezeptAlsZutatUnter2.Form.Requery
'' Me.sfrmPopRezeptAlsZutatUnter2.Form.Recordset.FindFirst "ZutatSammlID = " & lngZutatSammlIDNeu
'' Forms("frm00BWT_Haupt").Controls("sfrmBWTEinkaufsliste_Unter").Requery
'' End If
'' Else
'' End If
End If
'''löschen? End If
Cancel = False
Case Else
Cancel = False
MsgBox "Case Else"
End Select
End Sub
Zitat von: MaxP am November 29, 2024, 13:34:00die durch die Speicherung ihrer ID in der Werte-Tab (2. Ufo) auch für andere Formualre als Vorgabe bzw. Filter gelten sollen.Dafür muß die ausgewählte ID nicht in einer Tabelle gespeichert werden.
Zitat von: Beaker s.a. am November 29, 2024, 14:40:37Wie meinst du das?Die ID ist ja in der Datenherkunft der Auswahl schon vorhanden und braucht deshalb in einem anderen UFO nocht mehr gespeichert werden, so wie es MAX ursprünglich beschrieben hat. Im Nachhinein will er gar nicht speichern, sondern nur dieses Wert nur zur Suche verwenden. Der Titel des Themas ist deshalb etwas missverständlich.