Moin zusammen!
Dies ist mein erster Beitrag hier ... gleich mit einer Frage.
Ich habe eine Datenbank vor die Nase gesetzt bekommen, welche einen Fehler hat.
Es geht um folgendes:
Sub send_repots()
Dim frage As String
frage = InputBox("Bitte geben Sie den Monat ein", "Abfrage", , 200, 200)
If frage = "" Then
Exit Sub
End If
Dim db As Database
Dim rs As Recordset
Dim sql As String
Set db = CurrentDb()
sql = "UPDATE daten SET daten.status = Null"
db.Execute (sql)
sql = "UPDATE daten SET daten.status = 'A' WHERE lettercode in (Select distinct([durchf station]) from [Reporting - Abgerechnete Daten] where [Abge-rechnet] ='" & frage & "')"
db.Execute (sql)
Call Modul1.sendmails(frage)
Set db = Nothing
End Sub
Der Fettmarkierte Bereich wirft immer den Fehler aus: Datentypen in Kriterienausdruck unverträglich
Startet man die Funktion soll nach dem "Monat" gefragt werden, man muss eingeben: 01.06.2012
Mit diesem Datum wird in einer Tabelle eine "Stationsbezeichnung" rausgesucht, bei welcher in einer weiteren Tabelle (Daten.status) ein A eingetragen werden soll. A für Abgerechnet.
Ich habe KEINE AHNUNG, warum die Datentypen unverträglich sind?! Kann mir irgendwer BITTE BITTE helfen? Falls noch Infos benötigt werden, liefere ich gerna nach.
Gruß
virility
Hallo,
das Ganze sieht ziemlich wüst aus....
-- Die Verwendung der Inputbox ist fehlerträchtig.
-- Wieso muss man ein Datum eingeben, wenn nach einem Monat gefragt wird?
-- Sonderzeichen (und Leerzeichen) in Namen dringend vermeiden!
-- Welchen Datentyp hat "Abge-rechnet" in der Tabelle?
Wenn dieses Feld den Datentyp Datum/Uhrzeit hat, dann muss das so lauten:
<<edit>>
sql = "UPDATE daten SET daten.status = 'A' WHERE lettercode in (Select distinct [durchf station] from [Reporting - Abgerechnete Daten] where [Abge-rechnet] =" & Format(frage,"\#yyyy-mm-dd\#") & ")"
<</edit>>
Sorry für das fehlende "#" 8)
Hallo,
und nach der Inputbox sollte man dann prüfen ob Frage wirklich ein Datum beinhaltet.
if not isdate([Frage] then
msgbox("Es wurde kein Datum eingegeben")
exit sub
end if
Gruß
Johann
Hallo,
weiterhin muss bei der Inputbox geprüft werden, ob "Abbruch" geklickt wurde...
Zitat von: DF6GL am Juli 09, 2012, 11:31:44
Hallo,
das Ganze sieht ziemlich wüst aus....
-- Die Verwendung der Inputbox ist fehlerträchtig.
-- Wieso muss man ein Datum eingeben, wenn nach einem Monat gefragt wird?
-- Sonderzeichen (und Leerzeichen) in Namen dringend vermeiden!
-- Welchen Datentyp hat "Abge-rechnet" in der Tabelle?
Wenn dieses Feld den Datentyp Datum/Uhrzeit hat, dann muss das so lauten:
sql = "UPDATE daten SET daten.status = 'A' WHERE lettercode in (Select distinct [durchf station] from [Reporting - Abgerechnete Daten] where [Abge-rechnet] =" & Format(frage,"\yyyy-mm-dd\#") & ")"
Ja, leider ist das alles zusammengeschuster.
Bisher war das so, dass das Datum ein "Jan12" für Januar2012 lautet. Da man damit aber keinen variablen Zeitraum (auch eine Funktion der DB) eingeben konnte, hat man es in dd.mm.yyyy geändert.
Das Eingabefeld ist falsch beschriftet. Habe es schon geändert in "Bitte Datum eingeben [dd.mm.yyyy]"
abge-rechnet ist eine Spalte mit Datumangaben im Format dd.mm.yyyy . Kann man irgendwie einsehen wie die Deklaration ist, wenn es sich um eine Tabelle handelt?
Durch die Änderung ist der Fehler jetzt weg. Danke. Leider wird das A in der Tabelle Daten nicht gesetzt...
Dadurch geht es dann hier nicht weiter : Modul1.sendmails
Hier der Auszug:
Sub sendmails(mon1 As String)
'Report erstellen
Dim rs As Recordset
Dim db As Database
Dim sql, telefon As String
Dim strEmailTo As String
Dim strSubject As String
Dim strMsgTxt As String
Dim strAttachment, strAttachment1, strAttachment2, strAttachment3 As String
'mon = InputBox("Bitte geben Sie den Monat ein", "Abfrage", , 200, 200)
'If (mon = "") Then
' Exit Sub
'End If
mon = mon1
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from daten where status = 'A'")
'If DirExists("C:\tempo\") = False Then
'MkDir ("C:\tempo\")
'End If
While Not rs.EOF
ola = rs!Lettercode
DoCmd.OutputTo acOutputReport, "fax stationen - monat", acFormatRTF, "C:\test\" & rs!Lettercode & ".rtf", False
strEmailTo = rs!fax
strSubject = "Test" & mon & " Satellitenstation: " & rs!Lettercode & ""
strMsgTxt = "Sehr geehrte Damen und Herren," & Chr(13) _
& EMAILTEXT
'strAttachment = "C:\Test\telefax.rtf"
'strAttachment1 = "C:\Test\" & rs!lettercode & ".rtf"
' MsgBox strAttachment1
Call Modul2.FnSafeSendEmail(strEmailTo, strSubject, strMsgTxt, "d:\tempo\" & rs!Lettercode & ".rtf")
rs.MoveNext
Wend
Exit Sub
Set rs = Nothing
Set db = Nothing
End SubDas ist alles total rumgewurstelt...Unglaublich schlimm. Habe in der Firma aber erst letzte Woche angefangen und kann es mir nicht erlauben rumzumeckern wie ein großer ... Heißt also: klarkommen irgendwie :-/
Hallo,
den Datentyp kannst Du im Tabellen-Entwurfsmodus nachsehen, bzw. ändern.
Irgendwie sollte der ganze Code überarbeitet und korrgiert werden..
Sub sendmails(mon1 As String)
'Report erstellen
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim sql as String , telefon As String, mon as String
Dim strEmailTo As String
Dim strSubject As String
Dim strMsgTxt As String
Dim strAttachment as String, strAttachment1 as String, strAttachment2 as String, strAttachment3 As String
'mon = InputBox("Bitte geben Sie den Monat ein", "Abfrage", , 200, 200)
'If (mon = "") Then
' Exit Sub
'End If
mon = mon1
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from daten where status = 'A'", dbOpenSnapshot)
'If DirExists("C:\tempo\") = False Then
'MkDir ("C:\tempo\")
'End If
While Not rs.EOF
ola = rs!Lettercode '??
DoCmd.OutputTo acOutputReport, "fax stationen - monat", acFormatRTF, "C:\test\" & rs!Lettercode & ".rtf", False ' Warum werden separate RTF-Files generiert?
strEmailTo = rs!fax
strSubject = "Test" & mon & " Satellitenstation: " & rs!Lettercode & ""
strMsgTxt = "Sehr geehrte Damen und Herren," & Chr(13) & EMAILTEXT
'strAttachment = "C:\Test\telefax.rtf"
'strAttachment1 = "C:\Test\" & rs!lettercode & ".rtf"
' MsgBox strAttachment1
Call Modul2.FnSafeSendEmail(strEmailTo, strSubject, strMsgTxt, "d:\tempo\" & rs!Lettercode & ".rtf")
rs.MoveNext
Wend
Exit Sub
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
puuhhh...Danke für deine Mühe!!!!
Hab das alles soweit eingearbeitet. Aber wie man dem obigen Edit erwähnt wird in der Tabelle DATEN leider nicht das 'A' gesetzt, daher wird dann bei sendmails auch nicht weitergearbeitet, da es ja nichts markiertes gibt?
Ach...und die Formatierung ist wirklich Datum/Uhrzeit. !
na toll.
jetzt habe ich die änderungen mal zurück auf den server kopiert und bekomme nach der datumseingabe folgende fehlermeldung vom debugger:
Syntaxfehler in Datum in Abfrgeausdruck 'lettercode in (select distinct [durchf station] from [reporting - abgerechnete daten} where [abge-rechner]-d=d1-06-2012#)'.
hab verschiedene versionen mit dd-mm-yyyy durchspielt.
im der tabelle steht ja: 01.06.2012 also dd.mm.yyyy
hat alles nichts gebracht.
Hallo,
da dürfte sich in deinem SQL-String ein Fehler eingeschlichen haben - bzw. wurde das Datum nicht im richtigen Format an den selbigen übergeben.
Sieh dazu ....
http://www.donkarl.com?FAQ6.8 (http://www.donkarl.com?FAQ6.8)
mh. ich checke das nicht.
ich habe versucht in der tabelle das datumfeld als yyyy-mm-dd anzeigen zu lassen. es wird automatisch in dd.mm.yyyy geändert ?!, obwohl
inder der tabellenbearbeitung yyyy-mm-dd steht bei eingabeformat.
wie ich den code mit der "übersetzung" des datums einzugeben habe in meine datenbank verstehe ich nicht.
Hallo,
es fehlt ein #
=#" & Format(frage,"\yyyy-mm-dd\#") & ")"
Datumswerte sind immer Zahlenwert und werden über das Format halt nur Formatiert.
Und mehr nicht.
Gruß
Johann
Tjo....leider nicht. Weiterhin Syntaxfehler. Ich bekomme gleich nen Schreikrampf. Welcher Idiot hat denn die DB erstellt?
Ich hab KEINE AHNUNG wo es hakt :-(
EDIT:
Syntaxfehler in Datum in Abfrageausdruck['abge-rechner]=#111-01-01#'.
hatte 01.01.2011
bzw 2011-01-01
etc eingegeben.
Hallo,
Zitatich habe versucht in der tabelle das datumfeld als yyyy-mm-dd anzeigen zu lassen
Nimm an der Darstellung des Datums in der Tabelle KEINE Änderungen vor.
Das Datumsfeld soll auch als solches deklariert sein - dher ist die Darstellung der eingetragenen Datumswerte in der Tabelle von untergeordneter Bedeutung
analog der FAQ...
Dim SQLDatum as String
SQLDatum = Format(frage, "\#yyyy\-mm\-dd\#")
sql = "UPDATE daten SET daten.status = 'A' WHERE lettercode in (Select distinct [durchf station] from [Reporting - Abgerechnete Daten] where [Abge-rechnet] =" & SQLDatum & ")"
... sollte funktionieren.
p.s.
Wobei zu besachten ist, dass das eingegeben Datum aus einer Inputbox als Text übergeben wird.
Wird bei der Eingabe ein Fehler gemacht und dieser nicht abgefangen kann es wiederum zu Fehlermeldungen kommen.
Ich würde daher vorschlagen den Inhalt der Inputbox zuvor auf einen richtigen Datumswert hin zu prüfen.
In Etwa so:
If IsDate (Inputbox("........) ) Then
....
Else
MsgBox "Es wurde kein gültiges Datum eingegeben!"
End If
juuuheay!
Syntaxfehler ist weg!!
Problem Nummer 1 ist gelöst.
Nur leider wird in der Tabelle Daten immer noch kein A eingetragen. ?!
Das Fenster nach der Datumseingabe schließt sich einfach und es passiert nichts.
Hi,
schau mal nach, ob dieser TEil des Strings einen Datensatz liefert....
(Select distinct [durchf station] from [Reporting - Abgerechnete Daten] where [Abge-rechnet] =" & SQLDatum & ")"
und wenn ja ob es in der zu ändernden Tabelle eine Entsprechung dazu gibt - also der Lettercode existiert.
EDIT:
führe den SQL String so aus ...
db.Execute sql, dbFailOnError
... um etwaige Fehler bei der Ausführung angezeigt zu bekommen
Hallo,
gibt es denn Datensätze mit dem angebenen Datum in Tabelle "Reporting - Abgerechnete Daten" ??
Irgendwo sehe ich eine Diskrepanz zwischen der anfänglich geforderten Monatsangabe zur tatsächlich eingebenen Datumseingabe.... ???
also in der tabelle "daten"
gibt es die spalte "lettercode".
diese entspricht von den inhalten her der spalte "durchf stationen" in der tabelle "Reporting - Abgerechnete Daten"
ich frage mich, warum überhaupt solche fehler auftreten. es halt alles funktioniert, dann wurde aus der datumsangabe jan2012 01.01.2012 gemacht.
jetzt läuft es nicht mehr. sonst wurde nichts geändert, lediglich eine neue funktion hinzugefügt.
wie überrpüfe ich denn ob ein datensatz geliefert wird?
@DF6GL
Ja, Datensätze gibt es ohne Ende im Reporting - abgerechnete Daten.
in der Spalte "abge-rechnet" steht halt das abrechnungsdatum, bspw. 01.05.2012 . Dann soll in dieser Spalte der Regionalcode ausgelesen werden "durchf station" und in der tabelle "daten" bei "status" ein A gesetzt werden. "durchf station" entspricht dem "lettercode"
ich ziehe mir gerade ne aktuelle sicherungskope. muss 10min warten. nach ausführung des sql-error befehls hab ich nen fehler gefunden, an einer ganz anderen stelle....
Hi,
Zitatwie überrpüfe ich denn ob ein datensatz geliefert wird?
in dem du den SQL-String in den SQL-Abschnitt eines neuen Abfrageentwurfs einfügst (Datum natürlich in Reinschrift einfügen und nicht als Variable) und dann die Abfrage auzsführst.
Bekomme jetzt die Fehlermeldung:
"Datentypen in Kriterienausdruck unverträglich"
in dieser Zeile:
DoCmd.OutputTo acOutputReport, "fax stationen - monat", acFormatRTF, "d:\tempo\" & rs!Lettercode & ".rtf", False
EDIT_
das heißt aber, dass es jetzt nur noch ein problem mit dem abspeichern gibt. ;-)
Hi,
Zitatdas heißt aber, dass es jetzt nur noch ein problem mit dem abspeichern gibt
Die Fehlermeldung deutet m.E. eher darauf hin, dass beim Aufruf des Reports was schief geht.
Lässt sich der Report --- fax stationen - monat --- fehlerfrei öffnen?
Wenn nicht, ist der Fehler dort zu suchen.
Also, im Entwurfsmodus lässt es sich öffnen, wenn es ich "normal" öffnen will, bekomme ich auch die Fehlermeldung mit dem Datentypen.
Das merkwürdige ist aber, dass ein anderes Makro auch dadrauf zugreift, und da funktioniert es.
Hallo,
überprüf die Berichtsabfrage, bzw.SQL-String in der Datenherkunft des Berichtes. Dort gibt es ein Defizit mit dem Tabellenfeld-Datentyp und den angegebenen Kriterium.
es gibt ein problem mit der datumsformatierung:
Dim sql As String
sql = "SELECT [Reporting - Abgerechnete Daten].Region, [Reporting - Abgerechnete Daten].[durchf Station]," & _
"[Reporting - Abgerechnete Daten].ART_II , [Reporting - Abgerechnete Daten].Mietvertrag, [Reporting - Abgerechnete Daten].Kennzeichen," & _
"format([Reporting - Abgerechnete Daten].Datum,'dd.mm.yy') as Datum , [Reporting - Abgerechnete Daten].HAENDLER_NAME, [Reporting - Abgerechnete Daten].[Handling-Fee]," & _
"[Reporting - Abgerechnete Daten].Service , [Reporting - Abgerechnete Daten].Distanz, [Reporting - Abgerechnete Daten].[Überführungs-pauschalen]," & _
"[Reporting - Abgerechnete Daten].Tank , [Reporting - Abgerechnete Daten].[Tank - netto], [Reporting - Abgerechnete Daten].[Tank-Haendler]," & _
"[Reporting - Abgerechnete Daten].[Tank-Haendler netto] , [Reporting - Abgerechnete Daten].Wäsche, [Reporting - Abgerechnete Daten].[Wäsche - netto], [Reporting - Abgerechnete Daten].[sonst Kosten], [Reporting - Abgerechnete Daten].[Abge-rechnet], [Reporting - Abgerechnete Daten].Gesamt," & _
"[Reporting - Abgerechnete Daten].[Versicherung], [Reporting - Abgerechnete Daten].[Tank-Haendler netto] + [Reporting - Abgerechnete Daten].[Tank - netto] AS Kraftstoff" & _
" FROM [Reporting - Abgerechnete Daten]" & _
"WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]='" & mon & "'" & _
" Order by kennzeichen, mietvertrag"
Me.RecordSource = sql
'" & ola & "
'" & mon & "
End Sub
Hallo,
nochmal:
welchen DATENTYP (nicht Format) hat das Feld "Abge-rechnet" in der Tabelle?
Lt. dieser SQL hat (muss haben) das Feld den Datentyp TEXT.
Bei Datum/Uhrzeit muss auch hier ein SQL-gültiges Datum(sformat,, USA- oder ISO-Format) angegeben werden:
" WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]=" & Format(mon,"\#yyyy-mm-dd\#") & _
Beachte auch das nötige Leerzeichen vor "Where"
Felddatentyp ist DATUM/UHRZEIT
Werde es jetzt mal in Text ändern
Hallo,
NEIN!!!!!!!!!!!!!!!!!
Wir müssen erst mal manches klarstellen:
Wenn der Datentyp anfänglich TEXT war, dann war das falsch, hat aber möglicherweise durch die "TEXT-Datumswerte" insgesamt mehr oder weniger funktioniert. Wenn mit diesen Risken zu leben ist und nicht an ALLEN betroffenen Stellen in der DB (Abfragen, VBA-Code, Berechnungen im Steuerelementinhalt mancher Textfelder) angepasst werden soll/kann, dann lass es bei Datentyp TEXT. Damit wäre nur der Zusatzcode ensprechend diesen Datentyp zu programmieren. Dadurch ist und bleibt diese latente Fehlersituation vorhanden und kann zu unerwarteten Schwierigkeiten führen.
Wenn mit dem Tabellenfeld und dessen Datentyp "Datum/Uhrzeit" ein "richtiges" Datum mit all seinen Berechnungsmöglichkieten bearbeitet werden soll, das stell ALLE betroffenen Abfragen, Codestellen, usw. auf den Datentyp Datum/Uhrzeit um. Das bedeutet aber eine gründliche Überarbeitung der DB, was aber sich als lohnend herausstellen dürfte.
ok. ging auch nicht :-)
ich habe es bei datum/uhrzeit gelassen
und noch folgendes im bericht hinzugefügt:
Dim SQLDatum As String
SQLDatum = Format(frage, "\#yyyy\-mm\-dd\#")
" WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]=" & Format(mon, " & SQLDatum & ") & _
EDIT:
Syntaxfehler (fehlender Operator) in Abfrageausdruck '[Reporting - abgerechnete Daten].[durchf Station]="and [Reporting - abgerechnete Daten.[abge-rechnet]='.
Hallo,
was soll das :
Dim SQLDatum As String
SQLDatum = Format(frage, "\#yyyy\-mm\-dd\#")
" WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]=" & Format(mon, " & SQLDatum & ") & _
???
hab gerade erst deine längere Antwort gelesen...
Da stand NIE Text! Da stand die ganze Zeit als Felddatentyp DATUM/UHRZEIT !!!
EDIT:
ich dachte er würde durch den SQL Datumssyntax das Datum akzeptieren...Habs wieder raus gemacht.
Na, dann ist diese Stringbehandung des Datums völliger Quatsch und grottenfalsch und der Datentyp richtig....
naja, aber erst dadurch hat es überhaupt angefangen zu funktionieren ?!
jetzt muss ich im bericht noch das Datum irgendwie ändern. Da spinnt er nämlich noch rum
HAllo,
"naja, aber erst dadurch hat es überhaupt angefangen zu funktionieren ?!"
das ist eher ein Trugschluss
"jetzt muss ich im bericht noch das Datum irgendwie ändern. Da spinnt er nämlich noch rum"
bedarf einer näheren Erläuterung
Ok...Moment...Langsam wird es unübersichtlich.
Hier nochmal:
Modul 3 wird als erstes ausgeführt:
Sub send_repots()
Dim frage As String
frage = InputBox("Bitte geben Sie das Datum ein", "Abfrage", , 200, 200)
If frage = "" Then
MsgBox "Fehler!, Eingabe Datum ist Notwendig", vbCritical
Exit Sub
End If
Dim db As Database
Dim rs As Recordset
Dim sql As String
Dim SQLDatum As String
Set db = CurrentDb()
SQLDatum = Format(frage, "\#yyyy\-mm\-dd\#")
sql = "UPDATE daten SET daten.status = Null"
db.Execute (sql)
sql = "UPDATE daten SET daten.status = 'A' WHERE lettercode in (Select distinct [durchf station] from [Reporting - Abgerechnete Daten] where [Abge-rechnet] =" & SQLDatum & ")"
db.Execute sql, dbFailOnError
Call Modul1.sendmails(frage)
Set db = Nothing
End Sub
Das läuft Fehlerfrei durch.
Es wird Modul1.sendmails(frage) aufgerufen.
Sieht so aus:
Sub sendmails(mon1 As String)
'Report erstellen
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim sql As String, telefon As String, mon As String
Dim strEmailTo As String
Dim strSubject As String
Dim strMsgTxt As String
Dim strAttachment As String, strAttachment1 As String, strAttachment2 As String, strAttachment3 As String
'mon = InputBox("Bitte geben Sie den Monat ein", "Abfrage", , 200, 200)
'If (mon = "") Then
' Exit Sub
'End If
mon = mon1
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from europcar where status = 'A'", dbOpenSnapshot)
'If DirExists("D:\tempo\") = False Then
'MkDir ("D:\tempo\")
'End If
While Not rs.EOF
DoCmd.OutputTo acOutputReport, "fax stationen - monat", acFormatRTF, "C:\tempo\" & rs!Lettercode & ".rtf", False
strEmailTo = rs!fax
strSubject = "Test: " & mon & " Satellitenstation: " & rs!Lettercode
strMsgTxt = "Sehr geehrte Damen und Herren," & Chr(13) _
& EMAILTEXT
'strAttachment = "d:\TEST\sat\telefax.rtf"
'strAttachment1 = "d:\TEST\sat\" & rs!lettercode & ".rtf"
' MsgBox strAttachment1
Call Modul2.FnSafeSendEmail(strEmailTo, strSubject, strMsgTxt, "d:\tempo\" & rs!Lettercode & ".rtf")
rs.MoveNext
Wend
Exit Sub
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Hier ist ja ein Verweis auf den Bericht der im Moment wie folgt aussieht:
Private Sub Report_Open(Cancel As Integer)
Dim sql As String
sql = "SELECT [Reporting - Abgerechnete Daten].Region, [Reporting - Abgerechnete Daten].[durchf Station]," & _
"[Reporting - Abgerechnete Daten].ART_II , [Reporting - Abgerechnete Daten].Mietvertrag, [Reporting - Abgerechnete Daten].Kennzeichen," & _
"format([Reporting - Abgerechnete Daten].Datum,'dd.mm.yy') as Datum , [Reporting - Abgerechnete Daten].HAENDLER_NAME, [Reporting - Abgerechnete Daten].[Handling-Fee]," & _
"[Reporting - Abgerechnete Daten].Service , [Reporting - Abgerechnete Daten].Distanz, [Reporting - Abgerechnete Daten].[Überführungs-pauschalen]," & _
"[Reporting - Abgerechnete Daten].Tank , [Reporting - Abgerechnete Daten].[Tank - netto], [Reporting - Abgerechnete Daten].[Tank-Haendler]," & _
"[Reporting - Abgerechnete Daten].[Tank-Haendler netto] , [Reporting - Abgerechnete Daten].Wäsche, [Reporting - Abgerechnete Daten].[Wäsche - netto], [Reporting - Abgerechnete Daten].[sonst Kosten], [Reporting - Abgerechnete Daten].[Abge-rechnet], [Reporting - Abgerechnete Daten].Gesamt," & _
"[Reporting - Abgerechnete Daten].[Versicherung], [Reporting - Abgerechnete Daten].[Tank-Haendler netto] + [Reporting - Abgerechnete Daten].[Tank - netto] AS Kraftstoff" & _
" FROM [Reporting - Abgerechnete Daten]" & _
" WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]=" & Format(mon, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
Me.RecordSource = sql
'" & ola & "
'" & mon & "
End Sub
UND HIER IST EIN FEHLER:
Syntaxfehler (fehlender Operator) in Abfrageausdruck '[Reporting - Abgerechnete Daten].[durchf Stationen]=" and [Reporting - Abgerechnete Daten].[Abge-rechnet]='.
Hallo,
Public Frage as String 'in Modul1
.
.
Call Modul1.sendmails()
.
.
Sub sendmails()
.
.
strSubject = "Test: " & frage & " Satellitenstation: " & rs!Lettercode
" WHERE [Reporting - Abgerechnete Daten].[durchf Station] = '" & ola & "' and [Reporting - Abgerechnete Daten].[Abge-rechnet]=" & Format(frage, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
in modul 3 oder 1?
Als erstes wir 3 aufgerufen, dann 1.
Ich hab das richtig verstanden, dass ich PUBLIC FRAGE AS STRING in den Deklarationen von Modul 1 eintragen soll?
EDIT:
bekomme weiterhin den gleichen syntaxfehler
Hallo,
ja, richtig verstanden.
Wo wird "ola" deklariert und initialisiert?
PS: noch ein (2) Tipp(s): zur Untersuchung solcher Fehlersituationen einen Haltepunkt an geeigneter Codestelle setzen und während dem manuellen Durchfahren des Codes die jeweiligen Variablen-Inhalte auf Plausibilität testen.
Bei Fehlern in zusammengebauten SQl-Strings diesen erst mit Debug.Print in das Direktfenster schreiben, um die Syntax und die eingesetzten Variablenwerte zu testen.
Hey!
Danke. Fühl dich auf ein Bier eingeladen, wenn du in Hamburg bist :-)
debug.print gibt aus, dass der ganze SQL Befehl falsch ist, im Direktfenster wird er genauso dargestellt wie er oben steht.
der SQL Befehl sagt ja in meinem Verständnis aus,
SQL = SELECT 'also Auswahl
[Reporting - abgerechnete Daten].[....] 'VON welcher Tabelle, welche Spalte.
Da sich aber ALLE Spalten in der gleichen Tabelle befinden, könnte man das ganze nicht übersichtlicher gestalten, wenn man
sagt: SELECT * (es sind eh alle Spalten) FROM Reporting - abgerechnete Daten WHERE .....
???
Das wäre doch einfacher. Geht das? Kann mir einer sagen wie? ;-)
Hallo,
Was heißt denn: "der ganze SQL Befehl falsch ist"
"Geht das?"
Du hast die Frage doch selber beantwortet...
sql = "SELECT * FROM [Reporting - Abgerechnete Daten]" & _
" WHERE [durchf Station] = '" & ola & "' and [Abge-rechnet]=" & Format(mon, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
Das beantwortet aber nicht die Frage , was in ola steht und woher das kommt.
'OLA' ist in den Deklarationen von Modul 1 festgelegt:
Global ola As String, mon As String
in der Function massenfax() 'hat mit dem jetzigen Makro eigentlich nichts zu tun, steht folgendes:
ola = rs!Lettercode
Bei Sub sendmails() taucht OLA gar nicht auf.
Schreibe ich es Testhalber mal dazu, dann bekomme ich den Fehler:
Syntaxfehler (fehlender Operator) in Abfrageausdruck '[durchf Station]="AAHZ20' and [Abge-rechnet]='
AAHZ20 ist in dem Fall der erste eintrag in der Spalte "Lettercode" der Tabelle Daten.
Debug.print gibt folgendes aus:
SELECT * FROM [Reporting - Abgerechnete Daten] WHERE [durchf Station] = 'AAHZ20' and [Abge-rechnet]= Order by kennzeichen, mietvertrag
Hallo,
ja, "mon" muss durch "frage" ersetzt werden (vorausgesetzt, die diesbezüglichen Änderungen sind durchgeführt)
sql = "SELECT * FROM [Reporting - Abgerechnete Daten]" & _
" WHERE [durchf Station] = '" & ola & "' and [Abge-rechnet]=" & Format(frage, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
Das habe ich schon gesehen und korrigiert. Ausgabe und Fehlermeldung bleiben die gleichen. ???
Hallo,
hast Du die Funktionen auch von "ganz vorn" ablaufen lassen? Soll heißen die Sub send_repots() aufgerufen?
Ja, hab es komplett neu gestartet. Der Fehler kommt immer wieder.
Der Dubber markiert mir folgende Zeile:
DoCmd.OutputTo acOutputReport, "fax Stationen - Monat", acFormatRTF, "D:\tempo\" & ola & ".rtf", False
Fax Stationen - Monat hat ja den Inhalt:
Private Sub Report_Open(Cancel As Integer)
Dim sql As String
sql = "SELECT * FROM [Reporting - Abgerechnete Daten]" & _
" WHERE [durchf Station] = '" & ola & "' and [Abge-rechnet]=" & Format(Frage, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
Debug.Print sql
Me.RecordSource = sql
'" & ola & "
'" & mon & "
End Sub
Fehlermeldung wie weiter vorne....mit dem Syntax
Sehr merkwürdig das ganze.
Manchmal taucht überhaupt kein Fehler auf, sondern nur die Meldung "Kein aktueller Datensatz", aber nur durch den Debugger.
Das kann jedoch an den Berechtigungen liegen, ein Makro welches defintiv funktioniert liefert die gleiche Meldung bei mir und bei meiner Chefin läuft es.
Muss bis morgen warten um es bei ihr auszuprobieren.
Hallo,
durch die quick&dirty-Methode mit den globalen Variablen kann das zu diesen Effekten führen, wenn kein vernünftiger Error-Handler in jeder(!) Routine eingebaut ist. Bei einem nicht behandelten Fehler verlieren die globalen Variablen ihre Werte...
Ich sagte ja eingangs, der ganze Code gehört völlig überarbeitet.
Hey.
EDIT 2:
so wie es aussieht, müssen im SQL doch alle Spalten einzeln aufgeführt werden, sonst gibt es Probleme, dass sie dem Formular nicht richtig zugeordnet werden.
So sieht es jetzt aus. Müsste passen, oder?
Private Sub Report_Open(Cancel As Integer)
Dim sql As String
sql = "SELECT [Reporting - Abgerechnete Daten].Region, [Reporting - Abgerechnete Daten].[durchf Station]," & _
"[Reporting - Abgerechnete Daten].ART_II , [Reporting - Abgerechnete Daten].Mietvertrag, [Reporting - Abgerechnete Daten].Kennzeichen," & _
"format([Reporting - Abgerechnete Daten].Datum,'dd.mm.yy') as Datum , [Reporting - Abgerechnete Daten].HAENDLER_NAME, [Reporting - Abgerechnete Daten].[Handling-Fee]," & _
"[Reporting - Abgerechnete Daten].Service , [Reporting - Abgerechnete Daten].Distanz, [Reporting - Abgerechnete Daten].[Überführungs-pauschalen]," & _
"[Reporting - Abgerechnete Daten].Tank , [Reporting - Abgerechnete Daten].[Tank - netto], [Reporting - Abgerechnete Daten].[Tank-Haendler]," & _
"[Reporting - Abgerechnete Daten].[Tank-Haendler netto] , [Reporting - Abgerechnete Daten].Wäsche, [Reporting - Abgerechnete Daten].[Wäsche - netto], [Reporting - Abgerechnete Daten].[sonst Kosten], [Reporting - Abgerechnete Daten].[Abge-rechnet], [Reporting - Abgerechnete Daten].Gesamt," & _
"[Reporting - Abgerechnete Daten].[Versicherung], [Reporting - Abgerechnete Daten].[Tank-Haendler netto] + [Reporting - Abgerechnete Daten].[Tank - netto] AS Kraftstoff" & _
" FROM [Reporting - Abgerechnete Daten]" & _
" WHERE [durchf Station] = '" & ola & "' and [Abge-rechnet]=" & Format(Frage, "\#yyyy-mm-dd\#") & _
" Order by kennzeichen, mietvertrag"
Debug.Print sql
Me.RecordSource = sql
'" & ola & "
'" & frage & "
End Sub
EDIT:
Bekomme jetzt die Fehlermeldung 3021 : Kein aktueller Datensatz
Wie gesagt. Ich schaue morgen mal vom PC der Chefin.
HAllo,
ja, sehe gerade, dass da berechnete Spalten drin sind....
Ansonsten musst Du den ausgedruckten SQL-String dahingehend prüfen, ob für "durchf Station" und "Abge-rechnet" je ein Kriterienwert vorhanden ist. ("ola" und "Frage"). Wenn da plausible Werte übergeben werden, dann gibt es in der Tabelle keine passenden Datensätze zu den Kriterienwerten.
durchf Station und abge-rechnet sind in der Tabelle IMMER eingetragen, falls du das meinst.
durchf Station besagt, welche Station für die Abrechnung gemeint ist und abge-rechnet das Abrechnungsdatum. Immer der 01. der Folgemonats.
Ist für alle Einträge in der Tabelle vorhanden.
In der Abfrage gebe ich ja ein Datum ein, d.h. 01.06.2012 bspw, dann soll er mir für ALLE Stationen (ola) die Einträge raussuchen, bei denen abge-rechnet dem eingegebenen Datum entspricht (hier: 01.06.2012) mit den ganzen SQL Angaben, s.o.
Wie überprüfe ich denn den SQL String richtig? Also ob für jede Abfrage etwas ausgegeben wird?
Hallo,
naja, jetzt wird es etwas langatmig...
Zitat"In der Abfrage gebe ich ja ein Datum ein,..."
Du meinst damit die Input-Box? EinE "Anfrage" ist ja was anderes..
ZitatWie überprüfe ich denn den SQL String richtig? Also ob für jede Abfrage etwas ausgegeben wird?
Wie vorher gesagt: Mit Debug.Print den SQL-String in das Direktfenster schreiben und überprüfen, ob die Variablenwerte als Kriterium richtig eingesetzt sind.
Du kannst diesen SQL-String kopieren und im Abfrageentwurf im Fenster "SQL-Ansicht" ablegen. Evtl. in die Entwurfsansicht wechseln. Danach auf das Ausrufezeichen klicken, um die Abfrage auszuführen und die gelieferten Daten inspizieren.
Hey.
Ja, entschuldige bitte, bin komplett neu in dieser Materie und irgendwie echt aufgeschmissen :-(
Das Direktfenster gibt mir folgendes aus:
SELECT [Reporting - Abgerechnete Daten].Region, [Reporting - Abgerechnete Daten].[durchf Station],[Reporting - Abgerechnete Daten].ART_II , [Reporting - Abgerechnete Daten].Mietvertrag, [Reporting - Abgerechnete Daten].Kennzeichen,format([Reporting - Abgerechnete Daten].Datum,'dd.mm.yy') as Datum , [Reporting - Abgerechnete Daten].HAENDLER_NAME, [Reporting - Abgerechnete Daten].[Handling-Fee],[Reporting - Abgerechnete Daten].Service , [Reporting - Abgerechnete Daten].Distanz, [Reporting - Abgerechnete Daten].[Überführungs-pauschalen],[Reporting - Abgerechnete Daten].Tank , [Reporting - Abgerechnete Daten].[Tank - netto], [Reporting - Abgerechnete Daten].[Tank-Haendler],[Reporting - Abgerechnete Daten].[Tank-Haendler netto] , [Reporting - Abgerechnete Daten].Wäsche, [Reporting - Abgerechnete Daten].[Wäsche - netto], [Reporting - Abgerechnete Daten].[sonst Kosten], [Reporting - Abgerechnete Daten].[Abge-rechnet], [Reporting - Abgerechnete Daten].Gesamt,[Reporting - Abgerechnete Daten].[Versicherung], [Reportin
g - Abgerechnete Daten].[Tank-Haendler netto] + [Reporting - Abgerechnete Daten].[Tank - netto] AS Kraftstoff FROM [Reporting - Abgerechnete Daten] WHERE [durchf Station] = 'AAHZ20' and [Abge-rechnet]= Order by kennzeichen, mietvertrag
durchf Station AAHZ20 wird gewählt, das ist der erste Eintrag. Das Datum aus der InputBox wird allerdings nicht eingetragen... :-(
Edit:
OK, bei Kritierien fehlt der Verweis auf das eingebene Datum.
Trage ich dort [Bitte Datum eintragen] ein, so fragt er danach und der Report wird erstellt.
Jetzt muss das ganze "nur" noch das Datum aus der 1. Inputbox nehmen.
Hallo,
ja, dann musst Du eben suchen, warum das so ist.... Die Variable "Frage" muss und darf NUR in einem Standardmodul als
Public Frage As String
deklariert werden. (Als empfehlenswerte Alternative zur globalen Deklaration kann die Variable "Frage" auch als Argument bei der Deklaration der Routinen angegeben werden.
Und wie gesagt: setz einen Haltpunkt auf die Zeile sql = "SELECT [Reporting .................... und überprüf , ob in "Frage" (mit dem Mauszeiger draufzeigen) das Datum drinsteht.
Vielleicht ist es besser, Du lädst die Db mal (gezippt und datenreduziert) hier hoch....
So....habe jetzt mal Schrittweise nachgeguckt.
Folgendes Problem tritt ans Tageslicht.
Im 1. Modul wird anstatt "frage" noch das Datum eingetzt. Im 2. Modul "sendmails" NICHT MEHR!
Das Datum wird nicht weitergegeben.
Hallo,
:'(
WO wird "Frage" deklariert?
Poste doch mal den gesamten Code einschliesslich des Modulkopfes.....
ES LÄUFT!!!!!
Ich habe jetzt einfach die SQLDatums Deklaration Public gemacht und anstatt Frage in den Modulen SQLDatum eingetragen.
Fehler behoben und alles läuft wie es soll!
Herzlichen DANK für die Hilfe!!!!
Und wie gesagt. Bist du in Hamburg -> Fühl dich auf ein Bier eingeladen!!!!
Ok, wird wohl beim "Fühlen" bleiben... ;D
Hauptsache, es läuft jetzt.