Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ChemSim am März 28, 2024, 21:29:59

Titel: Problem bei Formularweiterleitung
Beitrag von: ChemSim am März 28, 2024, 21:29:59
Hallo zusammen,

in meine Access-Datenbank habe ich ein Formular frmAnlagenverwaltung, welches als Datensatzquelle die Tabelle tblAnlagen hat. Auf diesem Formular habe ich das Unterformular ufrmKapazitäten eingebaut, welches als Datensatzquelle die Tabelle tblKapazitäten hat. Diese Tabelle besitzt neben der "KapazitätID" als Primärschlüsselfeld die Spalte "AnlageID_F" (Fremdschlüssel zu tblAnlagen), Kapazität (Zahl) und Termin (Datum/Uhrzeit). Das Unterformular ist dabei von AnlageID_F nach AnlageID mit dem Hauptformular verknüpft.

In einem Textfeld txtGesamtKapazität im Hauptformular frmAnlagenverwaltung wird über den Code
=DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])die Gesamtkapazität aus den einzelnen Kapazitäten berechnet.

Weiterhin habe ich ein anderes Formular frmAnlagenAnzeigen. Über ein ungebundenes Kombinationsfeld cboAnlageSuchen im Formular frmAnlagenverwaltung kann ich ein Produkt auswählen und dann werde ich auf das Formular frmAnlagenAnzeigen weitergeleitet, wobei dann nur die Anlagen, die zu dem ausgewählten Produkt passen, angezeigt werden. Dazu nutze ich folgenden Code:
Private Sub cboAnlageSuchen_AfterUpdate()
    DoCmd.OpenForm "frmAnlagenAnzeigen", , , "ProduktID_F = " & Me.cboAnlageSuchen
End Sub

Das Problem:

Wird einer Anlage eine Kapazität von "0" zugewiesen (weil sie noch nicht in Betrieb ist), so wird auch im Textfeld txtGesamtKapazität eine Kapazität von "0" errechnet. Wähle ich nun im Kombinationsfeld das Produkt aus, zu dem eine Anlage eine Kapazität von "0" aufweist, so werde ich nicht mehr auf das Formular frmAnlagenAnzeigen weitergeleitet, sondern bekomme folgenden Fehler:

Screenshot 2024-03-28 212852.png

Sobald ich auf Debuggen klicke, sagt er mir, dass der Fehler hier liegt:

Screenshot 2024-03-28 212923.png

Wie kann ich das beheben?
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: markusxy am März 29, 2024, 09:39:59
Zitat von: ChemSim am März 28, 2024, 21:29:59Wie kann ich das beheben?

Der Logik folgend solltest du frmAnlagenAnzeigen nur aufrufen, wenn die notwendigen Voraussetzungen gegeben sind. Also erst prüfen, dann öffnen.

Vielleicht würde ich schon den Schritt zuvor nicht zulassen, ohne dass die notwendigen Voraussetzungen gegeben sind - aber wo das am Sinnvollsten ist, kannst du ja beurteilen.
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: ChemSim am März 29, 2024, 10:23:08
Das Formular frmAnlagenAnzeigen soll aber auch geöffnet werden, wenn die Kapazität "0" beträgt. Ich verstehe auch nicht genau, warum der Code
Private Sub cboAnlageSuchen_AfterUpdate()
    DoCmd.OpenForm "frmAnlagenAnzeigen", , , "ProduktID_F = " & Me.cboAnlageSuchen
End Sub
einen Fehler verursacht, wenn die Kapazität "0" beträgt, das hat doch damit überhaupt nichts zu tun!
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: PhilS am März 29, 2024, 10:36:41
Zitat von: ChemSim am März 29, 2024, 10:23:08Das Formular frmAnlagenAnzeigen soll aber auch geöffnet werden, wenn die Kapazität "0" beträgt. Ich verstehe auch nicht genau, warum der Code
Private Sub cboAnlageSuchen_AfterUpdate()
    DoCmd.OpenForm "frmAnlagenAnzeigen", , , "ProduktID_F = " & Me.cboAnlageSuchen
End Sub
einen Fehler verursacht, wenn die Kapazität "0" beträgt, das hat doch damit überhaupt nichts zu tun!
Ich finde das auch sehr seltsam und mir ist nicht klar, wo dieser Fehler herkommt. Die Zahl 0 bedarf eigentlich keiner gesonderten Behandlung, daher sehe ich nicht wo und warum hier dieser Fehler entstehen kann.

Ich würde erstmal zwecks Diagnose die Codezeile ändern zu:
ZitatDoCmd.OpenForm "frmAnlagenAnzeigen", , , "ProduktID_F = 12345 "
Wobei du 12345 durch eine ProduktId ersetzen solltest, für die es die 0-Kapazität gibt.

