Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: ---> 4. September: Office-Treffen Rhein-Ruhr <-
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, 15: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, 11: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, 13: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, 11: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, 18: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:
03. März 2007, 00: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, 19:06, insgesamt einmal bearbeitet
Tom2002
Der einzig Wahre Leuchtturm - Pilsum


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

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