collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 65
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13910
  • stats Beiträge insgesamt: 65774
  • stats Themen insgesamt: 8873
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Ungebundenen Hauptbericht mit zwei Filtern  (Gelesen 1833 mal)

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Ungebundenen Hauptbericht mit zwei Filtern
« am: November 28, 2017, 13:11:39 »
Hallo, ich schon wieder…
Kann man mir noch helfen???
Die Situation:
Von einem Formular aus soll ein ungebundener Bericht geöffnet werden.
In diesem sind mehrere UnterB mit unterschiedlichen Filtern.
Beim Öffnen sollen aber alle UnterB  nach zwei weiteren Kriterien gefiltert werden: WocheAktuell und TagAktuell.
Daher habe ich im HauptB zwei ungebundene Textfelder gleichen Namens platziert (Format: Allgemeine Zahl). Die UnterB beziehen sich im Kriterium auf diese Werte.
Der Code zum Öffnen:
DoCmd.OpenReport "rptEinteilung", acViewPreview, , _
                     "[WocheAktuell] = '" & Me!AuswahlWoche & "' " & _
                 "And [TagAktuell] = '" & Me!AuswahlTag & "'"
Der Bericht wird ohne Daten angezeigt. Wenn ich den Bericht händisch öffne, zeigt er die ungebundenen Felder natürlich auch leer an. Wenn ich die Felder in Steuerelementinhalt mit einer Zahl fülle, werden die UnterB korrekt angezeigt.

Habe verschiedene Berichte erstellt mit immer dem gleichen Ergebnis. Wenn ich einen gebundenen Bericht erstelle, in dem ich als Filter die oben benannten Textfelder einstelle, werden die Parameterwerte eingefordert, welche eigentlich per VBA übermittelt werden sollen. Ist das verständlich?
Egal, wie ich es anstelle, die ungebundenen Textfelder  werden nicht gefüllt.
Google hat unzähliche Threads zum Thema „Bericht mit mehreren Filtern“, aber nix passt auf mein Problem…
Weiß jemand einen Rat?
Dankeschön im Voraus!

Gruß Domm
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1736
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #1 am: November 28, 2017, 14:56:47 »
Hallo,
Einen ungebundenen Report kannst du nicht filtern, - gibt ja keine Datensätze.
Übergebe die beiden Werte mit dem Parameter "OpenArgs", und fülle die beiden Textfelder damit
DoCmd.OpenReport _
              ReportName:="rptEinteilung", _
              View:=acViewPreview, _
              OpenArgs:= Me!AuswahlWoche & ";" & Me!AuswahlTag
Private Sub Report_Open(Cancel As Integer)
    Dim vOA as Variant
    vOA = Split(Me.OpenArgs, ";")
    Me!Textfeld1 = vOA(0)
    Me!Textfeld2 = vOA(1)
'@edit
'evtl. musst du die Unterberichte noch aktualisieren
    Me!upcErsterUB.Form.Requery

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.
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #2 am: November 28, 2017, 18:12:59 »
Grüß Dich, Ekkehard! Schön, dass Du mir hilfst.
Nach Eintrag der Codes finden sich die zwei. Soweit schon ein Erfolg.
Allerdings gibts eine Fehlermeldung (2448): Sie können diesem Objekt keinen Wert zuweisen.
Das betraf im ersten Versuch das erste Textfeld; als ich die Zeile mit Hochstrich deaktiviert habe, kam die Meldung auch beim zweiten.
Änderungen an Format der Textfelder haben nichts bewirkt, auch Einstellungen am Bericht haben nicht geholfen.
Allerdings möchte ich noch loswerden, dass ich nie und nimmer ohne Hilfe auf Deine Argumentation gekommen wäre! Nach meinen Vorstellungen hatte ich gedacht, man kann die Felder ganz leicht füllen...
Als es dann nicht ging, war ich der Meinung, dass nur irgendwo ein Komma fehlt oder ein Hochstrich zuviel ist. Siehste mal!
Gruß Domm
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1736
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #3 am: November 29, 2017, 12:53:22 »
Hallo,
Zitat
Allerdings gibts eine Fehlermeldung (2448): Sie können diesem Objekt keinen Wert zuweisen.
Schau mal ob bei den beiden Textfeldern irgendwas in der Eigenschaft
"Steuerlementinhalt" drin steht. Das müsstest du löschen.
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.
 
