PDA

Vollständige Version anzeigen : Code funktioniret nicht


Simon
29.08.2001, 07:58
Hallo,

Ich habe ein Suchforumlar in dem ich einen Bouton "Anzeigen" habe. Hinter dem Bouton habe ich einen Code der mir eine Fehlermeldung zeigt:
Fehlender Operator!

If Not IsNull(Me.nachKostenstellengeteilt) Then
strRep = "reqKostenstellenGeteilt"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "' and Between #" & Format(CDate(Datumvon), "dd-mm-yy") & _
"#and#" & Format(CDate(Datumbis)) & "#"
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "' and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "'"
End If

Und zwar bei der Linie:
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "' and Between #" & Format(CDate(Datumvon), "dd-mm-yy") & _
"#and#" & Format(CDate(Datumbis)) & "#"

Kann mir jemand Helfen?!?

Gruss Simon

PIBI
29.08.2001, 09:53
Kann es vielleicht sein, dass du das "bis" Datum vergessen hast, also:
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "' and Between #" & Format(CDate(Datumvon), "dd-mm-yy") & "#and#" & Format(CDate(Datumbis,"dd-mm-yy")) & "#".
Gruss Christoph

Simon
29.08.2001, 10:32
Hallo,

leider gehts immer noch nicht!!

Fehlermeldung wie oben in Zeile: DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "' and Between #" & Format(CDate(Datumvon), "dd.mm.yy") & "#and#" & Format(CDate(Datumbis), "dd.mm.yy") & "#;"

Gruss Simon

GustavKurz
29.08.2001, 10:48
Hallo Simon,

also die Syntax von SQL-Anweisungen unter VBA ist schlicht zum Heulen!!
Ich quäle mich schon den ganzen Morgen mit einem ganz ähnlichen Problem herum: :mad:]
---------------------------------------------------------------------------------------------------------------------------------------
strSQLDomain = "SELECT * FROM [Domain-Daten] WHERE ((([Domain-Daten].[Abr Datum]) Like '*')) OR #" & Format([Domain-Daten].[Abr Wiedervorlage], "dd-mm-yyyy") & "# < #" & RelevantDatum & "#;"
---------------------------------------------------------------------------------------------------------------------------------------
...krieg auch dauernd Fehlermeldungen.

Bei Deinem Coding glaube ich erkennen zu können, das ein Feld zum Vergleich des Von-Bis Datums fehlt!

DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "' and [Dein fehlendes Datumsfeld] Between #" & Format(CDate(Datumvon), "dd-mm-yy") & "#and#" & Format(CDate(Datumbis)) & "#"

...oder?

Gruß
Gustav

Simon
29.08.2001, 11:03
Hallo,

es geht immer noch nicht!!

Muss ich eigentlich noch ein Feld in meiner Abfrage erstellen??

Gruss Simon

GustavKurz
29.08.2001, 11:19
Hi Simon,
ich denke schon... :)
während Du beim 1. Vergleich alle Felder drin hast, fehlts beim 2.
also: "[AnlageType]='" & Me.AnlageType & "' --- OK!
aber: and Between #" & Format(CDate(Datumvon), "dd-mm-yy") & "#and#" & Format(CDate(Datumbis)) & "#" ---da fehlts!
was für ein Feld soll denn "Between" [Datumvon] und [Datumbis] sein? ...bzw wo, auf welchem Formular befinden sich die beiden Felder [Datumvon] und [Datumbis]?

NICHT VERZWEIFELN
Gruß
Gustav

Simon
29.08.2001, 11:26
Hallo,

Die Felder (Datumvon) und (Datumbis) sind nur auf meinem Suchformular.
Das Suchformular öffnet mir dan einen Bericht der auf einer Abfrage basiert. In meiner Abfrage habe ich das Feld "Datum --> abgeschlossen" das zwischen dem (Datumvon) und dem (Datumbis) in meinem Suchformual sein soll!
Ich weiss nicht ob ich in der Abfrage auch ein Feld für "(Datumvon) und (Datumbis)" haben muss!!

Gruss Simon

Stema
29.08.2001, 11:26
Tja Datumabfragen sind leider immer besch...

Grund: Englische und deutsche Formate.
Erstellt Eure Abfragen nach diesem Motto:

