September 26, 2020, 20:15:31

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Abfragekriterium in Bottom-Ereignisprozedur

Begonnen von mad, August 29, 2020, 09:33:04

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,
habe derzeit eine Abfrage für einen Bericht der über ein Kriterium wie folgt gefiltert wird:

...
WHERE (((tblRegistrierungLehrg.StatusRegID_F)=1) AND ((Personal.statusID_P)=1 Or (Personal.statusID_P)=2));
...

Meinen Bericht rufe ich über folgende Ereignisprozedur auf:
Private Sub btnberLehrg_Click()
On Error GoTo Err_Vorschau__ber_LehrgaengeMeldung_Click

    Dim stDocName As String

    stDocName = "ber_LehrgaengeMeldung"
    DoCmd.OpenReport stDocName, acPreview, , WhereCondition:="[LehrTitel] = Forms!frm_Lehrgaenge!LehrTitel"


Exit_Vorschau__ber_LehrgaengeMeldung:
    Exit Sub

Err_Vorschau__ber_LehrgaengeMeldung_Click:
    MsgBox Err.Description
    Resume Exit_Vorschau__ber_LehrgaengeMeldung
       
End Sub

Nun würde ich gerne dies Abfrage für mehrere Berichtsvarianten die über verschiedene Bottoms aufgerufen werden verwenden.