Folgende Mitglieder bedankten sich: Domm

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1168
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #4 am: November 29, 2017, 13:18:31 »
Ich würde dazu tendieren, die Parameter a la FAQ 3.15 zu übermitteln.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Domm

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #5 am: November 29, 2017, 13:55:02 »
Hallo Ihr Zwei,
leider bin ich im Mom unterwegs und hab keinen Zugriff auf die DB.
Morgen früh folge ich der Empfehlung von Ekkehard, obwohl ich sicher bin, die Textfelder wieder jungfräulich gemacht zu haben.
Die Lösung von DonKarl werde ich erst mal verinnerlichen. Vermutlich muss ich mir dazu nochmal Hilfe holen; die Aussage kann ich so einfach nicht auf mein Beispiel umbauen. (Kenntnisstand Newbie)
Vielen Dank jedenfalls erstmal für Eure Zeit.
Gruß Domm
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1736
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #6 am: November 29, 2017, 14:42:40 »
Hallo,
Zitat
Die Lösung von DonKarl
ist sicher die elegantere. Du brauchst dann zwei davon
Public Function AuswahlWoche() ' hier evtl. noch den Typ angeben
   AuswahlWoche = Nz(Forms.DeinFormular.AuswahlWoche, ErsatzWoche)
End Function

Public Function AuswahlTag() ' hier evtl. noch den Typ angeben
   AuswahlTag = Nz(Forms.DeinFormular.AuswahlTag, ErsatzTag)
End Function
Das Formular muss dazu aber immer geöffnet sein.
Mit diesen beiden Functions ersetzt du in der Abfrage deines Berichtes
die jetzigen Platzhalter (Textfelder). Bei Fragen zeige die Abfrage (SQL).
Die beiden ungebundenen Textfelder entfallen dadurch ersatzlos.
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.
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #7 am: November 29, 2017, 20:08:22 »
Hallo Ekkehard,
der Bericht wird vom Formular aus geöffnet, wenn dort die Parameter vorher eingestellt wurden.
Also bedeutet, es ist grundsätzlich geöffnet. Das war auch mein gedanklicher Ansatz: übergebe die Variablen aus dem Formular an die zwei Textfelder...
Das Thema ist Dir sicher noch bekannt: Abiturienten sollen für ihr Kolloquium eingeteilt werden.
Im o.g. Form wird die Einteilung auf die Prüfungsräume und Uhrzeiten vorgenommen.
Der Bericht soll gefiltert anzeigen,
-in welcher der beiden Prüfungswochen
-an welchem (der fünf) Wochentage
-vor- oder nachmittags die Kurse stattfinden.
Die Tageszeit kann vernachlässigt werden, da pro Tag grundsätzlich nur vor- oder nachmittags geprüft wird.
Also zwei Variable.
Ungefiltert ergibt das 10 Berichtsseiten; damit wäre mein Problem schon aus der Welt.
Aber eleganter ist es natürlich, den jeweiligen Tag filtern zu können.
Schönen Abend!
Gruß Domm
 

Offline Frithjiof

  • Access-User
  • *
  • Beiträge: 74
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #8 am: November 30, 2017, 00:49:34 »
Hallo Domm,

kannst du die Datenquelle(n) der Unterberichte nicht filtern bevor du den Bericht aufrufst.

Datenquelle Bericht1 z.B. qryBericht1.sql = "select tab.* from tab  where ...."

