Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Sortieren in Bericht





Frage

Tach Zusammen, In einem Bericht gebe ich Datensätze aus. Diese möchte ich jedoch nach einem Klick auf einen Button in einem Formular sortiert ausgeben lassen (z.B. nach Name; davor ohne Klick nach Nr). Wie kann ich das am einfachsten (in Visual Basic) programmieren? Danke für jede Antwort! Gruß frokzee

Antwort 1 von oliverV

Hallo frokzee,

erstelle einmal deinen Bericht nach Namen sortiert, kopiere diesen Bericht und sortiere diesen nach Nr.
In deinem Formular sprichst du dann den gewünschten Bericht an.
z.B. im Formularkopf eine kleine Optionsgruppe erstellen und über einen Button anhand des Optionsgruppenwertes den entsprechenden Bericht öffnen.

Gruß
oliver


Antwort 2 von Phantom_Fies

Oder, du nimmst den selben Bericht, und änderst je nach Aufrufparameter (wie gesagt Optionsgruppe) in der Datenherkunft (Abfrage) nur die ORDER BY-Klausel.

Antwort 3 von frokzee

Ja, mit der ORDER-BY-Klausel würde ich das gerne realisieren. Für jeden Bericht eine eigene Abfrage zu erstellen wäre viel zu umständlich, da es insgesamt 21 Sortier-Möglichkeiten geben soll!

Problem an der Sache ist, dass der Bericht erst geöffnet werden muss, nachdem ich den ORDER-BY Wert setzen kann. Dies wiederum müsste man mit OnOpen programmieren können.

Könnte mir mal jemand einen Beispielcode schreiben??

Besten Dank

Antwort 4 von Phantom_Fies

...(*lufthol*)...Also, den SQL-String für den Bericht baust du dynamisch in deiner Report_Open zusammen. Dafür musst du, beispielsweise mittels globaler Variablen, ein Öffnungsargument setzen, damit du weißt, welche Sortierung erfolgen soll.
Die Basis-SQL-Abfrage schreibst du in eine String-Variable (ohne ORDER BY), mit einer Select Case überprüfst du dann das Öffnungsargument und fügst der SQL-Variable den jeweiligen Zusatz mit der ORDER BY-Klausel hinzu.
Dann musst du nur noch folgendes tun:


Report_Berichtname.RecordSource = SQL 

Fertig ist der dynamische Bericht. Hoffe, mich einigermaßen verständlich ausgedrückt zu haben.
Falls du mit dem SQL-String Probleme hast, hilft dir der Abfrage-Generator.

Antwort 5 von frokzee

Also mir ist das immer noch nicht ganz klar! Könntest du mir die Programmier-Vorgehensweise bitte nochmal etwas näher erläutern?? Bei mir scheitert es z.B. schon alleine daran, den Bericht bzw. die Methode Report_Open von dem Formular aus zu öffnen.

DoCmd.OpenReport wird ja jetzt nicht mehr gebraucht, oder?

Besten Dank

Gruß, frokzee

Antwort 6 von Phantom_Fies

Damit meinte ich eigentlich die Öffnen-Prozedur des Berichts. Den Bericht im Entwurfsmodus öffnen, Eigenschaften, beim Öffnen, Ereignisprozedur, Code-Generator. Dann kommst du in die VBA-Ansicht, wo steht:


Private Sub Report_Open

End Sub



Da definierst du dann drei String-Variablen für die SQL-Abfrage.

Im Abfrage-Generator bastelst du dann deine Abfrage, so wie du die Daten im Bericht brauchst, vorerst ohne Sortierung. Dann lässt du die die SQL-Syntax anzeigen, kopierst sie in den Code und schreibst sie in die Variable.
Damit hast du dann schon mal die Grunddaten.

Als nächstes fügst du im Generator deine gewünschte Sortierung hinzu. Dann siehst du ja, was im SQL-String hinzugefügt wird. Diesen ORDER BY-Teilstring kopierst du ebenfalls in den Code und schreibst ihn in die zweite Variable. Das sieht dann ungefähr so aus:


SQL1 = "SELECT xyz FROM abc WHERE blabla "
'Nachstehendes Leerzeichen nicht vergessen!

SQL2 = "ORDER BY XYZ" 

SQL = SQL1 & SQL2

'Dem Bericht als Datenquelle den SQL zuweisen:
Report_Berichtname.RecordSource = SQL 



Um das ganze dynamisch zu machen, legst du in dem Formular, das den Bericht aufruft, ein Argument fest, wie der Bericht sortiert werden soll. Dieses überprüfst du dann im obiger Sub mit einer Select Case und veränderst in den einzelnen Fällen nur den Wert von SQL2.
Der Aufruf vom Formular aus sollte so aussehen:


DoCmd.OpenReport "Berichtname", acViewPreview


Du brauchst also nicht die Report_Open aufzurufen, sondern nur den Bericht zu öffnen. Die Zuweisung der Daten erfolgt komplett im Öffnen-Ereignis.
Jetzt besser verstanden? :-)


Antwort 7 von frokzee

Besten Dank... Jetzt hat das sogar ein Medieninformatik-Student im sechsten Semester verstanden ;-)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: