|
VBA und SQL Datum (und andere Felddatentypen)
|
| Autor |
Nachricht |
lothi
c#, .Net
Verfasst am: 05. März 2004, 14:26 Rufname:
Wohnort: Birgisch
|
|
| |
|
Hallo
Wie jeder weiss muss man das Datum in VBA in das amerikanische Datumsformat umformatieren sonst bekommt man ja eine Fehlermeldung.
Um nicht immer bei jedem SQL String im Projekt das Datum neu zu formatieren kann man in einem Modul eine Funktion anlegen die das Datum formatiert.
| Code: | 'varDatum zu formatierendes Datum
'Aufruf: "SELECT * FROM Tabelle WHERE datDatum = " & fcDatSQL(Me!SuchDatum)
Public Function fcDatSQL(vardatum As Variant) As String
' wandelt ein Datum vom deutschen Datumsformat
' in einen String im VBA-Format für SQL-Anweisungen um
If IsDate(vardatum) Then
' fcDatSQL = Format(CDate(vardatum), "\#mm\/dd\/yyyy\#")
fcDatSQL = Format(CDate(vardatum), "\#yyyy-mm-dd\#")
End If
End Function |
Kein grosser Tip aber spart Tiparbeit
_________________ Gruss Lothi, der Bastler
Feedback ist die beste Möglichkeit mir zu sagen ob die Antwort geholfen hat!
AC2002, WinXP, Office XP
|
|
Gast
Verfasst am: 08. Okt 2004, 10:03 Rufname:
|
| |
| |
|
Wie sieht das mit Datum UND Uhrzeit aus
| Code: | | fcDatSQL = Format(CDate(vardatum), "\#yyyy-mm-dd hh:nn:ss\#") |
|
|
lothi
c#, .Net
Verfasst am: 08. Okt 2004, 12:45 Rufname:
Wohnort: Birgisch
|
|
| |
|
Hallo
So sollte es funktionieren. Aber es ist besser wenn man mit Sekunden arbeitet auf den Zahlenwert des Datums zurückzugreifen. Die Funktion wird gebraucht um das Datum SQL-Konform als Kriterium an die Abfrage zu übergeben. Das die Daten korrekt angezeigt werden müssen die die Sekunden natürlich stimmen.
_________________ Gruss Lothi, der Bastler
Feedback ist die beste Möglichkeit mir zu sagen ob die Antwort geholfen hat!
AC2002, WinXP, Office XP
|
|
Willi Wipp
Moderator

Verfasst am: 31. Jan 2005, 10:02 Rufname:
Wohnort: Raum Wiesbaden
|
|
| |
|
Nachfragen zum Thema bitte hier VBA und SQL Datum Nachgefragt stellen.
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
|
|
faßnacht(IT);
www.Office-Loesung.de Administrator

Verfasst am: 02. März 2007, 17:50 Rufname: Peter
Wohnort: Mainz-Kastel
|
| |
| |
|
Hallo
eine gute Möglichkeit mit einem Datum in SQL umzugehen ist auf das Formatieren als Zahl. Das geht so:
| Code: | | Str(CDbl(varDatum)) | Wichtig ist dabei die Verwendung von Str. So ist sichergestellt, dass das Trennzeichen SQL-kompatibel als Punkt zurückgegeben wird. Verwendet man Val oder CStr kommt im SQL ein Komma an und daraus folgen Probleme.
Viele Grüße
Peter
|
|
Willi Wipp
Moderator

Verfasst am: 02. März 2007, 23:45 Rufname:
Wohnort: Raum Wiesbaden
|
|
| |
|
Hi Peter,
auch ein schoener Tipp, wobei man Int verwenden sollte wenn man nur das Datum haben will.
Sonst wird eine eventuell vorhandene Zeit (Nachkomma-Teil) mit verwendet.
Achtung bei CLng (ZLng) wird gerundet was zu unerwuenschten Ergebnissen fuehren kann!
PS: Bei inte besteht das Problem das Access da ein Datum im gewaehlten Format zurueckliefert
==> CLng(Int(varDatum))
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Zuletzt bearbeitet von Willi Wipp am 31. Mai 2008, 18:06, insgesamt einmal bearbeitet |
|
Tom2002
Der einzig Wahre Leuchtturm - Pilsum