Frithjof
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #9 am: November 30, 2017, 13:30:19 »
Hallo, schnell mal die Mittagspause kreativ auffüllen...
@Beaker s.a.
Der Hauptbericht hat keine SQL (LOGO). Die Unterberichte sind bis auf den Filter <Position> identisch:
SELECT qryKandKursUnion.KandKursID, [Kandidat] & " (" & [MemoA] & ")" AS AnzKandidat, qryKandKursUnion.KursA, qryKandKursUnion.WocheA, qryKandKursUnion.TagA, qryKandKursUnion.TageszeitA, Format([StdBeginn],"Short Time") AS AnzStdBeginn, Format([StdEnde],"Short Time") AS AnzStdEnde, Format([DauerPause],"Short Time") AS AnzPause, qryKandKursUnion.PositionA, tblZimmer.Zimmer
FROM ((qryKandKursUnion INNER JOIN qryZeitenUndPausen ON qryKandKursUnion.StundeA = qryZeitenUndPausen.ZeitID) INNER JOIN tblZimmer ON qryKandKursUnion.ZimmerA = tblZimmer.ZimmerID) INNER JOIN tblWoche ON qryKandKursUnion.WocheA = tblWoche.WocheID
WHERE (((qryKandKursUnion.WocheA)=[AuswahlWoche]) AND ((qryKandKursUnion.TagA)=[AuswahlTag]) AND ((qryKandKursUnion.PositionA)=1));


Zu den Anhängen:
Im Form sind OBEN 3 Optionsgruppen; die sind für die weitere Zuordnung und! für die Filter des Berichtes vorgesehen.

Was hältst Du von der Möglichkeit, eine tblTage zu gründen, die als Datensatzquelle für den Bericht dient. Dann muss ich zwar die Struktur der Verknüpfungstabelle ändern, hätte aber einen nachvollziehbaren Filterausdruck.
Im Mom werden- ausgehend vom Montag der Prüfungswochen- die weiteren 4 Tage berechnet. Damit hab ich zwei Filterwerte: WocheA und B, dazugehörige Tage 1 bis 5. Mit der neuen Tab hab ich nur noch einen Filterwert. weißt Du, wie ich das meine?

@Frithjiof
schön, dass du dich einmischst!
Die Datenquellen sind im Form gefiltert (siehe Anhang). Jetzt muss diese "Tabelle" nur noch auf einen Bericht projeziert werden. Natürlich fehlt noch das Layout und diverse Informationen, aber inhaltlich wäre es OK, das Form genau so auszudrucken.

Nur zum Verständnis (falls die Darstellung zu Grundsatzdiskussionen verleitet): [Position] legt fest, in welcher Spalte der Lehrer den jeweiligen Kurs anzeigen lassen möchte. Die Spaltenanzahl von 10 ist mehr als genug. Pro Raum und Tageszeit werden nie mehr als 5 Schüler geprüft.
Wenn ich die Kriterien lösche, habe ich statt einer Seite max. 10. Das ist insofern OK., weil sowieso jeder Tag an die Kursleiter verteilt werden muss. Aber mein Kampf gilt nicht dem Abnicken, sondern der Lösung. Falls Ihr sowieso nix Besseres zu tun habt...  :-*
Gruß Domm
 

Offline Frithjiof

  • Access-User
  • *
  • Beiträge: 74
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #10 am: November 30, 2017, 14:17:56 »
Hallo Domm.
Am Einfachsten erscheint es mir für jeden Unterbericht eine Abfrage zu erstellen.

qryUBE1, qryUBE2 ...

und vorm Öffnen des Berichts in die Abfragen den SQLstring zu schreiben,


varPositionA=1

