Where Klausel in Reports

Guten Tag,

in einem Report werdenzwei Felder aus einer Tabelle gedruckt. Aber nur, wenn für diese Felder die folgende Where-Klausel gilt:

DoCmd.OpenReport „Report1“, acViewNormal, , „select psn, route from dsv_05 where datum =’“ & MySQL_Datum_Gestern & „’ and datum_03 is null and datum_08 is null and datum_02 is not null;“

Fehlermeldung "Syntax-Fehler in Abfrageausdruck.
Das Datum in "MySQL_Datum_Gestern " liegt in der Form ‚2009-10-06‘ vor. Wenn ich die Select-Abfrage in eine normale Abfrage packe und die Variable "MySQL_Datum_Gestern " durch einen festen Wert, s. o., ersetze, funktioniert es.

Folgendes habe ich schon probiert aber ohne Erfolg:
Ersetzen der Variable durch Festwert
Ändern der Zeichen # in ’ (Hochkomma)
Weglassen des Semikolons am Ende
Auch alles in Kombination.

Ich bitte um Hilfe.
Vielen Dank.
Thomas

Hallo,

in einem Report werdenzwei Felder aus einer Tabelle gedruckt.
Aber nur, wenn für diese Felder die folgende Where-Klausel
gilt:

DoCmd.OpenReport „Report1“, acViewNormal, , „select psn, route
from dsv_05 where datum =’“ & MySQL_Datum_Gestern & „’ and
datum_03 is null and datum_08 is null and datum_02 is not
null;“

Fehlermeldung "Syntax-Fehler in Abfrageausdruck.
Das Datum in "MySQL_Datum_Gestern " liegt in der Form
‚2009-10-06‘ vor. Wenn ich die Select-Abfrage in eine normale
Abfrage packe und die Variable "MySQL_Datum_Gestern " durch
einen festen Wert, s. o., ersetze, funktioniert es.

Folgendes habe ich schon probiert aber ohne Erfolg:
Ersetzen der Variable durch Festwert
Ändern der Zeichen # in ’ (Hochkomma)
Weglassen des Semikolons am Ende
Auch alles in Kombinatin

Es wird nicht klar, ob oder warum
– es sich um eine Access-Tabelle handelt
– das Datums-Feld vom DATENTYP („Formate“ sind unerheblich)Datum/Uhrzeit oder Text ist.
– für den Where-Condition-Parameter der Openreport-Methode eine kompletter SQL-String verwendet wird.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Es wird nicht klar, ob oder warum
– es sich um eine Access-Tabelle handelt
– das Datums-Feld vom DATENTYP („Formate“ sind
unerheblich)Datum/Uhrzeit oder Text ist.
– für den Where-Condition-Parameter der Openreport-Methode
eine kompletter SQL-String verwendet wird.

Hallo Franz,

vielen Dank für das Interesse. Das Projekt hatte ich ursprünglich in VB geschrieben, mit einer Anbindung an eine MySQL-Datenbank. Daher der Name „MySQL_Datum_Gestern“. Tattsächlich handelt es sich nun um eine Access-Datenbank, mit entsprechenden Tabellen. Z. Bsp. dsv_05, dsv_03 etc.
Das Feld Datum ist vom Datentyp Datum/Uhrzeit.
Geb ich in die Where-Condition lediglich
„datum =#“ & MySQL_Datum_Gestern & „# and datum_03 is null and datum_08 is null and datum_02 is not null;“
ein, so meckert Access rum --> Syntaxfehler

gebe ich ein
„where datum =#“ & MySQL_Datum_Gestern & „# and datum_03 is null and datum_08 is null and datum_02 is not null;“
meckert Access rum --> fehlender Operator

gebe ich ein
„datum =#“ & MySQL_Datum_Gestern & „# and datum_03 is null and datum_08 is null and datum_02 is not null“
(Semikolon weggelassen) will Access den Wert für Datum, dann für datum_03 usw. haben
Das zuletzt genannte wird auch gemeldet, wenn ich vor die Feldnamen „dsv_05.“ setze.

