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:
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?!
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