strsql= " SELECT qryKandKursUnion.KandKursID, [Kandidat] & ' (' & [MemoA] & ')' AS AnzKandidat, qryKandKursUnion.KursA, qryKandKursUnion.WocheA, qryKandKursUnion.TagA, " _
& " qryKandKursUnion.TageszeitA, Format([StdBeginn],'Short Time') AS AnzStdBeginn, Format([StdEnde],'Short Time') AS AnzStdEnde, Format([DauerPause],'Short Time') AS AnzPause, " _
& " qryKandKursUnion.PositionA, tblZimmer.Zimmer " _
& " FROM ((qryKandKursUnion INNER JOIN qryZeitenUndPausen ON qryKandKursUnion.StundeA = qryZeitenUndPausen.ZeitID) " _
& " INNER JOIN tblZimmer ON qryKandKursUnion.ZimmerA = tblZimmer.ZimmerID) INNER JOIN tblWoche ON qryKandKursUnion.WocheA = tblWoche.WocheID " _
& " WHERE (((qryKandKursUnion.WocheA)=[AuswahlWoche]) AND ((qryKandKursUnion.TagA)=[AuswahlTag]) AND ((qryKandKursUnion.PositionA)=" & varPositionA & "));"

qryUBE1.sql = strsql


Frithjof
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1736
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #11 am: November 30, 2017, 14:51:54 »
Hallo,
Es ging doch darum, das hier statt auf Felder im Hauptbericht, die IMO
auch so
Me.Parent.Textfeld
referenziert sein sollten, wenn das die Abfrage eines Unterberichtes ist,
auf Funktionen zurückgegriffen werden soll.
Das sähe dann so aus. Unter der Voraussetzung das [AuswahlWoche] und [AuswahlTag] die Textfelder waren
Zitat
WHERE (((qryKandKursUnion.WocheA)=AuswahlWoche()) AND ((qryKandKursUnion.TagA)=AuswahlTag()) AND ((qryKandKursUnion.PositionA)=1))
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.
 

Offline Domm

  • Access-User
  • *
  • Beiträge: 96
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #12 am: November 30, 2017, 15:36:51 »
Jetzt muss ich Eure Beiträge erst mal zerpflücken, um sie zu verstehen.
Frage: Werden SQL- Anweisungen auch als Code dargestellt?
@Frithjiof
Jeder UB greift auf die gleiche Abfrage zu (qryKandKursUnion) , das Kriterium in [Position] wird dann im Form verankert. Meintest Du, ich soll 10 query anlegen?
Wie ich sehe, hast Du die Variable (1) nach oben gelegt. Hat das eine tiefere Bewandnis auf die Abläufe oder folgst Du damit nur den Konventionen?
Was passiert mit der Zeile qryUBE1.sql = strsql?
@Beaker s.a.
Leider ist mir bei Deinem Satz die Puste ausgegangen. ich bin doch bloß ein Hausl ;)
Meinst Du, der Zugriff auf die Variablen soll nicht über das Kriterium in den UB, sondern über den Code beim Öffnen des HB erfolgen?
Soll ich noch etwas zum Aufklären anhängen?
Gruß Domm
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1736
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #13 am: November 30, 2017, 17:13:08 »
Hallo Domm,
Zitat
Leider ist mir bei Deinem Satz die Puste ausgegangen
Sorry, zu viel auf einmal. Also noch mal langsam.
Du wolltest zwei Felder auf einem HBer befüllen, mit denen der UBer
gefiltert wird.
Dann kam der Vorschlag von Lachtaube bezügl. Function in der Abfrage
(DS-Herkunft des UBer). Das geht dann ohne die beiden Textfelder.
Du hattest diese beiden Felder in deiner Abfrage so
Zitat
WHERE (((qryKandKursUnion.WocheA)=[AuswahlWoche]) AND ((qryKandKursUnion.TagA)=[AuswahlTag]) AND ((qryKandKursUnion.PositionA)=1));
Wenn das die beiden Felder auf dem HBer sind, müssen die mit
Me.Parent.NameTextfeldangesprochen werden (Me = UBer, Parent = HBer).

