Hallo,
ich habe eine Parameterabfrage, die Anfangsdatum und Enddatum eines Zeitraumes erfragt. Nun möchte ich die beiden Daten, die der User eingegeben hat, in meinem Bericht anzeigen.
Wie bekomme ich die Werte aus dem Abfragefeld heraus und in meinen Bericht?
Vielen Dank im Voraus
Beate1953
Hallo,
schreib die Parameternamen zusätzlich in leere Abfragespalten. Diese Spalten können dann im Bericht mit entspr. Textfelder angezeigt werden .
Hallo,
zeige mal die Abfrage (SQL Text).
So was sollte man gleich machen und nicht erst auf Rückfrage.
Hallo,
SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung
FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.GerätegruppeID = Posten.Gerätegruppe) LEFT JOIN (Abteilungen RIGHT JOIN [E-Check] ON Abteilungen.ID = [E-Check].Ort) ON Posten.Barcode = [E-Check].Barcode
WHERE ((([E-Check].Datum) Between [Anfangsdatum:] And [Enddatum:]));
Wie Bekomme ich das in meinen Bericht?
Den Tipp, die Parameternamen in leere Spalten zu Schreiben, habe ich nicht verstanden. Was meinst Du mit Parameternamen?
Vielen Dank für Eure Tipps, ich hoffe Ihr könnt mir weiterhelfen.
Viele Grüße
Beate1953
Hallo,
das sind die Parameternamen:
Anfangsdatum:
Enddatum:
Die siehst Du auch im aufpoppenden Parameter-Abfragefenster.
Diese Namen (mit Eckklammern) schreibst Du in leere Abfragespalten und verpasst denen einen Aliasnamen (so wie gesagt). Das ergibt eine solche SQL:
SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung, [Anfangsdatum:] As AnfDat, [Enddatum:] As EndDat
FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.GerätegruppeID = Posten.Gerätegruppe) LEFT JOIN (Abteilungen RIGHT JOIN [E-Check] ON Abteilungen.ID = [E-Check].Ort) ON Posten.Barcode = [E-Check].Barcode
WHERE ((([E-Check].Datum) Between [Anfangsdatum:] And [Enddatum:]));
Die Spalten bekommst Du in den Bericht wie jede andere Abfragespalte auch... (auch wie gesagt)
(Muss ich das auch erklären? --> Alias-Namen ("Anfdat" und "EndDat")aus der Feldliste an eine geeignete Stelle im Bericht ziehen.)
btw: Solche Parameter-Abfragen sind eher unzweckmäßig denn vernüftig brauchbar, gelinde gesagt..
Hallo,
das mit der Abfrage klappt jetzt (vielen Dank), aber sobald ich diese beiden Felder im Berichtskopf habe, haut es mir die ganze Sortierung durcheinander, die ich per OrderBy im Bericht einstelle. Dasselbe passiert auch, wenn ich im Berichtskopf die Anzahl ausrechnen möchte (=Anzahl(*)).
Was ist da jetzt wieder falsch?
In einer anderen Datenbank hat das prima funktioniert.
Viele Grüße
Beate1953
Hallo,
WO genau stellst die Sortierung ein? Im Bericht (Fenster "Gruppieren/Sortieren") oder in der Abfrage (OrderBy).
Irgendwie musst Du Deine Situation genauer darlegen...
"Sortieren und Gruppieren" ist bei Berichten NUR im o. g. Gruppierungsfenster einzustellen. Irgendwelche Sortierungen oder auch Gruppierungen in der Berichts-ABFRAGE werden ignoriert.
Hallo,
also die Situation ist Folgende: Ich habe ein Formular mit zwei Optionsgruppen, mit denen der User die erste und zweite Sortierebene wählen kann. Die gewählten Werte werden als globale Variablen in Sortwert1 und Sortwert2 gespeichert. Beim Öffnen des Berichtes wird aus den beiden Sortwerten ein SortwertGesamt gebildet (z.B. SortwertGesamt = 2, 4) und per OrderBy = SortwertGesamt und OrderByOn = True angewendet. Damit ist der Bericht richtig sortiert und untersortiert. Klappt soweit prima.
Nur das mit Anfdat, Enddat, Anzahl und DomAnzahl klappt nicht.
Viele Grüße
Beate1953
Hallo,
"wird aus den beiden Sortwerten ein SortwertGesamt gebildet (z.B. SortwertGesamt = 2, 4) und per OrderBy = SortwertGesamt und ...."
??
Ich sagte bereits, dass Orderby nicht zu empfehlen ist.
Was passiert, wenn die Felder z. B. im Berichtsfuß platziert werden?
Ansonsten: Lad mal die DB (datenreduziert und gezippt) hier hoch.
Hallo,
wenn die Felder im Berichtsfuß platziert sind, passiert genau dasselbe.
Wie lade ich eine Datenbank hier hoch??? Vielleicht hast Du einen Link dazu?
Du sagtest, dass die Sortierung im Bericht per "Gruppieren und Sortieren" gesetzt werden muss -- aber da kann ich doch nur eine feste Sortierung eingeben. Wie kriege ich dann das mit der Wahlfreiheit des Users hin? Muss ich da vielleicht für jede mögliche Kombination von möglichen Sortierkriterien je einen Bericht mit der entsprechenden festen Sortierung machen? Oder wie kann ich sonst die vom User gewünschte Kombination der Sortierkriterien an den Bericht übergeben, wenn nicht mit OrderBy?
Viele Grüße
Beate1953
Hi Beate,
Zitat von: Beate1953 am Oktober 11, 2013, 18:41:20
Muss ich da vielleicht für jede mögliche Kombination von möglichen Sortierkriterien je einen Bericht mit der entsprechenden festen Sortierung machen?
nein!
Zitat
Oder wie kann ich sonst die vom User gewünschte Kombination der Sortierkriterien an den Bericht übergeben, wenn nicht mit OrderBy?
siehe: http://www.access-o-mania.de/forum/index.php?topic=13940.0
Antwort #1
Harald
Hallo,
habe das mit dem Grouplevel übers Wochenende an einem kleinen Testbericht ausprobiert, da hat alles wunderbar geklappt, auch Anfdat, Enddat, Anzahl und DomAnzahl. Am Montag kann ich es dann in der Arbeit an der richtigen Datenbank ausprobieren. Werde mich dann wieder melden, ob es da auch klappt.
Vorerst jedenfalls schon mal vielen Dank für die Hilfe.
Viele Grüße
Beate1953
Hallo nochmal,
habe jetzt in der richtigen DB alles auf GroupLevel umgestellt. Das Sortieren klappt. Anfdat, Enddat und =Anzahl(*) funktionieren auch.
Aber bei DomAnzahl kommt immer die Meldung #Fehler.
Ich verwende folgende Formel für DomAnzahl:
=DomAnzahl("*";"QryAlleGeraeteImZeitraumGemessen";"[E-Check]='Ja' OR [E-Check]='Ja*'")
Ist da vielleicht etwas falsch? Den Abfragenamen habe ich überprüft, der ist richtig. Sicherheitshalber habe ich alle Objekte in eine neue, leere DB importiert und die Abfrage ganz neu erstellt -- hat auch keine Besserung gebracht. Auch die Anordnung des DomAnzahlfeldes im Berichtsfuß hat nichts gebracht.
Was mache ich falsch?
Viele Grüße
Beate1953
Hallo,
was soll dieses "Kriterium" bedeuten:
[E-Check]='Ja' OR [E-Check]='Ja*'
Welchen Datentyp hat "E-Check" in der Tabelle?
Hi,
willst Du zählen in der Art: Ähnlich wie Ja*?
Dann probier mal:
=DomAnzahl("*";"QryAlleGeraeteImZeitraumGemessen";"[E-Check] like 'Ja*'")
Ich setze voraus, dass die Namen des zu prüfendes Feldes in der Abfrage auch "E-Check" lautet.
Harald
Hallo,
Das Feld heißt in Abfrage und Bericht E-Check und ist vom Typ String; die möglichen per Kombinationsfeld auswählbaren Einträge heißen: Ja, Ja*, Nein und Nein*.
Das mit dem LIKE werde ich ausprobieren.
Ich habe inzwischen alle möglichen Änderungen an meinen Objekten ausprobiert und habe herausgefunden, dass DomAnzahl funktioniert, sobald ich in der Abfrage im Feld Datum das Kriterium ZWISCHEN [Anfangsdatum:] UND [Enddatum:] lösche. Da dieses Kriterium in allen meinen neuen Abfragen unverzichtbar ist, bräuchte ich eine Möglichkeit, wie ich dieses Filterkriterium auf andere Weise zur Anwendung bringe - vielleicht im Bericht?
Viele Grüße
Beate1953
Hallo,
Zitatbtw: Solche Parameter-Abfragen sind eher unzweckmäßig denn vernünftig brauchbar, gelinde gesagt..
:'(
ZitatDa dieses Kriterium in allen meinen neuen Abfragen unverzichtbar ist, bräuchte ich eine Möglichkeit, wie ich dieses Filterkriterium auf andere Weise zur Anwendung bringe
z. B. mittels dynamischen (per VBA) zusammengesetzten SQL-String...
oder als Übergabekriterium in der Openreport-Methode in einer Prozedur.
Hallo,
also ich habe die Recordsource jetzt per VBA zusammengesetzt:
Private Sub Report_Open(Cancel As Integer)
........
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "
SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Anfdat & " AND " & Enddat & "));"
MsgBox ("Abfrage: " & SQLstr)
Me.RecordSource = SQLstr
MsgBox ("SQLstr Übernommen")
End Sub
Access zeigt bei der MsgBox("Abfrage: " & SQLstr) die korrekte Syntax an (mit 2x Klammer zu ganz am Ende).
Access läuft problemlos bis einschließlich der Anzeige "SQLstr Übernommen". Danach kommt eine Fehlermeldung:
Syntaxfehler in Zahl in Abfrageausdruck '((([E-Check].Datum) Between 1.1.12 AND 31.12.12)'
Hier irritiert mich das "Zahl" sowie der Umstand, daß am Schluß nur 1x Klammer zu steht. Ich vermute auch, dass vielleicht mit der Übergabe des Datums etwas nicht stimmt.
Anfdat und Enddat sind vom Typ variant und übernehmen das Datum aus einem normalen Textfeld per Anfdat = Me.Anfangsdatum.Value
SQLstr ist vom Datentyp String.
Ich hoffe, Ihr könnt mir wieder einmal helfen.
Vielen Dank im Voraus
Beate1953
Hallo,
so:
SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(nz(Anfdat,Date),"\#yyyy-mm-dd\#") & " AND " & Format(nz(Enddat,Date),"\#yyyy-mm-dd\#") & "));"
Hallo,
vielen, vielen Dank für diesen String (auf den ich selbst nie und nimmer gekommen wäre), jetzt klappt die Datumsfilterung und die Sortierungen. Allerdings zeigt das Feld mit dem DomAnzahl immer noch #Fehler an.
Ich bin drauf und dran, dieses Feld ganz zu löschen.
Vorher noch ein letzter Versuch: Kennt jemand eine andere Möglichkeit, im Berichtskopf die Anzahl der Datensätze anzuzeigen, die innerhalb eines definierten Zeitraumes gemessen wurden und im Feld E-Check (Text) ein Ja oder Ja* eingetragen haben (Außer mit DomAnzahl!).
Viele Grüße
Beate1953
Hallo,
willst Du die Anzahl Datensätze anzeigen, die der Bericht aktuell anzeigt?
dann sollte es doch so gehen im Steuerelementinhalt eines Textfeldes:
=Anzahl(*)
Bei Dlookup muss halt das entspr. Kriterium eingesetzt werden:
Nachfrage:
Was hat es eigentlich mit diesem:
ZitatDas Feld heißt in Abfrage und Bericht E-Check und ist vom Typ String; die möglichen per Kombinationsfeld auswählbaren Einträge heißen: Ja, Ja*, Nein und Nein*
auf sich?
Ist das Kombifeld ein Nachschlagefeld in der Tabelle und wie sieht der Herkunftstyp da aus?
Sind
Ja, Ja*, Nein und Nein*Einträge im Feld "[E-Check]" ?
btw: Verzichte DRINGEND und ÜBERALL auf Sonder- und Leerzeichen in Objektnamen! (Hier das Minus-Zeichen in "E-Check")
Hallo,
das Kombinationsfeld habe ich per Assistent erstellt und die Option angeklickt "Ich will eigene Werte eingeben", dann habe ich als mögliche Werte Ja, Ja*, Nein und Nein* eingegeben. Und einen dieser vier Einträge enthält jeweils das Feld "E-Check".
Mit DLookup habe ich noch keine Erfahrungen; aber nach Nachlesen habe ich den Eindruck, dass DLookup ein Feld des ersten Datensatzes zurückgibt, der dem Kriterium entspricht??? Ich möchte aber die Anzahl der DS die dem Kriterium entsprechen.
Ich habe einmal als Datenquelle für das Textfeld folgendes eingegeben:
=DLookup("[E-Check]", "GesBerichtMitAuftraggeberNeu", "[E-Check]='Ja'")
als Antwort bekam ich eine ellenlange Fehlermeldung und mein Eintrag wurde komplett gelöscht.
Übrigens: GesBerichtMitAuftraggeberNeu ist eine Abfrage (ich weiß, der Name ist blöd, aber aus den Anfängen noch übrig).
Ich bitte um weitere Hilfe
Vielen Dank im Voraus
Beate1953
Hi,
Anzahl =DCount("[E-Check]", "GesBerichtMitAuftraggeberNeu", "[E-Check]='Ja'")
Harald
Hallo,
wobei im STEUERELEMENTINHALT eines Textfeldes dieses stehen sollte:
=DCount("[E-Check]";"GesBerichtMitAuftraggeberNeu";"[E-Check]='Ja'")
und die Frage nach diesen seltsamen Einträgen noch nicht beantwortet ist....
(Eine Variable mit Namen "Anzahl" ist auch mit Vorsicht zu geniessen ;)
Hi Franz,
Zitat von: DF6GL am Oktober 15, 2013, 22:06:30
(Eine Variable mit Namen "Anzahl" ist auch mit Vorsicht zu geniessen ;)
Sorry für die unglückliche Bezeichnung: Ich hatte den Begriff nicht als Variable gebraucht, sondern nur, um auf das Ergebnis (= Anzahl) hinzuweisen (weiter oben stand ja, dass es im Textfeld eingetragen ist).
Harald
Hallo,
leider wandelt Access DCount sofort in DomAnzahl um und ich habe wieder das Problem mit #Fehler (siehe oben).
Ich habe in der Zwischenzeit gelesen, dass man die Domänenfunktionen auch durch Gruppierungsabfragen ersetzen kann (Microsoft Access-Handbuch Seite 373/374).
Ich habe also folgende Gruppierungsabfrage erstellt:
SELECT QRYAlleGeraeteImZeitraumGemessen.Expr1004, Count(QRYAlleGeraeteImZeitraumGemessen.[E-Check]) AS [AnzahlvonE-Check]
FROM QRYAlleGeraeteImZeitraumGemessen
GROUP BY QRYAlleGeraeteImZeitraumGemessen.Expr1004;
Expr1004 ist ebenfalls das Feld E-Check.
Damit erreiche ich einen Teilerfolg, jetzt zeigt er mir folgendes an:
Expr1004 Anzahl von Expr1004
Ja 374
Ja* 27
Nein 12
Nein* 15
Nun brauche ich noch die Summe der Anzahlen von Ja und Ja* (also 401) und das dann in den Bericht.
Vielen Dank im Voraus für Eure Hilfe
Beate1953
I
Hallo,
die Umwandlung ins Deutsche braucht nicht leid zu tun.. das ist normal bei deutscher Access-Version.
Allerdings kochst Du jetzt zusammengerührten Eintopf...
-- Welchen DATENTYP hat E-Check in der Tabelle?
-- Wird für dieses Feld ein Nachschlagefeld verwendet? Wenn Ja, wie heißt die Datensatzherkunft dieses Nachschlagefeldes in der Tabelle?
-- Poste den SQL-String der Abfrage "QRYAlleGeraeteImZeitraumGemessen".
=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'J*'")
=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'N*'")
sollte eigentlich für "JA", respektive "Nein" funktionieren... (unter der Annahme, dass E-CHECK den Datentyp TEXT in der Tabelle hat).
Weiterhin funktioniert
=Anzahl(*)
im Steuerelement eines Berichts-Textfeldes, um die von der Berichtsabfrage gelieferte Datensatz-Anzahl anzuzeigen.
Es ist immer noch unklar und damit die Frage unbeantwortet, was die Sternchen im E-Check-Feld bedeuten sollen....
Hallo,
das Feld E-Check hat den Datentyp Text. Es ist in der Tabelle nicht als Nachschlagefeld angelegt. Erst im Formular, in dem Die Werte eingegeben werden, sind für das Kombifeld per Formular-Assistent (Option: Ich will die Werte selbst eingeben) die Werte Ja, Ja*, Nein und Nein* eingegeben worden.
Die Sternchen kennzeichnen, dass bei diesen DS im Feld Bemerkung noch eine Bemerkung existiert. Ich weiß, es war unglücklich, dafür ausgerechnet ein Sternchen zu verwenden.
Der SQL-Code der Abfrage QRYAlleGeraeteImZeitraumGemessen lautet:
SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [Anfangsdatum:] AS Anfdat, [Enddatum:] AS Enddat
FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) ON Posten.[Barcode] = [E-Check].[Barcode]
WHERE ((([E-Check].Datum) Between [Anfangsdatum:] And [Enddatum:]));
Das mit dem DCount funktioniert bei mir einfach nicht - immer#Fehler.
Kann vielleicht mal jemand von Euch eine kleine Datenbank anlegen und prüfen, ob DCount bei Ihm funktioniert oder nicht? Wäre sehr nett!!!
Tabelle Posten: Feld Barcode (Long; Primärschlüssel),
Feld Bezeichnung
Hallo,
das kann auch nicht mit diesen unglückseligen Parametern funktionieren!
Wie früher schon erzählt....
Weiterhin: wer solche Feldnamen verwendet:
Bezeichnung (Typ, genaue Bezeichnung)
gehört mit dem nassen Lappen erschlagen... ;) ;)
Die Parameter gehören aus der Abfrage entfernt (auch schon gesagt) und im Kriterium der DCount-Funktion eingebaut werden.
=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'J*' And Datum Between " & Format([Anfdat];"\#yyyy-mm-dd\#") & " AND " & Format([Enddat];"\#yyyy-mm-dd\#") )
Wobei "AnfDat" und "EndDat" Textfelder im Bericht sein müssen, die die Datumsangaben enthalten.
Vermutlich ist aber ein ganz anderer Lösungsweg (bei Verwendung eines Berichtes) sinnvoll:
Bericht erstellen auf Basis einer Abfrage OHNE Kriterien und OHNE Sortierungen/Gruppierungen.
Im Bericht die Gruppierungen und Sortierungen definieren.
Im Bericht Summen oder Zählungen durch Nutzen der Laufenden Summe-Eigenschaften berechnen.
Hallo,
das mit dem DCount klappt immer noch nicht, obwohl alle Kriterien aus der Abfrage entfernt sind.
Ich habe jetzt aber wieder ein Problem mit dem SQLstr für die RecordSource. Ich verwende folgenden Select-Befehl:
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat, Date], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat, Date], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"
Die Teile mit der WHERE-Klausel funktionieren alle nicht, es kommt immer die Fehlermeldung "Laufzeitfehler '2427' Sie haben einen Ausdruck ohne Wert eingegeben". Ich übergebe die Datumswerte aus dem Formular aber vor dem Zusammenbau des SQLstr. Die Strings wurden zusammengebaut aus den Antworten vom 15.10. 10:02:04 und 16.10. 16:11:06
Das Erstaunlichste ist, dass der SQLstr mit WHERE-Klausel schon mal geklappt hat. Bei der vielen Herumprobiererei muß etwas kaputt gegangen sein.
Könnt Ihr mir nochmal die korrekte Klausel senden?
Vielen Dank im Voraus
Beate1953
Hallo,
ist die Bezeichnung von [E-Check].Datum korrekt für die Abfrage des Datumsbereichs?
Weiter oben war [E-Check] ein Feld, das u.a. ein "Ja" enthielt.
Oder gibt es ein anderes Feld, das das Datum enthält?
Harald
Hallo,
Mit dem [E-Check].Datum im SQLstr ist das Feld Datum aus der Tabelle E-Check gemeint.
Viele Grüße
Beate1953
Hi,
die Namensgebung "Datum" ist suboptimal.
Siehe auch: http://office.microsoft.com/de-de/access-help/reservierte-worter-und-symbole-in-access-2007-HA010030643.aspx
Datum bzw. date sind reservierte Begriffe.
Harald
Hallo,
ich möchte nochmal an meine Frage in Antwort #29 erinnern. Ich brauche dringend den korrekten String für die Übergabe von Anfdat und Enddat an SQLstr.
Hier nochmal der Text:
Hallo,
das mit dem DCount klappt immer noch nicht, obwohl alle Kriterien aus der Abfrage entfernt sind.
Ich habe jetzt aber wieder ein Problem mit dem SQLstr für die RecordSource. Ich verwende folgenden Select-Befehl:
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "
Bis hierher ist alles O.K.
Aber bei der folgenden WHERE-Klausel ist der Wurm drin. Ich habe verschiedene Varianten ausprobiert, die im Folgenden aufgelistet sind.
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat, Date], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat, Date], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"
Die Teile mit der WHERE-Klausel funktionieren alle nicht, es kommt immer die Fehlermeldung "Laufzeitfehler '2427' Sie haben einen Ausdruck ohne Wert eingegeben". Ich übergebe die Datumswerte aus dem Formular aber vor dem Zusammenbau des SQLstr. Die Strings wurden zusammengebaut aus den Antworten vom 15.10. 10:02:04 und 16.10. 16:11:06
Das Erstaunlichste ist, dass der SQLstr mit WHERE-Klausel schon mal geklappt hat. Bei der vielen Herumprobiererei muß etwas kaputt gegangen sein.
Könnt Ihr mir nochmal die korrekte Klausel senden?
Vielen Dank im Voraus
Beate1953
Hallo.
m. E. muss der 3. String funktionieren, wenn in "[E-Check].Datum" , "Anfdat" und "EndDat" jeweils ein gültiges Datum drinsteht...
Hier:
.... ON Abteilungen.[ID] = [E-Check].[Ort]) "
hab ich aber Zweifel... ist "Ort" und "ID" logisch identisch?
bzw. an der gesamten "Verjoinung" ....
Wie an anderer Stelle gesagt, lad mal diese Db hier hoch, dann bräuchte es vielleicht keine solchen fragmentarischen Untersuchungen.
Hallo,
ich glaube, du hast den Fehler gefunden:
...wenn in "[E-Check].Datum" , "Anfdat" und "EndDat" jeweils ein gültiges Datum drinsteht...
Das Feld Datum ist vom Datentyp Datum/Uhrzeit, aber Anfdat und Enddat sind keine Datumswerte!
Im Formular FRMZeitraum werden die Daten vom User in die beiden Textfelder ADatum und EDatum eigetragen und dann mit
Me.Anfdat.ControlSource = Forms!FRMZeitraum.ADatum.Value
in die Textfelder Anfdat und Enddat übernommen (bzw. leider nicht - siehe unten). Danach müssten sie immer noch den Datentyp Text haben. Wie wandele ich sie in ein Datum um?
Vielleicht hängt es damit auch zusammen, dass beim Öffnen des Berichtes die Daten aus den Textfeldern ADatum und EDatum des Formulares nicht in den Feldern Anfdat und Enddat des Berichtes erscheinen. Statt dessen erscheint ein kleines Dialogfeld:
Parameter eingeben
1.1.12
leeres Feld
und erst wenn ich hier nochmal 1.1.12 eingebe erscheint dieses Datum im Textfeld Anfdat des Berichtes.
Was muss ich machen, dass das Datumswerte werden???
Viele Grüße
Beate1953
Hallo,
ziemlich verworren, das Ganze..
Hat der Bericht eine Abfrage oder SQL-String in der Datenherkunft? Wie heißt die?
In welcher Ereignisprozedur wird der vorher genannte SQL-String zusammengebaut und der Recordsource zugewiesen?(bitte Proz. komplett posten).
In welcher Er.-Proz. werden den Feldern die Formular-Daten zugewiesen? (bitte auch komplett posten)
Wie und von wo aus wird der Bericht geöffnet? (auch Prozedur posten)
Hallo,
1.) Der Bericht hat einen SQL-String namens SQLstr in der Datenherkunft.
2.+3.) Der SQLstr wird in Report_Open zusammengebaut und der RecordSource zugewiesen, dort werden auch den Feldern die Formulardaten zugewiesen:
Private Sub Report_Open(Cancel As Integer)
MsgBox ("Sortwert1= " & Sortwert1)
MsgBox ("Sortwert2= " & Sortwert2)
Me.KopfBezTyp.Visible = False ' hiermit werden die Gruppenköpfe ein-/ausgeblendet
Me.KopfBez.Visible = False
Me.KopfOrt.Visible = False
Me.KopfECheck.Visible = False
Me.KopfDatum.Visible = False
Me.Anfdat.ControlSource = Forms!FRMZeitraum.ADatum.Value 'hier werden den Feldern die
MsgBox ("Anfdat= " & Anfdat.ControlSource) 'Formulardaten zugewiesen
Me.Enddat.ControlSource = Forms!FRMZeitraum.EDatum.Value
MsgBox ("Enddat= " & Enddat.ControlSource)
Select Case Sortwert1
Case 1
Me.GroupLevel(0).ControlSource = "Barcode"
Case 2
Me.GroupLevel(0).ControlSource = "Bezeichnung (Typ, genaue Bezeichnung)"
Me.KopfBezTyp.Visible = True
Case 3
Me.GroupLevel(0).ControlSource = "Bezeichnung"
Me.KopfBez.Visible = True
Case 4
Me.GroupLevel(0).ControlSource = "Ort"
Me.KopfOrt.Visible = True
Case 5
Me.GroupLevel(0).ControlSource = "E-Check"
Me.KopfECheck.Visible = True
Case 6
Me.GroupLevel(0).ControlSource = "Datum"
Me.KopfDatum.Visible = True
End Select
MsgBox ("Sortwert1 = " & Me.GroupLevel(0).ControlSource)
Select Case Sortwert2
Case 1
Me.GroupLevel(1).ControlSource = "Barcode"
Case 2
Me.GroupLevel(1).ControlSource = "Bezeichnung (Typ, genaue Bezeichnung)"
Case 3
Me.GroupLevel(1).ControlSource = "Bezeichnung"
Case 4
Me.GroupLevel(1).ControlSource = "Ort"
Case 5
Me.GroupLevel(1).ControlSource = "E-Check"
Case 6
Me.GroupLevel(1).ControlSource = "Datum"
End Select
MsgBox ("Sortwert2 = " & Me.GroupLevel(1).ControlSource)
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat, Date], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat, Date], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat], "\#yyyy-mm-dd\#") & "));"
'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"
MsgBox ("Abfrage: " & SQLstr)
Me.RecordSource = SQLstr
MsgBox ("SQLstr Übernommen")
End Sub
4.) Auf dem Formular FRMAlleGeraeteSortiert liegt eine Schaltfläche mit folgendem eingebetteten Makro im Ereignis Beim Klicken:
ÖffnenBericht
Berichtsname REPAlleGeraeteSortiert
Ansicht Seitenansicht
Filtername
Bedingung
Fenstermodus Normal
AusführenMenübefehl
Befehl DruckenObjekt
Der Makro wurde vom Steuerelemente-Assistenten automatisch erstellt.
Viele Grüße und Danke für alles
Beate1953
Hallo,
Private Sub Report_Open(Cancel As Integer)
'MsgBox ("Sortwert1= " & Sortwert1) Wo kommt denn Sollwert1 her?
'MsgBox ("Sortwert2= " & Sortwert2) dito
Dim AnfDat as Date, EndDat as Date
Me!KopfBezTyp.Visible = False ' hiermit werden die Gruppenköpfe ein-/ausgeblendet
Me!KopfBez.Visible = False
Me!KopfOrt.Visible = False
Me!KopfECheck.Visible = False
Me!KopfDatum.Visible = False
Me!Anfdat = nz(Forms!FRMZeitraum!ADatum,Date) 'hier werden den Feldern die
'MsgBox ("Anfdat= " & Me!Anfdat) 'Formulardaten zugewiesen Besser wäre, die Werte per Openargs zu übergeben
Me!Enddat= nz(Forms!FRMZeitraum!EDatum,Date)
'MsgBox ("Enddat= " & Me!Enddat)
.
.
.
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & " Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & " FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & " INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & " ON Posten.[Barcode] = [E-Check].[Barcode] "
SQLstr = SQLstr & " WHERE [E-Check].Datum Between " & Format(Anfdat, "\#yyyy-mm-dd\#") & " AND " & Format(Enddat, "\#yyyy-mm-dd\#")
Hallo,
ich habe jetzt die Prozedur nach Deinen Angaben umgebaut und bekomme bei der Zeile
Me!Anfdat = Nz(Forms!FRMZeitraum!ADatum, Date)
die Fehlermeldung "Laufzeitfehler '2448': Sie können diesem Objekt keinen Wert zuweisen."
Kann das daran liegen, dass da mit Dim 2 Variable definiert wurden, deren Name (AnfDat und Enddat) gleichzeitig die Namen der beiden Textfelder in dem Bericht sind -- oder ist das Absicht?
Viele Grüße
Beate1953
Hallo,
hmm, ja, das ist diesmal ein "Fauxpas" von mir..." 8)
Wenn Anfdat, bzw. Enddat mit Dim zu Variablen deklariert werden, dürfen das dann keine Berichts-Textfelder sein und das "ME!" vor diesen Namen muss an allen Stellen entfernt werden.
Hallo,
das mit dem SQLstr klappt jetzt prima - vielen herzlichen Dank!
Bei dem Feld DomAnzahl habe ich jetzt folgenden Ausdruck drin:
=DomAnzahl("*";"[E-Check]";"[E-Check] LIKE 'J*' AND ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "))")
Hier zeigt er mir schon mal die Anzahl aller DS mit "J*" an (nicht #Fehler wie bisher immer), aber das Datumskriterium ignoriert er einfach. Übrigens habe ich jetzt als Domain keine Abfrage mehr sondern direkt die Tabelle.
Ich fürchte, dass irgendwie die Zahl der Klammern oder Anführungsstriche nicht stimmt - aber Fehlermeldung bringt er mir keine.
Kannst Du mir nochmal helfen?
Vielen Dank im Voraus
Beate1953
Hi
=DomAnzahl("*";"[E-Check]";"[E-Check] LIKE 'J*' AND [E-Check].Datum Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#"))
Harald
Hallo,
nein, das klappt so auch nicht, weil "Anfdat", bzw. "Enddat" keine Berichts-Textfelder, sondern ein Date-Variablen sind.
Wenn, dann muß es sich auf die Form-Felder beziehen:
=DomAnzahl("*";"[E-Check]";"([E-Check] LIKE 'J*' or [E-Check] LIKE 'N*') AND [Datum] Between " & Format(Nz(Forms!FRMZeitraum!ADatum; Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Forms!FRMZeitraum!EDatum; Date); "\#yyyy-mm-dd\#") & ")"
Prinzipiell könnte man auch die Variablen-Werte über eine Funktion "holen", was die Sache aber nur komplizierter werden läßt.
Trotzdem sollte nochmal der Eintrag:
=Anzahl(*)
im Steuerelementinhalt eines Textfeldes versucht werden.
Hallo,
leider kommt bei Euren beiden Funktionen die Fehlermeldung
"Der von Ihnen eingegebene Ausdruck ist syntaktisch falsch"
und die Funktion wird gelöscht.
Ein Feld mit dem Steuerelementinhalt =Anzahl(*) habe ich und das funktioniert prima.
Viele Grüße
Beate1953