Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

An Von/Bis Datumsfunktion gescheitert

Begonnen von iO-usw, Dezember 19, 2014, 15:30:39

⏪ vorheriges - nächstes ⏩

iO-usw

Okay, also folgendes Problem: Ich wollte nur eine langweilige Von/Bis Datumsfunktion einfügen. Aber irgendwie bekomme ich das nicht gebacken. Aber irgendwie bekomme ich die nicht gebacken. Irgendwann kurzfristig hatte die mal geklappt (als ich was aus dem Internet gesaugt hatte) aber da bekam ich keine gültigen Daten, sondern nur Müll (wegen US-Datumsformat??).

Also... ich bin jetzt schon so verzweifelt, das ich einfach Daten in Variablen gepackt habe. Den Datentyp hatte ich auch schon auf Integer oder String, hat aber nie funktioniert. VDatum ist vom (Tabellen)Typ Datum.

'VarDat3 As Date
'VarDat4 As Date
'VarDat3 = "10.10.2011"
'VarDat4 = "01.10.2014"
'CurrentDb.Execute ("INSERT INTO TblSpeicher(Projekt) " & "SELECT * FROM TblEingabe WHERE VDatum BETWEEN '& VarDat3 &' AND '& VarDat4 &'")


EDIT: Also ich bekomme regulär meistens Fehlermeldungen, das die Dateitypen unverträglich sind. Hab auch schon alles mögliche ausprobiert, auch mit string und integer, ohne das ich Erfolg hatte.

MaggieMay

Hallo,

Datumswerte bedürfen für den Einsatz in SQL einer bestimmten Formatierung.
Versuche es mal hiermit:
Dim strSQL As String
strSQL = "INSERT INTO TblSpeicher (Projekt) " & _
              "SELECT * FROM TblEingabe " & _
              "WHERE VDatum BETWEEN " & Format(VarDat3, "\#mm\/dd\/yyyy\#")  & _
                                             " AND " & Format(VarDat4, "\#mm\/dd\/yyyy\#")
CurrentDb.Execute strSQL, dbFailOnError
Freundliche Grüße
MaggieMay

iO-usw

Houston wir haben da ein kleines Problem.

Funktioniert schon, soviel ich überprüfen kann, aber die Daten stimmen nicht. Er hat auch Daten vom 31.03.2014 und ähnliches.

Vielleicht habe ich mich getäuscht, ich wollte aber zeitgleich eine erste Rückmeldung geben. Denn diesen Fehler hatte ich bereits gehabt.

MaggieMay

ZitatEr hat auch Daten vom 31.03.2014 und ähnliches.
Was wunderst du dich denn da, bei der Datumsvorgabe?!  :P
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
wenn da wirklich 31.03.2014oder ähnliches drin steht, kann der Datumsvergleich mit BETWEEN nicht funktionieren, denn das Feld ist dann kein Datumsfeld sondern ein Textfeld unbd es wird Text verglichen was nicht stimmen kann, bzw. nur bei oberflächlicher Prüfung stimmt.
Wenn das Feld vom Typ Datum/Zeit wäre, wäre die Speicherung von 31.03.2014 nicht möglich.
Daher ist es unabdingbar notwendig die Datumswerte zu bereinigen und das Feld auf Datum/Zeit umzustellen. Erst dann können die Daten angefügt werden.
Gruß Klaus

iO-usw

Ich fühlte mich einen Moment blöd, bis ich herausfand, das er auch Daten vom 24.10.2014 anzeigte.

An MzKlMu: Das habe ich ja auch schon gelesen. Die Variablen sind vom Typ Date und das Tabellenfeld auch. (siehe den obigen Code)
Muss ich da irgendwas sonst beachten?

DF6GL

#6
Hallo,


Zitat
VarDat3 As Date
VarDat4 As Date
VarDat3 = "10.10.2011"
VarDat4 = "01.10.2014"

sollte Dir zu denken geben....


So wird es was:


Dim VarDat3 As Date, VarDat4 As Date, strSQL As String

VarDat3 = #10/10/2011#
VarDat4 = #10/01/2014#

strSQL = "INSERT INTO TblSpeicher  " & _
              "SELECT * FROM TblEingabe " & _
              "WHERE VDatum BETWEEN " & Format(VarDat3, "\#mm\/dd\/yyyy\#")  & _
                                             " AND " & Format(VarDat4, "\#mm\/dd\/yyyy\#")
