Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Teufelchen1985 am August 08, 2011, 11:14:48

Titel: Auswahl, welche Abfragen für Bericht verwendet werden
Beitrag von: Teufelchen1985 am August 08, 2011, 11:14:48
Hallo zusammen,

ich entschuldige mich schon mal vorab, falls es einen ähnlichen Beitrag schon mal gab, aber leider habe ich überhaupt keine Ahnung wie ich danach suchen soll.

ich habe eine Datenbank, die Projekte der nächsten vier Jahre zeigt. nun ist es so, dass im Bericht mal nur das laufende Jahr, dann wiederrum die nächsten 2 Jahre und ab und an die komplette Planung der nächsten 4 Jahre betrachtet werden wolle. An sich wäre das kein Problem, nun kann es aber sein, dass ein Projekt in 2 dieser Berichte auftaucht, weil es in einem Jahr anfängt und in dem nächsten weitergeht.

d.h. ich habe jetzt pro Jahr ein separate Abfrage, um alle Projekte zu filtern.

Nun muss ich auf dem Startformular eine Möglichkeit schaffen, dass man die jeweiligen Jahre auswählen kann und dann die benötigten Abfragen "zusammengespielt werden".

Ich hoffe, ihr versteht mein Anliegen und könnt mir weiterhelfen!

Lieben Dank
Teufelchen
Titel: Re: Auswahl, welche Abfragen für Bericht verwendet werden
Beitrag von: database am August 08, 2011, 12:31:32
Hallo,

Zitat...nun kann es aber sein, dass ein Projekt in 2 dieser Berichte auftaucht, weil es in einem Jahr anfängt und in dem nächsten weitergeht...

Und das soll so nicht sein?

Es wird ja so sein, dass ein Projekt auch unter Anderem ein Startdatum hat.
Wenn du nun obigen Fall ausschließen willst, dann musst du lediglich dafür sorgen,
dass bei der Datenauswahl nur jene Projekte gefunden werden, deren Startdatum im ausgewählten Jahr liegt.

ZitatNun muss ich auf dem Startformular eine Möglichkeit schaffen, dass man die jeweiligen Jahre auswählen kann und dann die benötigten Abfragen "zusammengespielt werden".

Das sollte ja nicht das große Unglück sein  ;D

Erstelle ein Kombifeld, welches die Jahreszahlen aus der Projekttabelle bezieht (nur das Startdatum ist relevant).
Mittels einer Optionsgruppe könnte man dann festlegen ob zum ausgewählten Jahr nur das eine, ein weiteres oder die nächsten 4 Jahre zu berücksichtigen sind.

Der Bericht, in dem die Projektdaten angezeigt werden sollen wird vermutlich auf einer Abfrage beruhen.
Wenn du nun ins Klickereignis eines Buttons - der für den Berichtsaufruf zuständig sein soll - den entsprechenden Code für die dynamische Gestaltung der Abfrage schreibst, hast du deine Wünsche erfüllt.
Diese Code könnte wie folgend aussehen:

Der Button zum Aufruf des Berichts:   cmdBericht
Das Kombifeld:   cboJahr  ... Bezeiht die Daten aus der Projekttabelle, besitzt nur ein Feld und enthält "SELECT Year(Stardatum)  as J FROM Projekttabelle ORDER BY Startdatum DESC" als Datenherkunft
Die Optionsgruppe: fraAnzahl ... mit 4 Optionsschaltflächen und den Einträgen 1-Ein Jahr, 2-Zwei Jahre, 3-Drei Jahre, 4-Vier Jahre


Private Sub cmdBericht_Click()

   Dim strSQL As String, strWhere as String

   strSQL = "SELECT * FROM ....."  'Hier kopierst du die SQL deiner Abfrage OHNE WHERE-KLAUSEL und OHNE Strichpunkt am Ende des SQL-Statements, die du JETZT für den Bericht hast.

   Select Case fraAnzahl
       Case 1
            strWhere = " WHERE Year(Startdatum) =" & Me!cboJahr
            strSQL = strSQL & strWhere
       Case 2
            strWhere = " WHERE Year(Startdatum) BEETWEEN " & cboJahr & " AND " & cboJahr + 1
            strSQL = strSQL & strWhere
       Case 3
            ...
            ...

   End Select

   CurrentDB.Querydefs("NameDeinerAbfrage").SQL = strSQL

   Docmd.OpenReport "DeinBericht", acViewPreview


End Sub


HTH
Titel: Re: Auswahl, welche Abfragen für Bericht verwendet werden
Beitrag von: Teufelchen1985 am August 08, 2011, 14:02:20
ok. ich scheine mich wohl zu komplex ausgedrückt zu haben. ich habe nun doch eine kleine Beispieldatenbank gebaut (die jegliches filtern der Projekte nicht umfasst, sondern nur das darstellt, bei dem ich Schwierigkeiten habe:

1. im Formular1 können nun die Jahre angetickert werden, die man sehen möchte

2. in der Abfrage "A-List" stehen nun die Abfragen, die ausgeführt werden sollen.

3. die Abfragen werden mit einem COde durchgeführt. und hier scheint immer noch ein Fehler zu sein:

Private Sub Befehl18_Click()

    Dim stDocName As String
   
    stDocName = "Delete"
    DoCmd.OpenQuery stDocName, acNormal, acEdit



Dim db As Database
Dim qry As QueryDef
Dim Superqry As QueryDef
Dim rst As Recordset
Dim strQry As String
Dim strNamen As String
Dim Abfrage As Field


Set db = CurrentDb()
strQry = "A-List"

Set qry = db.QueryDefs(strQry)
Set rst = qry.OpenRecordset()


While Not rst.EOF
        For Each Abfrage In rst.Fields
            Set Superqry = db.QueryDefs(Abfrage)
            Superqry.Execute
            Superqry.Close
        Exit For
Next
rst.MoveNext
    Wend

rst.Close


DoCmd.Close

   
End Sub


anbei auch die Datei, um es besser nachvollziehen zu können!

Lieben Dank
Teufelchen

[Anhang gelöscht durch Administrator]
Titel: Re: Auswahl, welche Abfragen für Bericht verwendet werden
Beitrag von: DF6GL am August 08, 2011, 15:36:03
Hallo,

sorry,  reichlich verworren ist das Ganze und praktisch an allen Ecken und Kanten morsch.

1)  keine Sonder- und Leerzeichen in Namen verwenden
2) Datentypen in Abfragen und Tabellen passend deklarieren und  auch konsequent weiterverarbeiten.
3) Tabellen gleichen inhaltlichen Sinns, bzw. Bedeutung zu einer zusammenfassen (--> Normalisierung).  Für jedes Jahr eine eigene Tabelle zu benutzen, führt zu unlösbaren Problemen und erfordert Tricksereien immer und überall.
4) Im Code überflüssige Abfrage-Öffnung
5) (m. E. lt. den Tabellen) falsches/überflüssiges Durchlaufen der Datensatzfelder
6) Öffnen einer Aktionsabfrage mit OpenQuery statt mit RunsQL, bzw db.Execute.


Mehr will ich erst mal nicht "investieren", weil auch die Korrektur des Codes bei ungeänderten Tabellen-Abfragestrukturen keinen Erfolg bei vertretbaren Aufwand ergibt.

Mindestens solltest Du aber mal die GENAUE Struktur (Tabellennamen, Tabellenfelder, Datentypen, Beziehungen) aus  der Original-DB hier beschreiben..  Vielleicht lässt sich dann ein konkreter Vorschlag finden.