PDA

Vollständige Version anzeigen : Bericht: Steuerelementinhalt aus anderer Abfrage


Helchi
10.09.2003, 14:10
Hallo zusammen,

nehmen wir an, ich habe in einer DB einen Bericht B, der auf einer Abfrage A1 beruht. Kann ich in diesem Bericht auch auf den Steuerelementinhalt aus einer zweiten Abfrage A2 zugreifen? Wenn ja, wie?

Danke, Helchi

Morli
10.09.2003, 14:14
Das kannst Du z.B. mit DLookup oder einer anderen Domänenaggragatfunktion machen.

Morli

Helchi
10.09.2003, 14:36
Danke für den Tipp Morli. Ich hab mit der AccessHilfe folgendes als Steuerelementinhalt geschrieben:

=DLookup("[Time_Period]", "Table_Time_Periods", "[Time_Period_ID] ="& qselVariation.[Time_Period_ID])

Leider funktioniert das nicht -> Kann Eigenschaften nicht schließen

"Der von Ihnen eingegebene Ausrduck ist syntaktisch falsch." :confused:

PS: Szenario [Access2000]

Bericht <-- Abfrage qselFinalVariation <-- Kreuzabfrage qxtbVariation <-- Abfrage qselVariation

WMS
10.09.2003, 14:50
=DLookup("[Time_Period]", "Table_Time_Periods", "[Time_Period_ID] =" & qselVariation.[Time_Period_ID])

..."[Time_Period_ID] ="_& hier bei "_" habe ich ein Leerzeichen eingefügt

Was ist 'qselVariation' :bawling:

Helchi
10.09.2003, 15:03
Hi WMS,

leider geht das auch nicht --> wieder obige Fehlermeldung nach Verlassen des Eingabefeldes! :confused:

Der Bericht holt seine Daten aus der Abfrage qselFinalVariation.
qselFinalVariation holt seine Daten aus der Kreuztabellenabfrage qxtbVariation.
qxtbVariation holt seine Daten aus der Abfrage qselVariation.
qselVariation holt seine Daten aus der Tabelle Table_Time_Periods(Time_Period_ID, Time_Period)

WMS
10.09.2003, 15:13
die 2. Abfrage müsste in der A1 als Datenbasís integriert sein. :confused:

WMS
10.09.2003, 15:23
... die letzte Antwort ziehe ich zurück! :bawling: War ein Querschläger :mad:

Wenn du die Abfragen immer wieder als Datenbasis für die nächste Abfrage verwendest,
müsste es also in der Datenbasis für den Bericht 'qselFinalVariation' ein Feld geben 'qselVariation.[Time_Period_ID]'? :confused:

Meines erachtens wird ein Feld nie mit der Quellangabe abgespeichert 'qselVariation.[Time_Period_ID]', sondern nur mit dem Feldnamen '[Time_Period_ID]' :confused:


oder versuch mal: [qselVariation].[Time_Period_ID]) :confused:

Helchi
10.09.2003, 15:28
Also mit ; statt , erkennt er DomWert / DLookup jetzt:

=DomWert("[Time_Period]";"Table_Time_Periods";"[Time_Period_ID] =" & [qselVariation].[Time_Period_ID])

Aber jetzt schreibt er hin: Das Jet-Datenbankmodul erkennt 'qselVariation' nicht...

Das hatte ich schon mal, da muss ich jetzt den Parameter festlegen oder so?
Kann ich überhaupt über diese 4 Ecken auf das Feld 'Time_Period_ID' zugreifen?
Dieses Feld ist nämlich nur in qselVariation vorhanden, in den anderen Queries nicht mehr...

WMS
10.09.2003, 15:35
...das Feld musst du natürlich immer mit hochziehen bis in die Datenbasis vom Bericht ,also in der Query 'qselFinalVariation' muss es auch stehen. :confused:

Helchi
10.09.2003, 15:47
...das Feld musst du natürlich immer mit hochziehen bis in die Datenbasis vom Bericht


Bist du dir da sicher? Was bringt dann überhaupt DomWert??? :confused:
Dann könnt ich es ja gleich ohne in den Bericht ziehen...

Helchi
10.09.2003, 16:16
Also auch nach intensivem Brainstorming bin ich nicht weitergekommen.
Ich poste jetzt auch mal meine Abfrage 'qselVariation':


