Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: ---> Neu: Office 2010 Forum <-
VBA und SQL Datum (und andere Felddatentypen)
zurück: Abhaengige Kombinationsfelder weiter: Serienbrief über Access aufrufen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
lothi
c#, .Net


Verfasst am:
05. März 2004, 14:26
Rufname:
Wohnort: Birgisch

VBA und SQL Datum (und andere Felddatentypen) - VBA und SQL Datum (und andere Felddatentypen)

Nach oben
       

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 Very Happy

_________________
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:


Noch eine Frage dazu - Noch eine Frage dazu

Nach oben
       

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

AW: VBA und SQL Datum - AW: VBA und SQL Datum

Nach oben
       

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

Re: VBA und SQL Datum (II) - Re: VBA und SQL Datum (II)

Nach oben
       

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


Datum als Zahl formatieren - Datum als Zahl formatieren

Nach oben
       

Hallo Smile

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

Re: VBA und SQL Datum (III) - Re: VBA und SQL Datum (III)

Nach oben
       

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

AW: VBA und SQL Datum - AW: VBA und SQL Datum

Nach oben
       

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

Re: VBA und SQL Datum (IV) - Re: VBA und SQL Datum (IV)

Nach oben
       

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

AW: VBA und SQL Datum - AW: VBA und SQL Datum

Nach oben
       

Moin,

ja wie jetzt?? verstehe ich nicht ???

Erkläre das doch mal für einen blonden Menschen Laughing

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

Re: VBA und SQL Datum (V) - Re: VBA und SQL Datum (V)

Nach oben
       

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

AW: VBA und SQL Datum - DateValue, Int, CLng - AW: VBA und SQL Datum - DateValue, Int, CLng

Nach oben
       

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


Re: VBA und SQL Datum (VI) - Re: VBA und SQL Datum (VI)

Nach oben
       

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)
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

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

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: PHP JavaScript