"SELECT * FROM Tabelle WHERE Datum = #8/29/01#"

Dann sollte es funktionieren. Mit Variable:
"SELECT * FROM Tabelle WHERE Datum = #'" & month(varDatum) & "/" & day(varDatum) & "/" & year(varDatum) & "#"

GustavKurz
29.08.2001, 12:10
Hi Simon,
Nein, die "Von - Bis" Datumsfelder brauchst Du nicht in der Abfrage des Berichtes.
Versuchs mal so:
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "' And [Datum --> abgeschlossen] > #" & Format(Forms!DeinSuchformular.Datumvon, "dd-mm-yy") & "# And < #" & Format(Forms!DeinSuchformular.Datumbis, "dd-mm-yy") & "#"

Hoffe es geht...
Gruß
Gustav

Simon
29.08.2001, 12:51
Hallo,

es geht noch nicht!!!

Immer gleiche Fehlermeldung!!

Gruss Simon

Sascha Trowitzsch
29.08.2001, 13:23
Neuer Versuch:

DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & Me.AnlageType & " And [Datum --> abgeschlossen] > #" & Format(Forms!DeinSuchformular.Datumvon, "dd-mm-yy") & "# And [Datum --> abgeschlossen] < #" & Format(Forms!DeinSuchformular.Datumbis, "dd-mm-yy") & "#"

Ciao, Sascha

PS: Nach dem letzen AND nochmal das Feld für den Vergleich <

sekoe
29.08.2001, 13:27
Hi Simon,
ich mische mich mal wieder ein. Hast Du es schonmal mit buidlcriteria versucht ?
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & Me.AnlageType & " And " & buildcriteria("[Datum --> abgeschlossen]",dbdate," > " & Forms!DeinSuchformular.Datumvon & " AND <= " & Forms!DeinSuchformular.DatumBis)

Stema
29.08.2001, 13:49
Hi Simon,

setz Dir den String doch mal in einer Variablen zusammen und laß ihn dir in einer msgbox oder debug.print anzeigen. dann müßtest Du sofort sehen, wo der Fehler liegt.

So sollte es dann eigentlich aussehen:
[AnlageType]= DeineAnlageart And Between #04/1/95# And #07/1/95#
Mir ist noch aufgefallen, "# And #" (richtig) "#And#" (falsch).

Simon
29.08.2001, 14:35
Hallo,

Folgende Fehlermeldung bekomm ich wenn ich Soekes Antwort nehme:

Syntaxfehler (fehlender Operator) in Abfrageausdruck '/[AnlageType]= AnlageTypeName And[Datum --> abgeschlossen]>#1/1/2001#And[Datum --> abgeschlossen]<=#30/06/2001#)'.

Gruss Simon

Simon
29.08.2001, 15:05
Hallo,

Private Sub Anzeigen_Click()
Dim strRep As String


If Not IsNull(Me.nachKostenstellengeteilt) Then
strRep = "reqKostenstellenGeteilt"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & _
Me.AnlageType & " And " & BuildCriteria("[Datum --> abgeschlossen]", dbDate, " > " & _
Forms!SuchenKostenstellen.Datumvon & " AND <= " & Forms!SuchenKostenstellen.Datumbis)
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "' and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "'"
End If
ElseIf Not IsNull(Me.nachKostenstellen) Then
strRep = "reqKostenstellenGesamt"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageTypeNr]=" & _
Me.nachKostenstellen & " and Between #" & Format(CDate(Datumvon), "dd.mm.yy") & _
"#and#" & Format(CDate(Datumbis)) & "#;"
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageTypeNr]=" & _
Me.nachKostenstellen & " and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[anlagetypenr]=" & Me.nachKostenstellen
End If
ElseIf Not IsNull(Me.nachGebäude) Then
strRep = "reqKostenstellen nach Elementneu"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[element]='" & _
Me.nachElement & "' and Between #" & Format(CDate(Datumvon), "dd-mm-yy") & _
"#and#" & Format(CDate(Datumbis)) & "#;"
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[element]='" & _
Me.nachElement & "' and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[element]='" & _
Me.nachElement & "' and [Anlage] = '" & Me.nachAnlage & "'"
End If
ElseIf Not IsNull(Me.alleKostenstellen) Then
strRep = "reqKostenstellenGesamt"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AuftragEndeDatum] = " & _
DatePart("ww", Me.Datumvon) & Year(Me.Datumbis)
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview
End If
End If
End Sub

