Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: virility am Juli 09, 2012, 11:16:41

Titel: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 09, 2012, 11:16:41
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
Titel: Re: Datentypen Fehler
Beitrag 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:

<<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)
Titel: Re: Datentypen Fehler
Beitrag von: Jonny am Juli 09, 2012, 11:37:04
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
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 11:44:36
Hallo,

weiterhin muss bei der Inputbox geprüft werden, ob "Abbruch" geklickt wurde... 
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 11:49:43
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 Sub



Das 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 :-/
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 12:09:00
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

Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 12:16:56
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. !
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 12:37:06
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.
Titel: Re: Datentypen Fehler
Beitrag von: database am Juli 09, 2012, 13:27:33
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)
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 13:43:48
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.

Titel: Re: Datentypen Fehler
Beitrag von: Jonny am Juli 09, 2012, 13:49:17
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
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 13:56:35
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.
Titel: Re: Datentypen Fehler
Beitrag von: database am Juli 09, 2012, 13:59:25
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
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 14:06:55
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.
Titel: Re: Datentypen Fehler
Beitrag von: database am Juli 09, 2012, 14:09:44
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

Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 14:10:52
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.... ???
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 14:19:38
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"
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 14:22:32
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....
Titel: Re: Datentypen Fehler
Beitrag von: database am Juli 09, 2012, 14:23:00
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.
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 14:28:40
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. ;-)
Titel: Re: Datentypen Fehler
Beitrag von: database am Juli 09, 2012, 14:58:56
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.
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 15:05:29
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.
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 15:11:47
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.
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 15:28:43
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
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 15:41:59
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"
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 15:45:36
Felddatentyp ist DATUM/UHRZEIT

Werde es jetzt mal in Text ändern
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 15:47:40
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.



Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 15:51:56
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 & ") & _
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 15:53:45

EDIT:

Syntaxfehler (fehlender Operator) in Abfrageausdruck '[Reporting - abgerechnete Daten].[durchf Station]="and [Reporting - abgerechnete Daten.[abge-rechnet]='.
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 16:02:23
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 & ") & _


???
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 16:03:27
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.
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 16:05:36
Na, dann ist diese Stringbehandung des Datums völliger Quatsch und grottenfalsch und der Datentyp richtig....

Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 16:08:53
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
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 16:11:14
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
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 16:19:26
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]='.
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 16:37:26
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"

Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 09, 2012, 16:47:11
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
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 09, 2012, 18:33:21
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.
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 10, 2012, 08:52:43
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? ;-)
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 10, 2012, 09:05:25
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.
Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 10, 2012, 09:18:25
'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

Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 10, 2012, 09:24:41
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"

Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 10, 2012, 09:26:19
Das habe ich schon gesehen und korrigiert. Ausgabe und Fehlermeldung bleiben die gleichen.  ???
Titel: Re: Datentypen Fehler
Beitrag von: DF6GL am Juli 10, 2012, 10:00:23
Hallo,


hast Du die Funktionen auch von "ganz vorn" ablaufen lassen?  Soll heißen die Sub   send_repots()    aufgerufen?


Titel: Re: Datentypen Fehler
Beitrag von: virility am Juli 10, 2012, 10:14:28
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
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 10, 2012, 10:25:06
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.
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 10, 2012, 10:29:09
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.

Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 10, 2012, 10:38:09
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.
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 10, 2012, 15:15:04
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.
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 11, 2012, 09:44:32
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?
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 11, 2012, 10:20:37
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.

Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 11, 2012, 10:30:40
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... :-(
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 11, 2012, 10:38:05
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.
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 11, 2012, 10:40:54
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....
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 11, 2012, 10:53:49
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.
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 11, 2012, 10:56:43
Hallo,


:'(


WO wird "Frage" deklariert?

Poste doch mal den gesamten Code einschliesslich des Modulkopfes.....
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: virility am Juli 11, 2012, 11:12:35
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!!!!
Titel: Re: Datentypen Fehler - Syntaxfehler
Beitrag von: DF6GL am Juli 11, 2012, 11:29:34
Ok, wird wohl beim "Fühlen" bleiben...   ;D


Hauptsache, es läuft jetzt.