SELECT C.Customer_Name, PR.Project_Name, V.Variation_Name, Nz([P].[Part_Key_New],[P].[Part_Key_Old]) AS Part_Key,
P.Part_Name, FG.Functional_Group_Name, FS.Functional_Subgroup_Name, PFP.Price, PFFS.Amount_For_Functional_Subgroups AS Amount,
CCur([Price]/[Price_Unit]*[Amount_For_Functional_Subgroups]) AS TotalPrice, TP.Time_Period_ID

FROM ((Table_Customers AS C INNER JOIN Table_Projects AS PR ON C.Customer_ID = PR.Ref_Customer_ID) INNER JOIN
Table_Variations AS V ON PR.Project_ID = V.Ref_Project_ID) INNER JOIN
(Table_Time_Periods AS TP INNER JOIN ((Table_Parts AS P INNER JOIN
(((Table_Functional_Groups AS FG INNER JOIN
Table_Functional_Subgroups AS FS ON FG.Functional_Group_ID = FS.Ref_Functional_Group_ID) INNER JOIN
Table_Parts_For_Functional_Subgroups AS PFFS ON FS.Functional_Subgroup_ID = PFFS.Ref_Functional_Subgroup_ID) INNER
JOIN Table_Parts_For_Variations AS PFV ON PFFS.Parts_For_Functional_Subgroup_ID = PFV.Ref_Parts_For_Functional_Subgroup_ID) ON P.Part_ID = PFFS.Ref_Part_ID) INNER JOIN
Table_Prices_For_Parts AS PFP ON P.Part_ID = PFP.Ref_Part_ID) ON TP.Time_Period_ID = PFP.Ref_Time_Period_ID) ON V.Variation_ID = PFV.Ref_Variation_ID

WHERE (((TP.Time_Period_ID)=1) AND ((V.Variation_ID) In (8,9,10,11)));


Ziel ist es, nur den Namen der Time_Period ("06/07") in den Bericht zu bekommen...

Helchi
10.09.2003, 19:09
Was stimmt denn an dem folgenden Code nicht - ich komm einfach nicht drauf... :(

Bericht - Steuerelementinhalt =DomWert("[Time_Period]";"Table_Time_Periods";"[Time_Period_ID] =" & [qselVariation].[Time_Period_ID])

jmc
10.09.2003, 19:19
Hi Helchi

das eigentliche Problem ist, dass du dich in der Where-Bedingung auf die Query beziehst, diese kann aber so im Bericht gar nicht angesprochen werden!
Was aber sicher verfügbar ist, das ist doch die Time_Period_ID, welche ja in der Datenherkunft (qselVariation) des Berichtes ist.
Du kannst also ganz einfach das Ding so anpassen:

....;"Time_Period_ID =" & Me!Time_Period_ID)

müsste eigentlich funktionieren, sonst nimm das Feld in den Bericht und mach es unsichtbar!

NB: eckige Klammern sind eigentlich nur nötig, wenn du Leerstellen oder Sonderzeichen (z.b. - ) in den Feldnamen hast, das ist ja hier aber zum Glück nicht der Fall :top:

Helchi
11.09.2003, 08:09
=DomWert("[Time_Period]";"[Table_Time_Periods]";"[Time_Period_ID] =" & [Me]![Time_Period_ID])

Leider funktioniert es auch so nicht - Das Microsoft Jet-DB Modul erkennt Me nicht als gültigen Feldausdruck.

Dumme Frage: Kann ich überhaupt in dem Bericht auf qselVariation zugreifen???

Der Ablauf ist so:
----------------------
Formular --> erzeugt Abfrage qselVariation nach obigem Code (mit Time_Period_ID)
Formular --> erzeugt Kreuzabfrage qxtbVariation aus qselVariation (ohne Time_Period_ID)
Bericht --> erzeugt Abfrage qselFinalVariation aus qxtbVariation da dynamischer Bericht (ohne Time_Period_ID)

:confused: :confused: :confused:

WMS
11.09.2003, 08:23
Morn Helchi,

du musst in der Datenbasis zum Bericht zumindest das Feld 'Time_Period_ID' aus der 'qselVariation' haben;

dann kanst du diese Bedingung anwenden

.....]";"[Time_Period_ID] =" & Time_Period_ID) :confused:

hier sehe ich aber keinen Sinn, da die Bedingung die gleiche ist?!!? :bawling:

oder du hast ein Textfeld im Formular, die die 'Time_Period_ID' der Abfrage 'qselVariation' beinhaltet; dann kannst du diese Bedingung anwenden.

.....]";"[Time_Period_ID] =" & Forms!MeinForm.Feld_Time_ID) :confused:

...oder verstehe ich da was nicht richtig? :bawling:

Helchi
11.09.2003, 08:33
Also ich habs jetzt so implementiert wie du gesagt hast:

=DomWert("[Time_Period]";"[Table_Time_Periods]";"[Time_Period_ID] =" & [Formulare]![frmSelectVarPeriod]![txtPeriod])


Leider öffnet sich der Bericht aus dem Formular jetzt gar nicht mehr! :bawling:

Kannst du dir vielleicht mal meine DB anschauen? Hab sie mit angehängt. Danke!

WMS
11.09.2003, 08:37
:bawling: Kann leider deine Datenbank nicht öffnen, da ich im Moment nur A97 zur Verfügung habe. Häng sie mal im A97-Format an. :angel:

Arne Dieckmann
11.09.2003, 08:45
Ich bin etwas verwirrt: In dem angehängten Beispiel wird doch die ausgewählte Zeitperiode innerhalb des Berichtes angezeigt ...?

jmc
11.09.2003, 09:08
Hi Helchi

Ja - du musst eben diese Time_Period_ID durch alle deine Abfragen und Kreuztabellen durchziehen ! Aber davon haben wir ja die ganze Zeit gesprochen ...

als Erste mal in qxtbVariation
dann in qselFinalVariation, da wird interessanterweise immer ein Feldname F0 draus gemacht ... (keine Ahnung wie das zustande kommt)
und schliesslich im Bericht musst du dann den DLookup so ändern:
=DLookUp("[Time_Period]";"[Table_Time_Periods]";"[Time_Period_ID] =" & [F0])

jmc
11.09.2003, 09:11
@Arne

also bei mir kam's ohne Korrekturen zuerst so:

Arne Dieckmann
11.09.2003, 09:22
Wenn ich den Bericht aus dem Formular heraus öffne, geht es bei mir sofort ...? Screenshot spare ich mal.

Helchi
11.09.2003, 09:22
Danke euch dreien! :knuddel:

Ja - du musst eben diese Time_Period_ID durch alle deine Abfragen und Kreuztabellen durchziehen !

Dann werd ich das mal machen! :(

EDIT:
Wenn ich den Bericht aus dem Formular heraus öffne, geht es bei mir sofort ...?

Das verwirrt mich jetzt ein wenig! :confused:

jmc
11.09.2003, 09:22
Hi Helchi

jetzt habe ich nochmals den Bericht aus dem Formular gestartet, das wird ja das ganze SQL immer neu aufgebaut ...
Musst natürlich dort noch ergänzen:

strSQL = strSQL & "TRANSFORM First(CCur(V.TotalPrice))" & vbCrLf
strSQL = strSQL & "SELECT" & vbCrLf
strSQL = strSQL & " V.Time_Period_ID" & vbCrLf '<<<<
strSQL = strSQL & ", V.Functional_Group_Name" & vbCrLf '<<<<
strSQL = strSQL & ", V.Functional_Subgroup_Name" & vbCrLf
strSQL = strSQL & ", V.Part_Key" & vbCrLf
strSQL = strSQL & ", V.Part_Name" & vbCrLf
strSQL = strSQL & ", V.Price" & vbCrLf
strSQL = strSQL & ", V.Amount" & vbCrLf
strSQL = strSQL & ", V.TotalPrice" & vbCrLf
strSQL = strSQL & "FROM qsel" & Basisname & " AS V" & vbCrLf
strSQL = strSQL & "GROUP BY" & vbCrLf
strSQL = strSQL & " V.Time_Period_ID" & vbCrLf '<<<<
strSQL = strSQL & ", V.Functional_Group_Name" & vbCrLf '<<<<
strSQL = strSQL & ", V.Functional_Subgroup_Name" & vbCrLf
qselFinalVariation kannst du lassen, das wird ja dann auch automatisch angepasst!
Sorry für die Verwirrung ... :o

Helchi
11.09.2003, 09:26
Jetzt steh ich total am Schlauch:

Bei Arne funktioniert es ohne jegliche Veränderung, bei mir und jmc nicht...
Was muss ich denn jetzt genau alles ändern? Und welchen DomWert Aufruf im Bericht?
Sorry, dass ich mich jetzt so dumm anstell, aber ich bin total verwirrt, der eine sagt so der andere so... :confused:

Arne Dieckmann
11.09.2003, 09:28
Keine Ahnung, warum das bei mir funktioniert und bei Euch nicht. Wenn es anders nicht klappt, dann versuche Jeans Lösung.

Helchi
11.09.2003, 09:59
Also hau mich blau - jetzt funktioniert es bei mir genauso wie bei Arne! :eek:

jmc
11.09.2003, 10:11
Hi Helchi

na dann lass es so, wie es jetzt ist. Das "Problem" war/ist, dass man den Bericht nur richtig angezeigt bekommt, wenn das Formular offen ist ...
Da ja nun die Nummer für den Zugriff im DLookup aus dem Formular geholt wird.
Ich bin an sich Gegner solcher Lösungen, da dann immer 2 Objekte (Formular, Bericht, Abfrage) voneinander unmittelbar abhänig sind.
Du kannst dann diesen Bericht NUR mit diesem Form zusammen verwenden. Für diesen Fall ist das vermutlich so, aber es kann ja auch anders sein ...

Ich gehe eher nach der Methodik vor, dass Abfragen, Formulare und Berichte eigentlich für sich funktionieren sollten, wenn Daten geholt werden müssen, dann entweder direkt aus einer Tabelle/Abfrage oder dann über eine globale Funktion/Methode.
Aber das ist Ansichtssache ;)