Tritt dann der Fehler immer noch auf?
Wenn ja liegt die Ursache im frmAnlagenAnzeigen, wenn nein muss der Fehler durch cboAnlageSuchen verursacht werden.
Im ersten Fall solltest du den VBA Code in frmAnlagenAnzeigen genauer unter die Lupe nehmen, im zweiten Fall die Datenherkunft der Combobox.
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: MzKlMu am März 29, 2024, 11:54:51
Hallo,
@ChemSim
ich kenne ja die DB. Was mich im Moment irritiert, ist dass Du mit der Anlage (cboAnlageSuchen) nach einem Produkt (ProduktID_F) suchst. Kannst Du bitte mal ein aktuelles Bild des Beziehungsfensters hier zeigen. Ggf. nur einen relevanten Ausschnitt. Ich habe das nicht mehr so präsent.
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: ChemSim am März 29, 2024, 12:46:29
Hallo PhilS,

ZitatTritt dann der Fehler immer noch auf?

Ja, wenn ich ProduktID_F im Code durch eine ProduktID ersetze, die eine Anlage mit einer Kapazität von 0 hat, tritt der gleiche Fehler auch auf. Ich verstehe den Fehler nicht, denn alles was ich gemacht habe ist das Formular frmAnlagenverwaltung zu kopieren und in frmAnlagenAnzeigen umzubenennen. Zudem habe ich einige Steuerelement gelöscht und andere anders angeordnet. Hintergrund ist, dass frmAnlagenAnzeigen ein Formular in Tabellenansicht sein soll

Screenshot 2024-03-29 124540.png

wobei frmAnlagenverwaltung dazu dient, neue Anlagen anzulegen und bestehende zu bearbeiten.

Gruß,
Simon

Titel: Re: Problem bei Formularweiterleitung
Beitrag von: ChemSim am März 29, 2024, 12:53:54
Zitat von: MzKlMu am März 29, 2024, 11:54:51Kannst Du bitte mal ein aktuelles Bild des Beziehungsfensters hier zeigen

Hallo Klaus,

hier ein Bild meines Beziehungsfensters:

Screenshot 2024-03-29 124540.png

Mein Ziel ist es, im Formular frmAnlagenverwaltung, was mit der Tabelle tblAnlagen als Datensatzquelle verknüpft ist, über ein Kombinationsfeld (cboAnlageSuchen) alle Anlagen in einem anderen Formular frmAnlagenAnzeigen anzuzeigen, die zum ausgewählten Produkt passen. Das Kombinationsfeld cboAnlageSuchen ist dabei ungebunden und greift über

SELECT tblProdukte.ProduktID, tblProdukte.Produkt FROM tblProdukte ORDER BY tblProdukte.Produkt;
auf die Tabelle tblProdukte zu. Zudem hat es beim Ereignis "Nach Aktualisierung" den Code

Private Sub cboAnlageSuchen_AfterUpdate()
    DoCmd.OpenForm "frmAnlagenAnzeigen", , , "ProduktID_F = " & Me.cboAnlageSuchen
End Sub

Es funktioniert auch alles wunderbar, bis auf den Fall, in dem die Kapazität einer Anlage "0" beträgt. Da die Gesamtkapazität aber über ein Textfeld txtGesamtKapazität im Formular frmAnlagenverwaltung mit dem Code

=DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])
berechnet wird, kann ich nicht so etwas wie "n.a." eintragen, was noch besser wäre als "0" für Anlagen, bei denen die Kapazität nicht feststeht.

Gruß,
Simon
Titel: Re: Problem bei Formularweiterleitung
Beitrag von: ChemSim am März 29, 2024, 22:10:58
Kurzes Update:

Ich habe es nun so gelöst, dass ich es nicht mehr so handhabe, "0" als Kapazität einzutragen, sondern das Textfeld txtGesamtKapazität im Hauptformular frmAnlagenverwaltung anderes definierte.

Statt dem bisherigen Steuerelementinhalt
=DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])nutze ich jetzt den deutlich aufwendigeren Code

=Wenn(IstNull(DomWert("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID]));"n.a.";Wenn(DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])=0;"stillgelegt";DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])))
Mit diesem Code habe ich es geschafft, dass im berechneten Textfeld txtGesamtKapazität die Gesamtkapazität angezeigt wird, wenn man welche im Unterformular eingibt. Gibt man aber keine Datensätze im Unterformular ein (entspricht einer Kapazität von 0), dann wird schlichtweg "n.a." angezeigt. Ist hingegen die berechnete Summe gleich Null, z. B. wenn die Kapazität in einem Datensatz +200, im anderen -200 ist (durch Stilllegung), dann wird auch im berechneten Textfeld "stillgelegt" angezeigt.

Jetzt tritt auch das Problem mit dem Kombinationsfeld auf, das ich übrigens umbenannt habe:
Private Sub cboAnlagennachProduktFiltern_AfterUpdate()
    'Anlagen nach ausgewählten Produkt filtern & Formular frmAnlagen öffnen
    DoCmd.OpenForm "frmAnlagen", , , "ProduktID_F = " & Me.cboAnlagennachProduktFiltern
End Sub

Gruß,
Simon