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
@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
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
@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 SubAufruf
Private Sub DeinButton_Click()
Call DruckeBericht "DeinReport", "DeineWhereCondition"
End Subgruss ekkehard
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 Subden Aufruf wie folgt angewendet:
Private Sub btnberLehrg_Click()
Call DruckeBerichte "ber_LehrgaengeMeldung", WhereCondition:="[LehrTitel] = Forms!frm_Lehrgaenge!LehrTitel"
End SubFunktioniert 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
..., 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 ...
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.
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
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.
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