Wie kann ich nun den Kriteriumsteil der Abfrage,
WHERE (((tblRegistrierungLehrg.StatusRegID_F)=1)in meine Ereingisprozedur einbauen?

Könnte mir dazu jemand Hilfestellung geben?


Gruss
mad

Beaker s.a.

@mad
Verlagere den Code in eine öffentliche Function, auf die alle Berichte
Zugriff haben (allgem. Modul). Beim Buttonklick rufst du diese auf und
übergibst die benötigten Daten (Berichtsname, Kriteriumsstring).
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mad

Hallo,

ist damit gemeint die Abfrage in den Code zu verlegen???

Public Function Lehrg()
Dim strSQL As String

strSQL = "SELECT tblLehrgang.LehrgangID, tblLehrgang.OrtID_F, tblLehrgang.LehrgangTitelID_F, Personal.NameP, tblLehrgangTitel.LehrgangTitelID, tblLehrgangTitel.LehrTitel, tblLehrgangTitel.LehrgTitelKz, Ortsteile.PLZ, Ortsteile.Ort, Gemeinde.Gemeinde, tblRegistrierungLehrg.RegLehrgID, tblRegistrierungLehrg.PID_F, tblRegistrierungLehrg.LehrgangID_F, tblRegistrierungLehrg.StatusRegID_F, Personal.GebDatum, Personal.Namekenn, Personal.Adresse, Personal.HausNr, Ortsteile.Ortkenn, Personal.statusID_P, tblLehrgang.LehrgBeginn, tblLehrgang.LehrgEnde, tblLehrgang.Lveranstalter FROM tblLehrgangTitel INNER JOIN (tblLehrgang INNER JOIN (((Gemeinde INNER JOIN Ortsteile ON Gemeinde.GemeindeID = Ortsteile.GemeindeID_F) INNER JOIN Personal ON Ortsteile.OrtID = Personal.OrtID_F) INNER JOIN tblRegistrierungLehrg ON Personal.PID = tblRegistrierungLehrg.PID_F) ON tblLehrgang.LehrgangID = tblRegistrierungLehrg.LehrgangID_F) ON tblLehrgangTitel.LehrgangTitelID = tblLehrgang.LehrgangTitelID_F &"
'WHERE Personal.statusID_P = 1 Or Personal.statusID_P = 2
       
End Function

Oder bin ich auf dem Holzweg??
Beim Debuggen kommt zumindestens kein Fehler.


Gruss
mad


Beaker s.a.

@mad
Nein. Die Abfrage(n) sind ja DS-Herkunft der Berichte.
Public Sub DruckeBerichte(sDocName As String, sWhereCond As String)
    DoCmd.OpenReport stDocName, acPreview, , WhereCondition:=sWhereCond
End Sub
Aufruf
Private Sub DeinButton_Click()
    Call DruckeBericht "DeinReport", "DeineWhereCondition"
End Sub

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mad

Hallo,

Modul "mdlDrucken" habe ich wie beschrieben angelegt:
Option Compare Database
Option Explicit

Public Sub DruckeBerichte(stDocName As String, sWhereCond As String)
    DoCmd.OpenReport stDocName, acPreview, , WhereCondition:=sWhereCond
End Sub

den Aufruf wie folgt angewendet:

Private Sub btnberLehrg_Click()

    Call DruckeBerichte "ber_LehrgaengeMeldung", WhereCondition:="[LehrTitel] = Forms!frm_Lehrgaenge!LehrTitel"
           
End Sub

Funktioniert aktuell noch nicht!
Beim Kompilieren wird ein Syntaxfehler angezeigt, ohne weitere Beschreibung und die Zeile wird rot dargestellt.
Die erweiterung der WhereCondition
Zitat von: undefined'WHERE Personal.statusID_P = 1 Or Personal.statusID_P = 2
müsste auch noch rein.

Dürfte ich nochmals um Unterstützung bitten?

Gruss
mad

Beaker s.a.

...,  WhereCondition:="[LehrTitel] = " & Forms!frm_Lehrgaenge!LehrTitel & " AND (Personal.statusID_P = 1 Or Personal.statusID_P = 2)"Falls der Code im gleichen Form abläuft reicht auch
... Me.LehrTitel ...
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

DF6GL

Hallo,



Public Sub DruckeBerichte(stDocName As String, sWhereCond As String)
    DoCmd.OpenReport stDocName, acPreview, , sWhereCond
End Sub


den Aufruf wie folgt angewendet:

Private Sub btnberLehrg_Click()

    Call DruckeBerichte ("ber_LehrgaengeMeldung", "Personal.statusID_P in (1,2)  And [LehrTitel] ='" & Me!LehrTitel & "'")
           
End Sub


Und warum überhaupt den Umweg über eine Modul-Sub?


Private Sub btnberLehrg_Click()
   DoCmd.OpenReport "ber_LehrgaengeMeldung", acPreview, , "Personal.statusID_P in (1,2)  And [LehrTitel] ='" & Me!LehrTitel  & "'"
End Sub


wobei vorausgesetzt ist, dass "Lehrmittel" den Datentyp TEXT besitzt.

mad

Hallo,

danke vorab für eure Unterstützung.

Beaker,
habe den Code wie von Dir beschrieben ergänzt,
Private Sub btnberLehrg_Click()
Call DruckeBerichte "ber_LehrgaengeMeldung", WhereCondition:="[LehrTitel] = " & Forms!frm_Lehrgaenge!LehrTitel & " AND (Personal.statusID_P = 1 Or Personal.statusID_P = 2)"
End Sub

Dann kommt "Fehler beim Kompilieren: Erwartet:Anweisungsende", siehe Bild.

DF6GL,
habe auch Deine Variante
Call DruckeBerichte ("ber_LehrgaengeMeldung", "Personal.statusID_P in (1,2)  And [LehrTitel] ='" & Me!LehrTitel & "'")getestet, dabei werden aber nur die Datensätze angezeigt die "statusID_P = 1" enthalten. Die "statusID_P = 2" werden nicht angezeigt.

Auch bei Deinem zweiten Vorschlag:
DoCmd.OpenReport "ber_LehrgaengeMeldung", acPreview, , "Personal.statusID_P in (1,2)  And [LehrTitel] ='" & Me!LehrTitel  & "'"werden nur die Datensätze die "statusID_P = 1" enthalten angezeigt.


Gruss
mad

DF6GL

Hallo,
Zitatwerden nur die Datensätze die "statusID_P = 1" enthalten angezeigt.

Dann gibt es halt keine, auf die "2" und "Lehrtitel" zutreffen.


ZitatDie Erweiterung der WhereCondition
'WHERE Personal.statusID_P = 1 Or Personal.statusID_P = 2
müsste auch noch rein.


sagt nichts über die logische Verknüpfung aus.

mad

Hallo Zusammen,

habe mal wieder vor lauter Bäumen den Wald nicht gesehen.
Hatte einen kleinen Schreibfehler nicht gesehen.
Funktioniert alles bestens.
Verwende auch beide Varianten/Vorschläge, um für event. zukünftige Themen gerüstet zu sein.

Danke nochmals in die Runde.

Gruss
mad