PDA

Vollständige Version anzeigen : Beim Öffnen eines Berichts Datensatzherkunft einstellen


Andreas B
19.06.2001, 09:08
Hallo,

in einem Formular existiert ein Button. Beim Klick auf ihn soll ein Bericht angezeigt werden, per VBA-Code.
Da das ganze dynamisch sein sollte, ändert sich bei jeden Aufruf das Select-Statement in der Datensatzherkunft.
Daher möchte ich bei jeden Aufruf des Berichts die Datensatzherkunft einstellen, wie mache ich das?
Hab die Methode "OpenReport" gefunden, womit man aber nur den Filter einstellen kann, was aber nicht das gleiche ist wie die Datenherkunft.

CU,
Andreas B

Birgit Dannenberg
19.06.2001, 09:13
Hallo Andreas!

Schreibe folgende Zuweisung beim Report_Open Ereignis:

Me.RecordSource = meineAbfrage

Du kannst auch direkt den SQL-String angeben.

Unter A2000 kann man wohl auch bei Reports mit OpenArgs arbeiten, hörte ich mal...


Gruss Birgit

Mickey
19.06.2001, 09:17
Hallo Andreas,

Wie groß sind denn die Abweichungen, die zwischen den einzelnen Recordsources bestehen? Ich habe das bei mir so gelöst, daß in Abhängigkeit von einem Feld im aufrufenden Formular, die dem Bericht von Beginn an zugewiesene Datenherkunft abgewandelt wird. Im Ereignis "Report Open"

Select Case Forms![Ein_Formular].[Ein_Feld]
Case 1
Me.RecordSource = Me.RecordSource & .....
Case 2
Me.RecordSource = Me.RecordSource & .....
Case Else
....
End Select

Aber bei mir sind die Änderungen zwischen den einzelnen Varianten auch sehr gering.
Deshalb noch mal die Frage nach den Abweichungen..

Ciao Mickey

Andreas B
19.06.2001, 09:31
So groß sind die Abweichungen nicht.

Es ändert sich eigentlich nur der Tabellenname, wobei der Aufbau der Tabellen gleich ist, außer das vielleicht die Datenmenge größer ist.

Andreas B
19.06.2001, 10:03
Hallo nochmal,

beim Öffnen des Berichts ist es wichtig, als Datensatzherkunft eine SQL-Anweisung anzugeben. Die Anweisung ist u.U. bei jeden Öffnen eines Berichts unterschiedlich, aber nur der Tabellenname ändert sich dabei, wobei die Datenstrukur gleich bleibt.

Vielleicht mal was grundlegendes:
Die DB dient als eine Art von Monitor, indem verschiedene Daten-DBs angezeigt werden können. In einem Formular muss der User zuerst eine Daten-DB und den gewünschten Auswertungsbericht auswählen. Für den Bericht sind 2 Tabellen aus den jeweiligen Daten-DBs wichtig, wobei in der Monitor-DB dann Verknüpfungen zu diesen existieren. Beim Klick auf den Button "Anzeigen Bericht" soll der Bericht angezeigt werden, auf Basis einer SQL-Abfrage mit der zutreffenden Tabellenverknüpfung.

Das Ereignis Report_Open kann man doch nur im Klassenmodul des Berichts aufrufen, oder? Woher weiß ich dann da, welche Tabelle ich ansehen möchte und welche ausgewählt wurde.

Andreas B

Birgit Dannenberg
19.06.2001, 10:28
Hallo Andreas,

wenn Du ein Formular hast, mit dem Du die Auswahl triffst, kannst Du doch im Bericht darauf zugreifen. Du mußt nur sicher stellen, daß das Formular geöffnet bleibt.
Andernfalls stellst Du Dir die Parameter (Tabellenname etc.) in globale Variablen.

Vielleicht kannst Du ja auch etwas 'tricksen', indem Du Deine SQL-Anweisung als Where-Klausel mitgibst und diese beim Öffnen der RecordSource zuweist und im Filter löschst.

Du kannst aber auch den SQL-String - den Du ja zu haben scheinst - in einem unsichtbaren Formularfeld bzw. in einer globalen Variablen zwischenspeichern.
Der Möglichkeiten gibt es viele....

Gruss Birgit

Mickey
19.06.2001, 10:39
Hallo Andreas,

Du sagst, die Tabellen sind vom Aufbau alle gleich, haben nur unterschiedliche Namen.
Der User muß irgendwo die Tabellen auswählen.
Zum Beispiel in einem Kombifeld. Wenn der User den Button für den Bericht clickt, blendest Du Dein Form über

Me.Visible=False aus, nicht schließen.

Dann wird der Bericht geöffnet, in der Prozedur Report_Open wird der Inhalt des Formular-Kombifeldes ausgelesen und die Datenherkunft angepaßt.

zB:

Private Sub Report_Open(Cancel As Integer)

Me.RecordSource = "SELECT * FROM" &Forms![Dein_Form].[Dein_Kombifeld]

End Sub

In dem Befehl werden per SQL-Anweisung alle Felder aus der Tabelle eingelesen. (Name der Tabelle steht im Kombifeld. Achte darauf, das die gebundene Spalte des Kombifeldes auch wirklich die ist, die den Tabellennamen enthält)

Ich hoffe, das hilft Dir erstmal etwas weiter.

Ciao Mickey

Andreas B
19.06.2001, 10:59
Danke, das hilft mir schon viel weiter.

Aber noch eines, die verfügbaren Daten-DBs möchte ich in einem Listenfeld anzeigen lassen, so dass man sofort sieht, welche verfügbar sind. Die verfügbaren DBs kommen aus einer Tabelle. In dieser Tabelle wird der Pfad der DB gespeichert sowie der Name der Verknüpfungstabelle. Angezeigt im Listenfeld soll aber nur der Pfad.
Wie kann ich dann jetzt auf den Verkn.Namen zugreifen? Kann man es so machen, dass der Verkn.Name unsichtbar ist, d.h. zwar selektiert wird, aber nicht angezeigt wird im Listenfeld?

Birgit Dannenberg
19.06.2001, 11:05
Setze die entsprechende Spaltenbreite auf 0, dann wird das Feld nicht angezeigt, kann aber benutzt werden.

Birgit

Andreas B
19.06.2001, 12:13
Vielen Dank an euch beide, habt mir wirklich sehr weitergeholfen, danke.