Gruss Simon

Birgit Dannenberg
30.08.2001, 08:35
Hallo Simon,

Dein Code sieht ja schon ganz gut aus, aber Du mußt das Vergleichsdatum wiederholen, also:
[Datum --> abgeschlossen] >= Datum-von AND [Datum --> abgeschlossen] <= Datum-bis
Beachte auch '>=' und '<=', das ist m.E. sinnvoller.

Wenn Du Between verwenden willst, werden die Ober- und Untergrenze ebenfalls mit eingeschlossen.

hth Birgit

Sascha Trowitzsch
30.08.2001, 08:42
Genau, wie Birgit sagt!
Hast du meinen Code auf Seite 1 schon mal getestet?

Ciao, Sascha

Simon
30.08.2001, 09:04
Hallo,

Ich bekomm immer die gleiche Fehlermeldung:

Syntaxfehler (fehlender Operator) in Abfrageausdruck '/[AnlageType]= AnlageTypeName And[Datum --> abgeschlossen]>#1/1/2001#And[Datum --> abgeschlossen]<=#30/06/2001#)'.


Wieso Ich mache doch alles wie Ihr mir sagt!!

Gruss Simon

Birgit Dannenberg
30.08.2001, 09:12
Lieber Simon,

Dein String ist so nicht ok! Es fehlen Leerzeichen und das Datum schreibt man in der Form #mm/dd/yy# (glaub ich): Und was soll der Schrägstrich am Anfang?

In der Programmierung muss man sich eben exakt an die Syntaxregeln halten, sonst ist man verraten und verkauft!!

Gruss Birgit

Birgit Dannenberg
30.08.2001, 09:23
Noch ein Tipp:
Du solltest Deine Abfragen und Where-Klauseln mal im Abfragefenster testen. Da bekommst Du nämlich genauere Hinweise, wo der Fehler liegt. (Der Cursor steht dann auf der kritischen Stelle.)

Ich mache so etwas übrigens folgendermaßen:
beim Öffnen des Berichts frage ich den Auswertungszeitraum ab, öffne die Parameterabfrage, setze die Parameter und führe sie aus. Die Abfrage erstellt mir eine temporäre Tabelle, an die der Bericht gebunden ist. Die temp. Tabellen werden dann in meinen Anwendungen beim Beenden automatisch gelöscht.

Bei Deiner Methode filterst Du nachträglich eine Abfrage, was IMHO einen gewissen Overhead bewirkt. Kann aber auch sein, dass Access daraus eine neue Abfrage macht - wer weiß das schon so genau?!

Gruß Birgit

Simon
30.08.2001, 13:45
Hallo Forumleser/innen,

ich bin jetzt schon seit Gestern morgen 9.00 Uhr daran und es geht immernochnicht!!
Vieleicht stehe ich auf dem Schlauch oder sowas!!

Kann mir jemand sagen wie mein Code Jetzt aussehen soll!!
So sicher nicht:

Private Sub Anzeigen_Click()
Dim strRep As String


If Not IsNull(Me.nachKostenstellengeteilt) Then
strRep = "reqKostenstellenGeteilt"
If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & _
Me.AnlageType & " and Between #" & Format(CDate(Datumvon), "dd.mm.yy") & _
"#and#" & Format(CDate(Datumbis)) & "#;"
DoCmd.OpenReport strRep, acViewPreview, , "[Bestdat] ="
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & _
Me.AnlageType & "' and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "'"
End If

End If
End Sub

Wenn niemand helfen kann werde ich mein Glück halt irgendwann wiedermal versuchen!!

Gruss Simon

Kurt aus Kienitz
30.08.2001, 14:08
Hallo Simon,

Probier es mal so:

Private Sub Anzeigen_Click()

Dim strRep As String

If Not IsNull(Me.nachKostenstellengeteilt) Then

strRep = "reqKostenstellenGeteilt"

