Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Neueste Beiträge

#21
Formular / Berechnung in der Zeile eines ...
Letzter Beitrag von mad - November 30, 2024, 11:35:59
Hallo Zusammen,

ich möchte in einem Endlosformular (UF) das aus mehreren Zeilen bestehen kann, da es sich um Positionen in einer Rechnung handelt, folgendes berechnen:

=([Anzahl]*[Preis])
Gesamtpreis immer nur pro Zeile berechnen, siehe Anhänge.

Leider kommt da ein falscher Wert raus.
Was mache ich Falsch?


Danke für eure Hilfe
mad

#22
Access Programmierung / Laufzeitfehler 3027 bei veränd...
Letzter Beitrag von KonradR - November 30, 2024, 08:22:21
Hallo liebe Accessgemeinschaft,

ich möchte einen Recordset verändern und habe dazu folgenden Code verwendet:
With rcsRezeptZutatenGpEinzelnGefiltert
   .Edit
   .Fields("ZutatStammWertung").Value = lngZutatSammlIDUfo1
   .Update
End With 

Der Code stoppt an der Stelle .EditWenn 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?

Der gesamte Code der Prozedur ist (Ich hatte die Select-Case-Anweisung noch nicht gegen IF-Anweisungen getauscht, weil ich erst mal nur die Funktionalität prüfen will.):
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

Viele Grüße: Konrad
#23
Access Programmierung / Fehlermeldung Datei nicht gefu...
Letzter Beitrag von mmarschner - November 30, 2024, 07:45:37
Hallo zusammen,

in Anlehnung an das Thema welches unter

Fehler: Datei nicht gefunden

behandelt wurde, habe ich einmal eine Frage.

Ich hatte gestern ebenfalls diesen Fehler beim Starten deiner Datenbank. Normalerweise wird beim Start ein kleines Formular geöffnet, welches die Tabelleneinbindung zum SQL Server vornimmt. Danach wird ein Hauptmenü geöffnet, über dass die verschiedenen Programmmodule gestartet werden.

Die Fehlermeldung kam sofort und Access sprang direkt in ein beliebiges Programmmodul ohne dort weitere Informationen anzuzeigen. Das Debuggen hat keinen Erfolg gebracht.

Nachdem ich das VBA Fenster geschlossen habe, wurde mir ein Unterformular angezeigt, welches mit dem Programmstart nichts zu tun hat. Daraufhin habe ich das Fenster geschlossen und eine Datenbankreparatur durchgeführt, welche aber ebenfalls nicht zum Erfolg führte.

Ich habe dann das Formular umbenannt und aus einer vorherigen Version wieder importiert. Darauf hin läuft die Datenbank wieder fehlerfrei.

Gibt es eine Möglichkeit, irgendwo in Access eine mögliche Ursache für den Fehler zu finden, oder muss man das dann so hinnehmen?

Die Idee mit Decompile ist mir leider nicht gekommen und die Datenbank liegt bei einem Kunden vor Ort, wo ich in den nächsten Tagen keinen Zugriff drauf habe, um das noch einmal zu probieren.

Fragende Grüße

Michael
#24
Access-Hilfe / Re: A03 unter Win 11 möglich?
Letzter Beitrag von Debus - November 29, 2024, 20:13:10
Natürlich hast du mit allen Komponenten und Sicherheitskonzepte von Win 11 recht und ich würde auch eine VM nehmen aber gehen würde es.
#25
Access-Hilfe / Re: A03 unter Win 11 möglich?
Letzter Beitrag von knobbi38 - November 29, 2024, 20:08:28
Wenn man Ofs2003 unter Win11 installieren möchte, sollte man aber schon wissen, was man tut bzw. worauf man achten sollte. Das betrifft u.a. DAO, ADO, DLLs wie z.B. Comctl32.dll und kann auch andere ActiveX Komponenten beeinflussen. Zudem muß darauf geachtet werden, daß keine alten IE-DLLs und -Komponenten mit installiert werden, sonst wird das Sicherheitskonzept von W11 unterlaufen. Also nichts für Anfänger, welche 32Bit Anwendung und 64Bit OS noch nicht richtig einordnen können.

Deshalb - lieber nicht oder wenn, dann nur in einer VM.




 

#26
Access Programmierung / Re: Wert aus Ufo in Wertetabel...
Letzter Beitrag von knobbi38 - November 29, 2024, 19:49:35
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.

Für so etwas würde ich auch kein UFO wählen, sondern ein nicht modales POPUP-Formular. Dieses Formular kann geöffnet bleiben und bei Bedarf versteckt oder sichtbar gemacht werden. Dann wird dieses POPUP-Formular mit einer Public Property versehen, über die man die gerade selektierte ID abrufen kann, ohne die Interna des Formulars selber kennen zu müssen.

Alternativ zur Public Property, wie in #3 beschrieben, könnte man auch einfach eine Tempvar verwenden. Das erspart ein extra Modul und den Zugriff auf ein Formular per Formularreferenz; zudem kann diese Variante überall eingesetzt werden, also auch direkt in Abfragen usw.

Gruß
Knobbi38

#27
Access-Hilfe / Re: A03 unter Win 11 möglich?
Letzter Beitrag von Debus - November 29, 2024, 19:46:35
Hey, auch in einer Win11 64bit Version gibt es noch eine Win11 32bit Architektur. Daher wird es problemlos laufen.

Gruß
Holger
#28
Access Programmierung / Re: Wert aus Ufo in Wertetabel...
Letzter Beitrag von knobbi38 - November 29, 2024, 19:35:17
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.
#29
Access Programmierung / Re: Wert aus Ufo in Wertetabel...
Letzter Beitrag von Beaker s.a. - November 29, 2024, 17:36:43
???
Wo kommt die ID denn her? Die muss doch in der Datensatzherkunft
des UFo (Tabelle) vorhanden sein.
Die Properties dienen doch nur dazu die ID zwischen zu speichern,
so dass du während der Laufzeit darauf zugreifen kannst, und dich
nicht darum kümmern musst in welchem Form die angezeigt wird, -
Vermeidung von Formularbezügen.
#30
Access Programmierung / Re: Wert aus Ufo in Wertetabel...
Letzter Beitrag von MaxP - November 29, 2024, 15:51:03
Hallo Ekkehard,

wenn bei Deiner Variante die ID nicht in einer Tab gespeichert wird,
ist diese doch nach Beendigug von AC futsch, oder?