Hallo.
Ich habe eine Tabelle mit Fahrzeugs Informationen.
Es soll dafür ein Bericht erstellt werden, der mir die Fahrzeuge ausgibt, für die eine Prüfung vorliegt. Ich habe in der Tabelle bereits alle anstehenden Prüfungstermine eingetragen:
- Nächste TÜV Prüfung
- Nächste Sonderprüfung
- Nächste UVV
- Nächste EG Kontrollgerät
Ich brauche einen Bericht, wo der Anwender selbst das Datum für alle Prüfungen abfragt und die entsprechenden Fahrzeuge bekommt.
Ich habe einen Bericht erstellt der 4 Unterberichte enthält. Jeder Unterbericht basiert auf eine Parameterabfrage.
Mein Problem ist, wenn ich den Bericht öffnen will, werde ich ca. 10x nach den Parameter gefragt. Dann, wenn es endlich geöffnet ist, kann ich den nicht ausdrucken. (werde wieder nach den gleichen Parameter gefragt) und letztendlich wird ein leeres Bericht ausgedruckt.
Gibt es dafür eine bessere Lösung? Gibt es eine Abfrage, die mir alle Felder nur 1x abfragt?
Ich bin ACCESS-Anfänger, deshalb bitte um eine genaue Beschreibung
Vielen Dank
Hallo,
wenn die Unterberichte nicht mit dem Hauptbericht verknüpft sind und das so bleiben soll, wird nichts anderes übrig bleiben, als die Abfragen der (Unter-)Berichte mittels VBA mit den entspr. Kriterien (Datumswerten) zu versorgen. Dabei sind für die Datumswerte enstpr. ungebundene Textfelder in einem Formular zu verwenden.
Wirf zunächst die Parameter aus den nicht sortierenden und nicht gruppierenden Abfragen heraus.
Als Klick-Ereignisprozedur für eine Schaltfläche ("btnDrucken") wird in etwa solches geschrieben:
("...NTP" z. B. steht für "Nächste TÜV Prüfung")
Sub btnDrucken_Click()
Dim db as Database
set db=CurrentDB
db.Querydefs("abf_NTP").SQL = Replace (db.Querydefs("abf_NTP").SQL, " Where NTP_Datum= " & Format (nz(Me!txtNTP,Date), "\#yyyy-mm-dd\#"))
db.Querydefs("abf_NSP").SQL = Replace (db.Querydefs("abf_NSP").SQL, ";", " Where NSP_Datum= " & Format (nz(Me!txtNSP,Date), "\#yyyy-mm-dd\#"))
db.Querydefs("abf_NUVV").SQL = Replace (db.Querydefs("abf_NUVV").SQL, ";", " Where NUVV_Datum= " & Format (nz(Me!txtNUVV,Date), "\#yyyy-mm-dd\#"))
db.Querydefs("abf_NEGK").SQL = Replace (db.Querydefs("abf_NEGK").SQL, ";", " Where NUVV_Datum= " & Format (nz(Me!txtNUVV,Date), "\#yyyy-mm-dd\#"))
Docmd.Openreport "rpt_NächstePrüfungen",acpreview
set db = Nothing
End Sub
Danke für die schnelle Antwort. Ich werde so machen und dann schreibe nachher ob es geklappt hat :)
Hallo,
alternativ könnte man den Parameter auch per Funktionsaufruf in die Abfragen bringen.
Beim Öffnen des Berichts kann dieser (bspw. per Inputbox) einmal abgefragt und in einer globalen Variablen gespeichert werden.
(s.a. Donkarls FAQ 3.15 (http://www.donkarl.com/faq/FAQ3Tabfragen.htm#3.15))
Hallo
ich danke Euch für Tipps, aber ich komme irgendwie nicht weiter. Wie gesagt, bin ich ein Anfänger.
Ich habe meine Parameter aus den Abfragen entfernt, wollte jetzt in anderem Formular die ungebundene Textfelder erstellen. Was soll ich damit weiter machen?
Bitte um Verständnis
Zu MaggieMay (bitte um etwas genauere Beschreibung)
Viele Grüße
Hallo,
zu meinem Vorschlag:
wie gesagt: im Formular eine Schaltfläche ("btnDrucken") einbauen und deren Klick-Ereignisprozedur wie vorher angegeben erstellen.
Entschuldigung, jetzt ist angekommen.
Danke
Ich habe den code umgesetzt, aber beim Anklicken btnDrucken_Click() kommt die Fehlermeldung: Argument ist nicht optional (markiert ist Replace).
Hier noch mal mein code:
Private Sub btnDrucken_Click()
Dim db As Database
Set db = CurrentDb
db.QueryDefs("Abf_Kfz-Daten_Faelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_Faelligkeitsdatum_Monat").SQL, " Where TUEV_Faelligkeitsdatum= " & Format(Nz(Me!tuevdatum, Date), "\#yyyy-mm\#"))
db.QueryDefs("Abf_Kfz-Daten_UVVFaelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_UVVFaelligkeitsdatum_Monat").SQL, ";", " Where UVV_Datum= " & Format(Nz(Me!uvvdatum, Date), "\#yyyy-mm\#"))
db.QueryDefs("Abf_Kfz-Daten_Sonderpruefungsfaelligkeit_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_Sonderpruefungsfaelligkeit_Monat").SQL, ";", " Where Sonderpruefungsdatum= " & Format(Nz(Me!spdatum, Date), "\#yyyy-mm\#"))
db.QueryDefs("Abf_Kfz-Daten_EG_Faelligkeitsdatum_Monat").SQL = Replace(db.QueryDefs("Abf_Kfz-Daten_EG_Faelligkeitsdatum_Monat").SQL, ";", " Where EG-Kontrollgeraetsdatum= " & Format(Nz(Me!egkontrollgeraetdatum, Date), "\#yyyy-mm\#"))
DoCmd.OpenReport "Ber_Faelligkeitsdatum_Monat", acPreview
Set db = Nothing
End Sub
Zitat von: Anneka am Dezember 01, 2014, 12:24:18Zu MaggieMay (bitte um etwas genauere Beschreibung)
1. Ereignisprozedur zum Ereignis "Beim Öffnen" des Berichts:
Private Sub Report_Open (Cancel As Integer)
gbl_rptDatum = Null
End Sub
2. In einem allgemeinen Modul:
Dim gbl_rptDatum As Variant ' Deklaration vor und außerhalb der Prozeduren
Public Function get_rptDatum() As String
Dim varDat
If IsNull(gbl_rptDatum) Then
varDat = InputBox("Bitte Datum eingeben:")
If IsDate(varDat) Then
gbl_rptDatum = varDat
Else
gbl_rptDatum = Date ' gültiges Ersatzdatum einstellen
End If
End If
' Datum für Einsatz in Abfrage aufbereiten
get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")
End Function
3. In der Abfrage:
Select * From tabelle Where tabDatum = get_rptDatum()
Korrektur:
Normalerweise schreibe ich das folgendermaßen:
get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")
weiß auch nicht wie mir das passieren konnte.
Nachtrag:
Die Sache mit dem Replace kann so nicht funktionieren (s. Beispiel-1), außerdem funktioniert das nur ein einziges Mal.
Davon abgesehen, sollte der Verweis auf das Formularfeld eigentlich ebensogut einsetzbar sein wie der Funktionsaufruf und nicht zu Parameterabfragen führen. Hier liegt also ein ganz anderer Fehler vor.
hmmm.....
Ich versuche noch mit der Lösung 2. Es wird aber dauern. Danke MaggieMay
Hallo,
"außerdem funktioniert das nur ein einziges Mal."
ja , das stimmt. Als Abhilfe kann man für jeden Bericht eine eigene Abfrage erzeugen und dieser einen Select-SQL-String mit Where-Condition zuweisen.
Zudem entspricht die Datumsformatierung nicht dem USA-oder ISO-Format.
Für jeden Bericht (irgend)eine separate Abfrage erstellen. ("abf_rptTUEV")
Bei jeder SQL-Zuweisung entspr. angepasst:
db.QueryDefs("abf_rptTUEV").SQL = "Select * from Abf_Kfz-Daten_Faelligkeitsdatum_Monat Where TUEV_Faelligkeitsdatum= " & Format(Nz(Me!tuevdatum, Date), "\#yyyy-mm-dd\#"))
"Hier liegt also ein ganz anderer Fehler vor."
get_rptDatum = Format(gbl_rptDatum, "\#mm/dd/yyyy\#")
Ich würde an der Stelle eine dritte und ganz einfache Variante anführen wollen: Eine Parametertabelle.
Du legst eine Tabelle mit einem Feld pro Parameter (mit passendem Datentyp) an. Diese Tabelle darf nur genau einen Datensatz enthalten.
Mit der Auswahl der Parameter im Formular werden diese in diese Parametertabelle geschrieben, bei Neuauswahl entsprechend überschrieben.
Die Parametertabelle ist ihrerseits fest in den beteiligten Abfragen integriert, etwa (orientiert an Franz' letzter Abfrage):
SELECT A.*
FROM [Abf_Kfz-Daten_Faelligkeitsdatum_Monat] AS A,
Parametertabelle AS P
WHERE A.TUEV_Faelligkeitsdatum = P.Parameterfeld
Sprich: Nach dem Schreiben der Parameter in die Tabelle kann unmittelbar der Bericht geöffnet werden.
Hallo ebs17
DANKE! Es funktioniert und es war für mich die einfachste Variante.
Vielen DANK!
Zitat von: DF6GL am Dezember 01, 2014, 17:00:28get_rptDatum = Format(gbl_rptDatum, "\#mm/dd/yyyy\#")
Normalerweise schreibe ich das folgendermaßen:
get_rptDatum = Format(gbl_rptDatum, "\#mm\/dd\/yyyy\#")
weiß auch nicht wie mir die falsche Schreibweise passieren konnte.
Hallo,
Zitatweiß auch nicht wie mir die falsche Schreibweise passieren konnte
mach Dir da mal keine Sorgen. Schlimmer wäre es, wenn es Dir nie passieren würde... ;) :D :)
@Franz: :-*
:D