Verfasst am: 27. Mai 2008, 09:46 Rufname:
Wohnort: Düsseldorf
|
|
| |
|
Moin,
DateValue() und TimeValue() sind auch sehr hilfreich.
Dabei kann auch auf die Umwandlung des Datumsfeldes
| Code: | | Format(CDate(vardatum), "\#mm\/dd\/yyyy\#" | verzichtet werden.
Ciao
Tom
_________________ WinXp Prof., Win2003 Server, Office 2003 Prof
Wer mit Fortuna Düsseldorf groß geworden ist, der fürchtet sich auch vor Access nicht.
Die Nutzlosikgeit des Daseins anzuerkennen heisst, Fortuna-Fan zu sein.
|
|
Willi Wipp
Moderator

Verfasst am: 27. Mai 2008, 22:57 Rufname:
Wohnort: Raum Wiesbaden
|
|
| |
|
Hi Tom2002,
dafuer muessen die Funktionen aber im SQL-String verwendet werden.
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
|
|
Tom2002
Der einzig Wahre Leuchtturm - Pilsum

Verfasst am: 27. Mai 2008, 23:03 Rufname:
Wohnort: Düsseldorf
|
|
| |
|
Moin,
ja wie jetzt?? verstehe ich nicht ???
Erkläre das doch mal für einen blonden Menschen
Ciao
Tom
_________________ WinXp Prof., Win2003 Server, Office 2003 Prof
Wer mit Fortuna Düsseldorf groß geworden ist, der fürchtet sich auch vor Access nicht.
Die Nutzlosikgeit des Daseins anzuerkennen heisst, Fortuna-Fan zu sein.
|
|
Willi Wipp
Moderator

Verfasst am: 27. Mai 2008, 23:42 Rufname:
Wohnort: Raum Wiesbaden
|
|
| |
|
Hi Tom2002,
| lothi - 05. März 2004, 15:26 hat folgendes geschrieben: | | Code: | 'varDatum zu formatierendes Datum
'Aufruf: "SELECT * FROM Tabelle WHERE datDatum = " & fcDatSQL(Me!SuchDatum) | ... | Alle anderen Varianten in diesem Thema sind in der Lage den aufbereiteten Wert in den SQL-String zu uebergeben.
Bei Deiner Variante muss die Funktion innerhalb des SQL-Strings verwendet werden.
| Code: | | strSQL = "SELECT * FROM Tabelle WHERE datDatum = DateValue(" & Me!SuchDatum & ")" | Der Hinweis sollte nur die andere Herangehensweise verdeutlichen.
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
|
|
MAPWARE
Access Profi(l)neurotiker
Verfasst am: 28. Mai 2008, 10:22 Rufname:
Wohnort: Hannover
|
|
| |
|
Hallo,
diese Herangehensweise bedeutet aber auch, das die DateValue Funktion ein Teil des SQL String wird. Bei Umstellung auf einen SQL Server per verknüpfte Tabellen rächt sich das dann sofort. Access erkennt, das DateValue keine vom SQL Server unterstützte Funktion ist, und anstatt gezielt gefilterte Daten vom SQL Server anzufordern, führt Access ein SELECT auf die gesamte Tabelle ohne Filter durch. Das wiederum löst einen TableScan (der Verzicht auf die Nutzung von Indizes) auf dem SQL Server aus. Danach filtert Access die Daten auf dem Client und gibt die passenden Datensätze aus. Ineffizienter gehts nun wirklich nicht, und solche Effekte haben in der Vergangenheit die Nutzung von Access als Client für Datenbankanwendungen bei "richtigen" Programmierern diskreditiert.
Schlimmer aber noch ist die Wandlung eines Datums in eine Zahl. Denn dann unterstelle ich, das alle Datenbanken dasselbe Startdatum benutzen. Und das stimmt nicht.
MS SQL Server 2000/2005:
| Code: | | SELECT Convert(Int,GetDate()) | liefert heute am 28.05.08 39594
VBA
| Code: | | Debug.Print CLng(Now()) | liefert 39596
Fazit. Bitte weiterhin die fcDatSQL Funktion wie beschrieben einsetzen.
_________________ Grüße
Marcus
Wer Controls nicht sinnvoll benennt, wird es später bereuen.
|
|
Willi Wipp
Moderator

Verfasst am: 09. Jan 2009, 04:20 Rufname:
Wohnort: Raum Wiesbaden
|
| |
| |
|
Hi Folks,
angelehnt an BuildCriteria hier noch eine allgemeinere Version fuer eine Grosszahl der Datentypen
| Code: | Public Function FnstrFormat4SQL(varValue As Variant, _
lngDataType As Long) As String
If IsNull(varValue) Then
FnstrFormat4SQL = "Null"
Else
Select Case lngDataType
Case dbBoolean
FnstrFormat4SQL = IIf(varValue, "True", "False")
Case dbByte, dbCurrency, dbDouble, dbInteger, dbLong, dbSingle
FnstrFormat4SQL = Str(varValue)
Case dbMemo, dbText
FnstrFormat4SQL = "'" & Replace(varValue, "'", "''") & "'"
Case dbDate
FnstrFormat4SQL = "#" & Format(varValue, "yyyy-mm-dd") & "#"
End Select
End If
End Function |
Bei der Verwendung in WHERE und HAVING Klauseln ist zu beachten das bei Null-Werten
der Operator nicht automatisch angepasst wird!
Wie bei BuildCirteria muss man das in der Regel separat abfangen und z.B. = durch Is ersetzen!!
| Code: | ? BuildCriteria("a", dbLong, "=" & Null)
'==> Fehlermeldung, aber immerhin
? BuildCriteria("a", dbLong, "=Null")
a Is Null
'==> fuer BuildCriteria passt dann etwa
? BuildCriteria("a", dbLong, "=" & Nz(Null, "Null"))
a Is Null |
_________________ Eine kurze Rueckmeldung waere nett
SL Willi Wipp
(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Access Formulare: Im Formular nach Datum Sortieren |
4 |
alexander912 |
114 |
18. Feb 2010, 13:15 alexander912  |
 |
Access Formulare: Kalenderwoche von Datum |
4 |
Gast |
515 |
04. Aug 2009, 15:52 M. Andree  |
 |
Access Tabellen & Abfragen: DS immer mit dem aktuellsten Datum selektieren |
2 |
Daniel1979 |
208 |
28. Jul 2009, 09:14 Daniel1979  |
 |
Access Programmierung / VBA: Löschabfrage sql |
3 |
frqas |
204 |
23. Apr 2009, 10:53 SaschaR  |
 |
Access Tabellen & Abfragen: Datum Anfang-Ende mit Bedingung |
7 |
Gast |
207 |
01. Feb 2009, 19:16 Gast  |
 |
Access Tabellen & Abfragen: Inhalte aus SQL in Access-Tabelle einbinden |
0 |
Avhaline |
611 |
14. Okt 2008, 07:41 Avhaline  |
 |
Access Formulare: Nach Datum (Jahr) Abfragen |
8 |
Freeman_GER |
1725 |
11. Feb 2008, 15:23 Freeman_GER  |
 |
Access Programmierung / VBA: Sql "like" lange suchdauer |
7 |
Bennxe |
404 |
20. Dez 2007, 15:17 lleopard  |
 |
Access Tabellen & Abfragen: SQL count/group by Problem |
0 |
Larouso |
2339 |
16. Nov 2007, 09:35 Larouso  |
 |
Access Programmierung / VBA: SQL ORDER BY |
6 |
Darkness |
1317 |
15. Apr 2007, 11:52 Willi Wipp  |
 |
Access Tabellen & Abfragen: Uhrzeit mit Datum subtrahieren |
1 |
magnum |
404 |
16. März 2007, 11:10 Nouba  |
 |
Access Tabellen & Abfragen: SQL, Probleme bei Abgleich 2er Tabellen und JOINs |
4 |
ShreksEsel |
609 |
28. Feb 2007, 22:11 Willi Wipp  |
| |
|