Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Listenfeld mittels Kombifeld filtern

Begonnen von claudia2324, September 18, 2012, 17:01:04

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

ZitatKlappt alles in der Version von DF6GL!


Vorsicht: Ich habe nur teilweise (für den Bericht_1) die Sache beispielhaft angepasst.....   8) 

Du solltest ALLES damit im Zusammenhang Stehende nachsehen (SQL-Strings für das Listenfeld --> fehlende Select-Feld-Trennzeichen -- Kommata--  zusätzliches Teilnehmer_ID-Feld in Spalte 0 etc.. , Aufruf des Berichtes, Übergabe des TextfeldInhaltes an den Bericht mittels Openargs ...)

Schliesslich mußt Du auch noch was zu tun haben...  ;)

claudia2324

#16
 ;) Alles klar.

Na mal sehen ob das mein Problem mit der Anzeige der Filterung nach dem Wechsel in die Entwurfsansicht und zurück löst?!??Zumindest klappt es schon mal unfertig in deiner Version. Das verwirrt....

Das mit den Teilnehmer_ID-Feld in Spalte 0 habe ich nicht ganz verstanden. Es bewirkt dass nur der markierte DS im Listenfeld übergeben wird. Das soll so nicht sein. Sorry, wenn ich mich da falsch ausgedrückt habe. Die eingegebene Gebühr gilt für alle gefilterten Teilnehmer. Also soll diese auf jeder Berichtsseite stehen. Wie wäre hier die Anpassung des Quellcodes? Oder hab ich da was nicht verstanden?

Ich würde mich freuen wenn ihr mir nochmal unter die Arme greifen könnt.

LG

DF6GL

Hallo,


--die Teilnehmer_ID aus der ersten Spalte (Column(0) ) wird im Listenfeld nicht angezeigt, weil ich die Spaltenbreite der ersten Spalte auf 0cm gesetzt habe...

--"Das soll so nicht sein"   doch, das soll so sein, weil man in Datenbanken mit den Schlüsselfeldern (hier die Teilnehmer_ID als Primärschlüssel) arbeitet (dringend angeraten..).   Column(0) wird benutzt, um den (bzw. die ) Bericht(e) mit dem Datensatz des ausgewählten Teilnehmers zu öffnen

-- Die eingetragene Gebühr wird an den Bericht übergeben (mittels Openargs-Parameter) , unabhängig davon, welchen Listenfeldeintrag man wählt.. Es braucht keine Änderung des Codes.


Du mußt lediglich alle Bericht so aufbauen, wie es beim Bericht_1 gemacht ist.... (Ereignisprozedur  "Beim Laden")





claudia2324

#18
Danke für die Erklärung.  :)

Ok, dann baue ich die Berichte weiter auf. Vielleicht sehe ich dan klarer?! Es soll die Gebühr eben an alle Teilnehmer gefiltert nach Raum in den jeweiligen Bericht übertragen werden...)

Ein weitere Sache hat sich noch ergeben. Es soll nun auch ein Code übergeben werden -> dreistellige Zahl, Bez. -> "Code_intern".. In dem Formular Orga_Kurse gibt es also ein weiteres Textfeld welches mittels OpenArgs an den Bericht übergeben werden muss.

Wie integriere ich dies korrekt in den bestehenden Code?

Option Compare Database

Private Sub Report_Load()
If Not IsNull(Me.OpenArgs) Then Me!Kursgebuehr = Format(Me.OpenArgs, "#,##0.00 €")
End Sub

DF6GL

Hallo,

bist Du sicher, dass Deine Tabellen vollständig sind, d. h. alle nötigen und benötigten Daten, bzw. Felder enthalten? Vermutlich ist da Nacharbeit angebracht.  Solche "zufälligen" Daten, bzw. nicht zugeordnete Daten bringen einen manchmal zu Fall...

1. Möglichkeit der Datenübergabe mehrerer Felder:   Den Openargs-Parameter in Form einer Liste mit z. B. dem Semikolon als Trennzeichen beschicken und mittels Split-Funktion in der Load-Ereignisprozedur wieder zerpflücken.

2. Möglichkeit: Im Steuerelementinhalt eines Berichts-Textfeldes auf das (oder halt auch jeweils die) Formular-Textfeld(er) verweisen:

=Forms!Orga_Kurse!Code_intern

claudia2324

#20
Hallo,

danke nochmal, das mit der Anzeige des Textfeldes im Bericht klappt.

Ansonsten habe ich den Fehler noch nicht gefunden, der das Filtern blockiert. Was meinst du mit "zufälligen Daten" genauer?

