Report dynamisch anpassen

Hallo Experten,

unter Acc97 habe ich eine DB erstellt, in der mehrere Personen gleichzeitig arbeiten können. In der DB gibt es eine Berichtsfunktion. Abhängig vom ausgewählten Kriterium wird die SQL-Abfrage des Berichts dynamisch generiert, bevor der Bericht dann schließlich geöffnet wird:

DoCmd.OpenReport "MeinReport", acViewDesign
Reports![MeinReport].RecordSource = "SELECT \* FROM MeineTabelle WHERE Feld='" & Kriterium & "';"
DoCmd.Close acReport, "MeinReport", acSaveYes
DoCmd.OpenReport "MeinReport", acViewPreview

Es ist sicherlich keine elegante Methode, aber sie hat bisher (!) immer funktioniert. Seit kurzem verwenden alle Anwender der DB jedoch Acc2002 und seitdem funktioniert das Ganze nur noch, wenn der Anwender Exklusivzugriff auf die DB hat. Klar, der Bericht lässt sich sonst halt nicht speichern…

Jetzt würde ich gerne die Berichtsfunktion so anpassen, daß sie auch bei Nicht-Exklusivzugriff verwendbar ist, finde allerdings keinen passenden Ansatz. Wer-weiss-was?!

Danke und Gruß
(Woly)

Hallo Woly!

Jetzt würde ich gerne die Berichtsfunktion so anpassen, daß
sie auch bei Nicht-Exklusivzugriff verwendbar ist, finde
allerdings keinen passenden Ansatz. Wer-weiss-was?!

Erst mal wird’s spannend, wenn wirklich die Jungs parallel auf der gleichen Datenbank arbeiten. Das solltest Du nach Möglichkeit vermeiden. Nicht nur der Performance zuliebe, auch die ständige mögliche Meldung „Datensatz wurde von xy geändert, eigene Daten speichern/verwerfen/ignorieren“ oder so nervt.

Unabhängig davon kannst Du folgendes probieren: Du greifst ja immer auf die gleiche Tabelle zu. Du gibst Deinem Bericht also als Datenquelle die komplette Tabelle (oder eben den SQL-String dazu). Dies lässt Du unverändert. Dein Kriterium (welches Du in der WHERE-Bedingung beim Modifizieren des Berichts setzt) setzt Du in eine globale Variable.

Ich vermute jetzt mal, Du öffnest den Bericht durch irgendeine Schaltfläche. In dieser steht Dein Code zur Berichtsmodifikation drin. Statt dessen definierst Du eine globale Variable, hier nenne ich sie gstrMeinBerichtsfilter. Dann also

Sub Button1\_Click()
 ...
 gstrMeinBerichtsfilter = "Feld='" & Kriterium & "'"
 DoCmd.OpenReport "MeinReport", acViewPreview
End Sub

Dann ins Report_open:

Private Sub Report\_Open(Cancel As Integer)
 Me.filter = gstrMeinBerichtsfilter
 Me.FilterOn = True
End Sub

Das sollte es tun.

Gruß, Manfred

Hallo Manfred,

1-A-Hilfe, genauso hab ich’s gemacht und genauso hat’s funktioniert!

Besten Dank!

Gruß
(Woly)