If Not IsNull(Me.Datumvon) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & Me.AnlageType & " and Between #" & _
Format(CDate(Datumvon), "yyyy-mm-dd") & "# and #" & Format(CDate(Datumbis), "yyyy-mm-dd") & "#"
DoCmd.OpenReport strRep, acViewPreview, , "[Bestdat] ="
ElseIf Not IsNull(Me.Jahr) Then
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "' and [djahr] = " & Me.Jahr
Else
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]='" & Me.AnlageType & "'"
End If
End If

End Sub

HTH

Simon
30.08.2001, 14:31
Hallo,

Fehlermeldung: Laufzeitfehler: '3075'!!

Keine Ahnung!!

Gruss Simon

Kurt aus Kienitz
30.08.2001, 14:36
Hallo Simon,

Habe hier kein Access !
Gibt es da auch eine Fehlermeldung zu ?

Simon
30.08.2001, 14:51
Hallo Kurt,

was meinst Du mit:

Habe hier kein Access !
Gibt es da auch eine Fehlermeldung zu?

Versteh das nicht!!

Gruss Simon

Kurt aus Kienitz
30.08.2001, 14:56
Hallo Simon :D

Das soll heißen, daß hier auf dem Rechner an dem ich gerade arbeite kein Access installiert ist und ich nicht selber in der Access-Hilfe nachsehen kann welche Beschreibung zum Fehler 37?? es gibt.

Simon
30.08.2001, 14:59
Hallo Kurt,

das habe ich jetzt aus der Hilfe:

<Meldung> in Abfrageausdruck <Ausdruck>. (Fehler 3075)
Der von Ihnen eingegebene Ausdruck ist aus dem in der Meldung angegebenen Grund nicht gültig. Überprüfen Sie, ob Sie Feldnamen und Satzzeichen korrekt eingegeben haben, und versuchen Sie dann, die Operation erneut durchzuführen.

Kannst Du mit dem was anfangen?!

Simon

Kurt aus Kienitz
30.08.2001, 15:09
Hallo Simon,

Wie sollte es auch anders sein, ein Syntaxfehler !

Nehm mal folgenden Code und poste was die Messagebox ausgibt.

Private Sub Anzeigen_Click()

Dim strRep As String
Dim strBedingung As String

If Not IsNull(Me.nachKostenstellengeteilt) Then

strRep = "reqKostenstellenGeteilt"

If Not IsNull(Me.Datumvon) Then
strBedingung = "[AnlageType]= " & Me.AnlageType & " and Between #" & _
Format(CDate(Datumvon), "yyyy-mm-dd") & "# and #" & Format(CDate(Datumbis), "yyyy-mm-dd") & "#"

' DoCmd.OpenReport strRep, acViewPreview, , "[Bestdat] ="
ElseIf Not IsNull(Me.Jahr) Then
strBedingung = "[AnlageType]='" & Me.AnlageType & "' and [djahr] = " & Me.Jahr
Else
strBedingung = "[AnlageType]='" & Me.AnlageType & "'"
End If

MsgBox strBedingung
DoCmd.OpenReport strRep, acViewPreview, , strBedingung
End If

End Sub

Kurt aus Kienitz
30.08.2001, 15:26
Hallo Simon,

Noch was, beim

strBedingung = "[AnlageType]= " & Me.AnlageType & " and Between #" & Format(CDate(Datumvon), "yyyy-mm-dd") & "# and #" & Format(CDate(Datumbis), "yyyy-mm-dd") & "#"

fehlt noch etwas zwischen and und Between, nämlich das Tabellenfeld welchen zwischen Datumvon und Datumbis liegen soll.

z.B.

...and [AnlageDatum] Between...

Simon
31.08.2001, 09:38
Hallo,

Ich habe es jetzt so Versucht:

DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= " & Me.AnlageType & _
" and [AuftragEndeDatum] Between #" & Format(CDate(Datumvon), "dd.mm.yy") & "# and #" & _
Format(CDate(Datumbis), "dd.mm.yy") & "#"

Es geht immer noch nicht, bekomm immer gleiche Fehlermeldung!!

Gruss Simon

Birgit Dannenberg
31.08.2001, 09:48
Hallo Simon,

warum schaust Du Dir nicht mal die Online-Hilfe an? Da stehen funktionierende Beispiele, wie man mit Between und Datumsvergleichen umzugehen hat!

Wie ich dir bereits gesagt hatte, wird das Datum in der Form #mm/dd/yy# eingegeben. (d.h. Monat/Tag/Jahr!!)

