|
VBA und SQL Datum (und andere Felddatentypen)
|
| Autor |
Nachricht |
lothi
c#, .Net
Verfasst am: 05. März 2004, 15: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, 11: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, 13: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, 11: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, 18: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: 03. März 2007, 00: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, 19:06, insgesamt einmal bearbeitet |
|
Tom2002
Der einzig Wahre Leuchtturm - Pilsum

Verfasst am: 27. Mai 2008, 10: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, 23: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: 28. Mai 2008, 00: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: 28. Mai 2008, 00: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, 11: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, 05: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 Programmierung / VBA: Iterator für SQL Query Ergebnisse |
3 |
Peter_84 |
123 |
26. Mai 2010, 20:12 KlausMz  |
 |
Access Programmierung / VBA: Insert Into mit Angabe von Uhrzeit und Datum |
2 |
user5 |
755 |
30. Jul 2009, 14:52 user5  |
 |
Access Tabellen & Abfragen: Aktuelles Datum + 10 Tage voraus auswerten |
2 |
adular |
643 |
24. Jun 2009, 09:52 adular  |
 |
Access Tabellen & Abfragen: mit SQL Zwischensummen erstellen? |
1 |
Tobias2009 |
321 |
20. Feb 2009, 22:58 Thomas2007  |
 |
Access Tabellen & Abfragen: Hilfe bei Inklusionsverknüpfung bzw. SQL |
0 |
nickchanger |
713 |
26. März 2008, 17:57 nickchanger  |
 |
Access Formulare: Datum zerlegen und filtern |
12 |
jonnyb2006 |
920 |
19. Okt 2007, 14:20 Willi Wipp  |
 |
Access Hilfe: Sonderzeichen aus einem sql File entfernen |
4 |
Stephan_Peters |
411 |
12. Sep 2007, 09:31 Stephan_Peters  |
 |
Access Tabellen & Abfragen: Ich bekomm es einfach nicht hin....Probleme mit SQL |
30 |
Mirage |
1438 |
28. Jun 2007, 14:19 Willi Wipp  |
 |
Access Tabellen & Abfragen: Spalten zusammenführen mit SQL |
2 |
HGU |
3749 |
23. Okt 2006, 20:01 HGU  |
 |
Access Programmierung / VBA: Datum vergleichen mit SQL in Recordset |
3 |
Joyce |
2786 |
23. Okt 2006, 11:04 Nouba  |
 |
Access Tabellen & Abfragen: Problem mit SQL Abfrage |
6 |
olliminator |
411 |
05. Sep 2006, 12:05 olliminator  |
 |
Access Programmierung / VBA: SQL Abfrage mit VBA ausführen |
1 |
azwinzds |
619 |
25. Aug 2006, 00:25 alf_2006  |
| |
|