Die Abfrage enthält alle Daten (und noch ein paar Felder mehr, welche für die Funktionen hier nicht benötigt werden) die in dem Listenfeld stehen sollen und an den Bericht übergeben werden. Also auch mehrere IDs wie Teilnehmer oder Raumnummer oder Kursnummer aus anderen Tabellen. Ich habe die hier hochgeladene DB reduziert und die Tabelle Kurs, auf die sich die verwendete Abfrage bezieht nachgebaut aus anonymisierungs Gründen und um nicht alles nachbauen zu müssen. Ob es nun genau hier harkt, sodass es eben nur im Nachbau funktionieren kann?

So sieht der String für die Abfrage 'Kurs_Abfrage' aus:

SELECT Kurs.Teilnehmer_ID, Trim(Orga.Nachname) AS Nachname, Trim(Orga.Vorname) AS Vorname, PGTD.Nr AS cycle, String(3-Len(PGTD.Nr),'0') & PGTD.Nr AS cycletxt, PGTD.Uhrzeit, PGTE.Nr AS Raumnr, PGTE.level AS levelnname, String(3-Len(PGTE.Nr),'0') & PGTE.Nr AS Raumnrtxt, Kurs.PGT_startoff AS startoff, 10-startoff+2-IIf(startoff<=1,10,0)+10*(PGTD.Nr-1) AS poPGT1
FROM ((Kurs_Abfrage AS AdH INNER JOIN Orga_Teilnehmer AS Orga ON Kurs.Lfdnr = Orga.Lfdnr) LEFT JOIN PGT_leveln AS PGTE ON Kurs.PGT_level = PGTE.level_ID) LEFT JOIN PGT_startoff AS PGTD ON Kurs.PGT_cycle = PGTD.cycle_ID
WHERE (((Kurs.Info)=4));


Ich hoffe ihr könnte mir nochmal Hinweise geben.

LG

Claudia

DF6GL

Hallo,

Zitat
Die Abfrage enthält alle Daten (und noch ein paar Felder mehr, welche für die Funktionen hier nicht benötigt werden) die in dem Listenfeld stehen sollen und an den Bericht übergeben werden.

Das siehst Du hier aber ziemlich falsch..   :o    An den Bericht sollen keine Einzeldaten aus den Spalten eines Listenfeldes übergeben werden, die wiederum aus verschiedenen Tabellen und ominösen Berechnungen stammen, sondern nur die ID bzw. ein passendes Kriterium für den/die betroffenen Datensätze (als Where-Condition-Parameter bei Aufruf des Berichtes mittes der OpenReport-Methode.  Berechnungen und Gruppierungen/Sortierungen werden grundsätzlich im Bericht erledigt. Die Berichtsabfrage enthält nur als Select-Liste die Felder aus den passend verknüpften Tabellen (wobei ich meistens das "Sternchen" hernehme ,weil ich mich dann nicht mehr um diese Abfrage kümmern muss, wenn mal ein Feld in irgendeiner Tabelle hinzukommt)

Übernahme von Daten aus Formular-Textfeldern ist allenfalls quick&dirty und nur im Einzelfall für statische Daten (z. B.:  für eine Überschrift) brauchbar.



claudia2324

#22
Ok,

Es klappt nun, dass der richtige Bericht über das Kombifeld KKursraum aufgerufen wird.

Nun fehlt noch die Filterung der Daten nach dem Kursraum "Raumnr" (1-5). Es gibt für jeden Kursraum einen Bericht wegen der unerschiedlichen Kursinhalte.

Dann muss also nun beim Laden des Berichts die Filterung erfolgen.

Also beim öffnen des Berichts:

Private Sub Kursliste_Click()  ??[/color]

    Dim stDocName As String

   stDocName = Bericht_" & Me!KKursraum
   
   DoCmd.OpenReport stDocName, acPreview
 
End Sub

ODER

Beim Laden des Berichts

Private Sub Report_Load() ??[/b]

ODER

Geht das auch einzustellen im Eingenschaftsblatt des Berichts unter Daten, dann Filter?

Und wie muss ist der Code des Befehls dann?

Ich hoffe ich kann das nochmal so direkt erfragen, denn ich bin Änfänger und froh über jeden Tipp. Ich komme so einfach nicht weiter.... :-[

claudia2324

So, endlich mal was alleine hinbekommen. Wenn auch nur was "Kleines"...

So klappts mit der 'Übergabe' der gefilterten Daten in den Bericht.

Private Sub Kursliste_Click()


   Dim stDocName As String

   stDocName = "Bericht_" & Me!KKursraum 'Berichtname
   
   DoCmd.OpenReport stDocName, acPreview, , "[Raumnr]='" & Me!KKursraum & "'"

End Sub

claudia2324

Zwei Fragen habe ich nun dennoch:

1) Wie kann ich die Berichte mit den gefilterten Daten direkt als pdf an den Ablageort der Datenbank speichern? Ohne den Weg, sich den Bericht erst anzeigen zu lassen und dann als pdf zu drucken.

2) Es wird geplant Multiple-Choice Abschlusstest zu erstellen, welche für Auswertungen  mittels einer OMR Software eingescananntwerden sollen. Meine Frage hierzu ist, wie man Daten aus Access direkt in Word oder PDF Felder (FDF Tookit?!  ???) übergeben kann? Es geht hierbei darum eine Lösung für eine bzw. mehrere feste Formatvorlagen zu finden damit die Test scannbar sind.