CurrentDb.Execute strSQL, dbFailOnError
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

iO-usw

Hallo DF6GL,
ja es hat mir zu denken gegeben, aber mir fiel nie eine gute Alternative ein.

Außerdem muss ich noch irgendwo einen anderen Fehler haben, weil er keine Änderung in der Tabelle übernimmt.

Ich mache am besten nach Weihnachten weiter...ich wünsche euch noch ein frohes Fest.

DF6GL

Hallo,

siehe meinen korrigierten letzten Post..


wobei "keine Änderungen übernimmt" nicht zu der Insert-Abfrage passt...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
wenn es Datumswerte 31.03.2014 in der Quelltabelle (TblEingabe) gibt, dann kann dieses Feld kein Datumsfeld sein, sondern muss Text sein. Und dann muss zwangsläufig das Kriterium mit BETWEEN schief gehen, denn es wird die reine Zeichenfolge herangezogen.
Nach meiner Auffassung müssen erst mal die Datumswerte so bereinigt werden, dass kein ungültiges Datum in der Quelltabelle vorhanden ist. Unabhängig vom Datentyp der Zieltabelle der natürlich Datum ist.
Gruß Klaus

MaggieMay

#10
Hallo,
Zitat von: MzKlMu am Dezember 19, 2014, 17:02:21wenn es Datumswerte 31.03.2014 in der Quelltabelle (TblEingabe) gibt, dann kann dieses Feld kein Datumsfeld sein
wie kommst du da drauf?

Zitat von: iO-usw am Dezember 19, 2014, 16:23:09die Daten stimmen nicht. Er hat auch Daten vom 31.03.2014 und ähnliches.
Für mich liegt der 31.3.2014 zweifelsfrei in dem von dir gewählten Zeitraum vom 10.10.2011 bis zum 1.10.2014.

Kann es sein, dass das Problem vor dem Monitor sitzt? ;-)
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
sorry, für die Verwirrung. Irgendwie war ich der Meinung der März hätte nur 30 Tage. Meine Beiträge in diesem Thema waren daher grad für die Katz.  ;D
Gruß Klaus

MaggieMay

Aber auch Franz war auf dem falschen Dampfer, denn diese Zeilen sind völlig OK:[color=blue]Dim [/color]VarDat3 As Date
[color=blue]Dim [/color]VarDat4 As Date
VarDat3 = "10.10.2011"
VarDat4 = "01.10.2014"
...einfach mal ausprobieren. ;-)
Freundliche Grüße
MaggieMay

DF6GL

Hallo,


ich finde diese Zeilen nicht ok, sondern für handwerklichen Murks.

Auch wenn Access-VBA durch mehr oder weniger funktionierenden, von sonstigen Windows-Einstellungen abhängigen internen Datentyp-Konvertierungen in diesen Fall den Literal-String in ein gültiges Datum umsetzen kann.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ebs17

Den Hinweis von Franz kann man nur dick unterstreichen.

Wenn in einem englischen Code (VBA ist nun mal so) eine Date-Variable mit einem Text bedient wird, der ein deutsches Datumsformat enthält, ist das grundsätzlich ein Fehler.
Wenn Access/VBA hier zu Fehlertoleranz fähig ist und für sich einen gültigen Wert erzeugt, mag das für einige schön sein, es ist aber auch leichtfertig:
a) Bei solchen Interpretationen in gewissen Konstellationen können durchaus mal Tag und Monat getauscht sein, so dass zwar gültige, aber falsche Datumswerte entstehen.
b) Wie es schon öfter vorgekommen ist: Über eine neue Accessversion oder auch ein Servicepack oder auch schon ein Hotfix kann die vorhandene Fehlertoleranz eingeschränkt oder abgebaut werden.
Die Situation, dass ein immer funktionierender Code "plötzlich und unerwartet" mit Fehler reagiert, ist sehr unangenehm und bei der Fehlersuche anstrengend.
=> "Ruinen können vom Krieg erzählen."

Schwieriger und länger ist die von Franz verwendete korrekte Variante nun auch nicht.
Nebenbei ist dann SQL etwas strikter im Umgang mit Datentypen und verwendeten Formaten.
Mit freundlichem Glück Auf!

Eberhard