Mein Vorschlag:
DoCmd.OpenReport strRep, acViewPreview, , "[AnlageType]= '" & Me.AnlageType & _
"' and [AuftragEndeDatum] Between #" & Format(Datumvon, "mm/dd/yy") & _
"# and #" & Format(Datumbis, "mm/dd/yy") & "#"


Gruss Birgit

P.S.: AnlageType ist ein Textfeld, also in Hochkommata einschließen!

Stema
31.08.2001, 09:56
Hallo Birgit,

das scheint sinnlos zu sein. Da scheint keiner auf uns zu hören. Ich habe auch schon mindestens 100mal geschrieben: Abfragen mit Datum in folgendem (amerikanischen Datums-) Format #mm/dd/yy(yy)#

Manchmal frage ich mich echt, ob es Sinn macht zu antworten, wenn die Vorschläge nicht einmal ausprobiert werden.

Aber mit dem Format, wenn Du es vorgeschlagen hast, klappt es auch nicht immer. Ich setze den String deshalb anders zusammen (siehe meine Antwort vom 29.08. in diesem Beitrag). So habe ich keine Probleme mehr mit Datumabfragen.

Birgit Dannenberg
31.08.2001, 10:04
Hast wohl recht Stema, aber jeder weiß ja wohl wie das ist, wenn das Brett vor'm Kopf die Sicht versperrt... ;) und da hat man halt Mitleid...

Gruß Birgit

Kurt aus Kienitz
31.08.2001, 10:18
Hallo Birgit, Hallo Stema,

Nichts für ungut aber das Format "yyyy-mm-dd" ist, nach meinen Informationen, das von der ISO genormte Format (es könnte auch "yyyy.mm.dd" sein ;)).
Ich habe dies auch so schon des öfteren verwendet und das hat bis Dato immer funktioniert.

Habt ihr das evtl. neuere Informationen ?
Ich arbeite ausschließlich mit A97, könnte ja sein daß sich in A2000 etwas geändert hat.

Stema
31.08.2001, 10:41
Hallo Kurt,

mit dem Format hast Du durchaus recht, aber Microsoft scheint sich darum einen Dreck zu kümmern. Ich weiß allerdings nicht, ob das inzwischen in A00 integriert ist, in A97 jedenfalls nicht. Die meisten Abfragen funktionieren nur mit #mm/dd/yy# und #mm/dd/yyyy#
Sind halt Amerikaner, die interessieren ISO-Standards nicht die Bohne.

Birgit Dannenberg
31.08.2001, 10:44
@Kurt: Ich verwende auch noch A97! Habe aber dennoch noch den meisten Erfolg mit meiner Methode.
Nach langwierigem Suchen findet man in der Online-Hilfe auch entsprechende Hinweise,
im Moment weiß ich aber leider nicht wo.
Möglicherweise (sehr wahrscheinlich!) ist die Datumsbehandlung aber auch von den Systemeinstellungen abhängig.
Ich unterstelle mal allgemein die deutsche Syntax mit inzwischen 4-st. Jahr.

Gruß Birgit

sekoe
31.08.2001, 12:15
Meines Wissens nach (Ich schreib's jetzt zum letzten mal) erledigt alle o.g. Probleme die BuildCriteria-Methode (siehe Online-Hilfe)

Simon
31.08.2001, 12:26
Hallo an Alle,

Ich habe es jetzt gemacht und der Code fuktioniert richtig!!!

Danke an Alle die mir geholfen haben, Ich bin momentan sehr müde weil ich zumn ersten mal Vater geworden bin!!
Ich habe in den letzten nächte sehr wenig geschlafen!!

Entschuldigung für die länge meiner Seits!!

Gruss Simon

PS: Es ist ein Knabe und er heist Remo!!

Birgit Dannenberg
31.08.2001, 12:37
Na dann wollen wir Dir mal alle ganz herzlich gratulieren!! (sag ich einfach mal so)

Und nimm's nicht so schwer, auch wenn Deine Kriteriumsabfrage eine recht schwere Geburt war -
auf Remo hast Du ja wohl noch etwas länger warten müssen.
(Dafür ist das Ergebnis sicher auch bildhübsch!)

:) Gruss Birgit :)