Helchi
11.09.2003, 13:51
Sorry Leute, dass ich jetzt schon wieder damit nerve, aber ich habs jetzt genauso gemacht wie Jean vorgeschlagen hat und hab Time_Period_ID bis in die Datenherkunft des Berichts gezogen. Trotzdem funktioniert es nicht! :(

Bericht - Steuerelement:
=DomWert("[Time_Period]";"[Table_Time_Periods]";"[Time_Period_ID]=" & [F0])

Hier zum Verständnis die Screenshots der Datenherkunft und des Berichts:

Arne Dieckmann
11.09.2003, 13:54
Wenn F0 in der Datenherkunft ist, musst Du das Feld aber noch in den Bericht ziehen (evtl. dann unsichtbar machen). Das Textfeld muss dann auch F0 heissen.

jmc
11.09.2003, 13:58
Hi Helchi

ich häng dir einfach mal die mdb an, die ich bearbeitet habe, dann kannst du mal schauen - irgendwo hast du nen kleinen Bug ...

Helchi
11.09.2003, 14:19
Ahhh ich bin echt so doof - hab jetzt den Fehler gefunden:

Hab das Textfeld in meiner Naivität auch F0 genannt und somit dann mit dem Steuerelement auf sich selbst verwiesen!!! :stupid: :stupid: :stupid:

Tut mir leid, dass ihr wegen meiner Dummheit jetzt noch solche Arbeit hattet. Sorry!!! :angel:

Vielen vielen Dank - die Hilfe von euch hier im Forum hier ist echt spitze! :top:

WMS
11.09.2003, 14:21
:stupid: Au nein!???!

jmc
11.09.2003, 16:07
Hi zusammen

nun ja - so lösen sich Probleme ... :grins:

noch ein kleiner Hinweis zur Bemerkung von Arne:
Das Feld muss nicht zwangsläufig auf dem Report sein (und unsichtbar, wenn nicht erwünscht).

Es genügt, dass es in der Datenherkunft ist, damit man sich in einem Ausdruck darauf beziehen kann !

Arne Dieckmann
11.09.2003, 16:11
@Jean: Mist, Du hast es gemerkt. Ist mir später auch aufgefallen, wollte aber nicht auf meine blödsinnige Bemerkung aufmerksam machen. ;)
Zumindest vermeidet man aber so solche "Zirkelbezüge" (wenn man das Feld als unsichtbares Textfeld anlegt und auch beispielsweise F0 benennt).

jmc
11.09.2003, 16:30
@Arne

sorry - wollte dich natürlich nicht blosstellen :holy: *vergebung*

Deine Methode hat auch was - insbesondere für "Anfänger" ... ;)