Wie würde es denn richtig aussehen?

Danke.
Thomas

Hallo,

etwa so (als Where-Condition-Parameter):

„[datum] =“ & Format(Me!MySQL_Datum_Gestern,"#yyyy-mm-dd#") & " and datum_03 is null and datum_08 is null and datum_02 is not null"

wenn „MySQL_Datum_Gestern“ ein Formulartextfeld ist

oder
„[datum] =“ & Format(MySQL_Datum_Gestern,"#yyyy-mm-dd#") & " and datum_03 is null and datum_08 is null and datum_02 is not null"

wenn „MySQL_Datum_Gestern“ eine Variable vom Datentyp Date ist.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

„datum =#“ & MySQL_Datum_Gestern & „# and datum_03 is null and
datum_08 is null and datum_02 is not null;“
ein, so meckert Access rum --> Syntaxfehler

Ich vermute mal, das -> NOT wird auf die ganze Bedingung angewand.
Daher würde ich zusammengesetzte Bedingungen immer „klammern“.

(datum = #" & MySQL_Datum_Gestern & „#) and
(datum_03 = Null) and
(datum_08 = Null) and
(datum_02 not Null);“

  • das Wort „IS“ solltest du in solchen Bedingungen nicht verwenden, da Access es imho nicht kennt.

Grüße aus Rostock
Wolfgang
(Netwolf)

Hi Wolfgang,

sorry, wenn ich korrigierend eingreife, aber die Aussagen sind so nicht richtig…

„datum =#“ & MySQL_Datum_Gestern & „# and datum_03 is null and
datum_08 is null and datum_02 is not null;“
ein, so meckert Access rum --> Syntaxfehler

Ich vermute mal, das -> NOT wird auf die ganze Bedingung
angewand.
Daher würde ich zusammengesetzte Bedingungen immer „klammern“.

(datum = #" & MySQL_Datum_Gestern & „#) and
(datum_03 = Null) and
(datum_08 = Null) and
(datum_02 not Null);“

  • das Wort „IS“ solltest du in solchen Bedingungen nicht
    verwenden, da Access es imho nicht kennt.

„Is Null“ und „Not is Null“, bzw. „is not Null“ sind ok.

" … =Null" ist falsch

Eine Klammerung ist nur bei „OR“- Verknüpfung erforderlich, je nachdem, wie diese OR-Verknüpfungen sich in Verbindung mit noch anderen evtl. „AND“-Verknüpfungen verhalten sollen.

Ein Datums-Kriterium (Vergleichwert) muß im Jet-SQL (Access-SQL)-String im USA- oder ISO-Format vorliegen:

#12/31/2009#

bzw.
#2009-12-31#

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Kapitulation
Hallo zusammen,

ich gebs auf.
Nach nun fast 24 Stunden ist es mir nicht gelungen, ACCESS zu dem zu überreden, was ich will. Alle Tipps, die hier gegeben wurden habe ich ausprobiert. Von vorn nach hinten und umgekehrt. Rauf und runter. Habe die Feldtypen in Text geändert --> nichts tut sich. Offenbar ist die „Where Condition“ nur eine Alibifunktion, die man nicht nutzen kann.
Wie ich bereits in meiner ersten Nachricht schrieb, funktioniert die Syntax, wenn ich sie direkt in eine Abfrage eingebe. Aber eben NUR dort. Ich wollte mir halt ersparen, mehrere Abfragen zu erstellen sondern die Abfrage im Report wirken lassen. Geht nicht. Und nun ist Schluss.
Trotzdem vielen Dank für das Interesse und die vielen Codeschnipsel.
Thomas

Hallo

ich gebs auf.

ach was, Kapitilation gilt nicht…

Nach nun fast 24 Stunden ist es mir nicht gelungen, ACCESS zu
dem zu überreden, was ich will. Alle Tipps, die hier gegeben
wurden habe ich ausprobiert. Von vorn nach hinten und
umgekehrt. Rauf und runter. Habe die Feldtypen in Text
geändert --> nichts tut sich.

Beschreib lieber Gegebenheiten(Feldnamen, Tabellennamen, (kompletter) SQL-String…

Offenbar ist die „Where
Condition“ nur eine Alibifunktion, die man nicht nutzen kann.

Unsinn…

Wie ich bereits in meiner ersten Nachricht schrieb,
funktioniert die Syntax, wenn ich sie direkt in eine Abfrage
eingebe. Aber eben NUR dort. Ich wollte mir halt ersparen,
mehrere Abfragen zu erstellen sondern die Abfrage im Report
wirken lassen. Geht nicht.

Poste den (kompletten) akt. Code, mit dem Du den Bercht aufrufst und die Datenherkunft des Berichtes (Tabellenname, Abfragename, SQL-String)

Und nun ist Schluss.

Nee, noch nicht. Du musst ALLES VOLLSTÄNDIG beschreiben, damit man sehen kann, wo es denn nun hakt…Ansosnten habe ich nur eine vage Vorstellung von dem, was Du machst.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

leider habe ich wirklich keine Zeit, mich länger damit zu beschäftigen.
Ich habe das nun so gelöst, dass ich eine Abfrage zur Laufzeit modifiziere und der Bericht diese Abfrage verwendet. Das funktioniert einwandfrei. Ist auch nicht viel aufwendiger als die Where-Condition des Reports.

Danke.
Thomas

Die Variable hatte vor der Modifikation das Format „yyyy-mm-dd“.

MySQL_Datum_Heute = Date
Abzug = 0
If Weekday(Date, vbMonday) = 1 Then Abzug = 2
MySQL_Datum_Gestern = Format(Date - 1 - Abzug, „dd.mm.yyyy“)
Abzug = 0

‚Bericht modifizieren
DoCmd.OpenReport „Report1“, acViewDesign
Set Bericht = Reports(„Report1“)
With Bericht
.bezeichnungsfeld0.Caption = „Eingang“
.bezeichnungsfeld7.Caption = „Erfassung vom: " & MySQL_Datum_Gestern
End With
DoEvents
Set Bericht = Nothing
DoEvents
DoCmd.Close acReport, „Report1“, acSaveYes
DoEvents

‚Abfrage modifizieren
Set Qdf = CurrentDb.QueryDefs!dsv_05_1
With Qdf
.SQL = "select psn, route from dsv_05 where datum=‘“ & MySQL_Datum_Gestern & "‘ and datum_03 is null and datum_08 is null and datum_02 is not null;"
End With
Set Qdf = Nothing
DoEvents

DoCmd.OpenReport „Report1“, acViewNormal
DoEvents

Hallo,

Zunächst das Tabellenfeld „Datum“ in den Datentyp Datum/Uhrzeit umwandeln, das ist essentiell, wenn Du keine Folgeprobleme riskieren willst.

Dann einfach:

Sub btnDrucken_Click()
Dim MySQL_Datum_Gestern as Date
Dim Abzug as Long
Abzug = 0
If Weekday(Date, vbMonday) = 1 Then Abzug = 2
MySQL_Datum_Gestern = Date - 1 - Abzug
Abzug = 0
DoCmd.OpenReport „Report1“, acViewPreview,"[datum]= " &
Format(MySQL_Datum_Gestern,"#yyyy-mm-dd#") & " and datum_03 is null and datum_08 is null and datum_02 is not null",„Eingang;“ &
"Erfassung vom: " & Format(MySQL_Datum_Gestern,„yyyy-mm-dd“)
’ Formatierung des Gestern-Datums wie gewünscht anpassen
End Sub

Der Bericht erhält sodann als Datenherkunft:

select psn, route from dsv_05 oder besser nur:

dsv_05

und diese Ereignisprozedur für das Open-Ereignis:

Sub Report_Open()
Dim a
If Not Isnull(Me.Openargs) then
a=Split(Me.Openargs,";")
Me!bezeichnungsfeld0.Caption =a(0)
Me!bezeichnungsfeld7.Caption =a(1)
End If
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!