Hoffe ihr könnt mir hierzu Tipps geben.

Evtl. Fragen als neue Themen?

LG

Claudia

DF6GL

Hallo,

1)  wenn Du A2007/A2010 hast, kann  

DoCmd.OutputTo acOutputReport, "Bericht_1", acFormatPDF, "c:\Bericht_1.pdf"

helfen (siehe VBA-Hilfe)



2) Wozu Word  oder Übergabe an PDF-Felder?   Generiere den Report so, dass er dem bestimmten Layout genügt.  Die Einscan-Software muss dann in der Lage sein, eingescannte Texte an bestimmten Stellen auf dem Papier entspr. (Daten-)Feldern zuzuweisen und das Ganze als CSV-Datei exportieren zu können, die   wiederum in Access importiert wird.


claudia2324

Hallo,

vielen Dank.

Ja, habe A2010 und 2007.

zu 1)

Wie lässt sich der vorgeschlagene VBA Code...

DoCmd.OutputTo acOutputReport, "Bericht_1", acFormatPDF, "c:\Bericht_1.pdf

In den schon vorhandenen Code integrieren, sodass die Auswahl der verschiedenen Berichte über das Kombifeld erhalten bleibt?

Private Sub Kursliste_Click()

    Dim stDocName As String

stDocName = "Bericht_" & Me!KKursraum
   
    DoCmd.OpenReport stDocName, acPreview, , "[Raumnr]='" & Me!KKursraum & "'"
       ' DoCmd.OutputTo acOutputReport, "Bericht_", acFormatPDF, "c:\Bericht_.pdf" -> gibt so eine Fehlermeldung[/b][/i]

End Sub


2) Warum gefilterte Daten in Word oder PDF...

Weil bei dieser feste Formatvorlage die Kopf- und Fußzeile bei allen Tests gleich sein soll und somit mit nur einem OMR-Template alles gescannt werden kann (nur Kopf und Fuß werden gescannt). Das lässt sich z.B. in Word realisieren. Der Mittelteil kann so von den Testerstellen individuell gestaltet werden, was notwendig ist. In Access-Berichten in der Entwurfsansicht kann mal was verrutschen beim Formatieren... Oder?! 

DF6GL

Hallo,



erstell für jeden Bericht eine (gespeicherte) Abfrage ("abf_Bericht_X")  .    "X" ist die "Berichtsnummer"..



Private Sub Kursliste_Click()

Dim stDocName As String, strSQL as String


strSQL=" Select * from tblTabellexYZ        Where [Raumnr]='" & Me!KKursraum & "'"     'stellvertretend für Deine "Kurs_Abfrage"

stDocName = "abf_Bericht_" & Me!KKursraum

Currentdb.Querydefs(stDocName).SQL =  strSQL
   
DoCmd.OutputTo acOutputReport, "Bericht_" &  Me!KKursraum , acFormatPDF, "c:\Bericht_" &  Me!KKursraum & ".pdf"
End Sub



claudia2324

Dankeschön!  :)

Bekomme nur leider an folgender Stelle einFehlermeldung -> Laufzeilenfehler 3265 "Element in dieser Auflistung nicht gefunden"

CurrentDb.QueryDefs(stDocName).SQL = strSQL

Warum das?

:-\

Beaker s.a.

Hallo Claudia,
ZitatLaufzeilenfehler 3265 "Element in dieser Auflistung nicht gefunden"
Da steht ein Feldname in strSQL, der nicht in der Tabelle/Abfrage
existiert. Vergleiche die Feldnamen.
hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)