Bezügl. Einsatz der Function(s) hatte ich geschrieben,
Zitat
Mit diesen beiden Functions ersetzt du in der Abfrage deines Berichtes
die jetzigen Platzhalter (Textfelder)
was dann so aussieht wie in meinem letzten Post
Zitat
WHERE (((qryKandKursUnion.WocheA)=fctAuswahlWoche()) AND ((qryKandKursUnion.TagA)=fctAuswahlTag()) AND ((qryKandKursUnion.PositionA)=1))
(Den Functions habe ich diesmal ein Prefix verpasst damit es deutlicher
wird. Hatte Lachtaube schon so, sorry für Versäumnis.)
Hoffe es ist jetzt klarer was ich ausdrücken wollte. Es sind halt zwei Wege,
die zum Erfolg führen sollten.
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.
 

Offline Frithjiof

  • Access-User
  • *
  • Beiträge: 74
Re: Ungebundenen Hauptbericht mit zwei Filtern
« Antwort #14 am: November 30, 2017, 17:17:49 »
Hallo Domm.
Jeder Unterbericht enthält ja ein QueryDef als Datensatzquelle. Mit meinem Vorschlag muss daher nichts zusätzlich gemacht werden. Die Datensatzquellen werden lediglich mit einem eigenen Namen versehen und so über das Datenbankfenster und für VBA einfach zugänglich.
Es ist auch möglich die Datensatzquelle in den jeweiligen Unterberichten zu manipulieren.
Es reicht aus ein beliebiges QueryDef 10 mal zu kopieren und z.B. so zu benennen <qryUBE1> -  <qryUBE10>.

Der sqlstring wird vorm Laden des Berichts  in die  QueryDefs geschrieben

Hier jetzt der ganze Code
Sub test()
    Dim dbs As DAO.Database
    Dim qry As DAO.QueryDef
    Dim strSQL As String
    Dim i As Integer
   
    Set dbs = CurrentDb

    For i = 1 To 10    'für zehn QueryDefs  <qryUBE1> -  <qryUBE10>
       
        Set qry = dbs.QueryDefs("qryUBE" & i) ' Abfrage qryUBE1 öffen
       
        strSQL = "SELECT qryKandKursUnion.KandKursID, [Kandidat] & ' (' & [MemoA] & ')' AS AnzKandidat, qryKandKursUnion.KursA, qryKandKursUnion.WocheA, " _
            & " qryKandKursUnion.TagA, qryKandKursUnion.TageszeitA, Format([StdBeginn],'Short Time') AS AnzStdBeginn, Format([StdEnde],'Short Time') AS AnzStdEnde,  " _
            & " Format([DauerPause],'Short Time') AS AnzPause, qryKandKursUnion.PositionA, tblZimmer.Zimmer " _
            & " FROM ((qryKandKursUnion INNER JOIN qryZeitenUndPausen ON qryKandKursUnion.StundeA = qryZeitenUndPausen.ZeitID) " _
            & " INNER JOIN tblZimmer ON qryKandKursUnion.ZimmerA = tblZimmer.ZimmerID) INNER JOIN tblWoche ON qryKandKursUnion.WocheA = tblWoche.WocheID " _
            & " WHERE (((qryKandKursUnion.WocheA)=[AuswahlWoche]) AND ((qryKandKursUnion.TagA)=[AuswahlTag]) AND ((qryKandKursUnion.PositionA)=" & i & "));"
       
        qry.SQL = strSQL                ' neue Sql Anweisung reinschreiben
        qry.Close
    Next i
    Set qry = Nothing
    dbs.Close
    Set dbs = Nothing
End Sub

Wenn [AuswahlWoche] und [AuswahlTag] Feldwerte aus dem Formular sind kann man die auch aus der Abfrage rauszeihen und durch die Werte ersetzten:

          & " WHERE (((qryKandKursUnion.WocheA)=" & me.auswahlwoche & ") AND ((qryKandKursUnion.TagA)=" & me.auswahltag & ") AND ((qryKandKursUnion.PositionA)=" & i & "));"

Frithjof