Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office 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 Facebook-Likes 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


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 Int 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 28. März 2013, 14:20, insgesamt 2-mal 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

_________________
Win7, Win2008 R2, Office 2010 Prof

Wer mit Fortuna Düsseldorf groß geworden ist, der fürchtet sich auch vor Access nicht.
Die Nutzlosigkeit 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

_________________
Win7, Win2008 R2, Office 2010 Prof

Wer mit Fortuna Düsseldorf groß geworden ist, der fürchtet sich auch vor Access nicht.
Die Nutzlosigkeit 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:
06. Aug 2008, 17:12
Rufname:
Wohnort: Hannover

SQL Datentypen in VBA, Abfragestrings und WHERE Statements - SQL Datentypen in VBA, Abfragestrings und WHERE Statements

Nach oben
       Version: Office 2k (2000)

MAPWARE am 28. Mai 2008 um 11:22 hat folgendes geschrieben:
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.

Hallo,

anbei eine allgemeine Funktion, die man nutzen kann, um VBA Datentypen korrekt in SQL Strings zu verwenden. Insbesondere die ewige Thematik der einfachen Anführungszeichen bei Textfeldern und die Sonderformate für das Datum, aber auch bei Ja/Nein Feldern und Zahlen sind abgedeckt. Standardmäßig wird der übergebene Parameter als SQL-Text Bedingung zurückgeliefert, die anderen Datentypen können angegeben werden.

Beispiele:
Code:
Debug.Print cSQL("Marcus")
'Marcus'
Debug.Print cSQL("unser's Gaststübchen's")
'unser''s Gaststübchen''s'
Debug.Print cSQL(Now, vbDate)
#08/06/2008#
Debug.Print cSQL("24.12.2008", vbDate)
#12/24/2008#
Debug.print cSQL(-1, vbBoolean)
True
Debug.Print cSQL(False, vbBoolean)
False
Debug.Print cSQL(1.23456, vbDouble)
 1.23456
Zum Beispiel in Suchen.
Code:
    strSQL = "SELECT Spalte FROM Tabelle " & _
              "WHERE Nachname=" & cSQL(Me!txtNachname)
oder mal in einer anderen Variante
Code:
    strSQL = "SELECT Spalte FROM Tabelle " & _
              "WHERE Nachname={Nachname} " & _
                "AND GDatum Between {Start} And {Ende}"
    strSQL = Replace(strSQL, "{Nachname}", cSQL(Me!txtNachname))
    strSQL = Replace(strSQL, "{Start}", cSQL(Me!cboStart, vbDate))
    strSQL = Replace(strSQL, "{Ende}", cSQL(Me!cboEnde, vbDate))
So bleibt das SELECT leserlich und ich verzweifele nicht an den &'&""&'"& Kombos 8)
hier nun die eigentliche Funktion:
Code:
Option Compare Database
Option Explicit

Public Function cSql(Expression As Variant, _
                     Optional VariableType As VbVarType = vbString) As String
    If IsNull(Expression) Or Expression = vbNullString Then
        cSql = "NULL"
      Else
        Select Case VariableType
          Case vbString
            If InStr(1, Expression, "'") <> 0 Then
                cSql = "'" & Replace(CStr(Expression), "'", "''") & "'"
              Else
                cSql = "'" & CStr(Expression) & "'"
            End If
          Case vbDecimal, vbCurrency, vbDouble, vbSingle, vbLong, vbInteger
            If IsNumeric(Expression) Then
                cSql = Str(Expression)
              Else
                cSql = CStr(Expression)
            End If
          Case vbDate
            If IsDate(Expression) Then
                cSql = Format(CDate(Expression), "\#mm\/dd\/yyyy\#")
' Alternativ
'               cSql = Format(CDate(Expression), "\#yyyy-mm-dd\#")
              Else
                cSql = CStr(Expression)
            End If
          Case vbBoolean
            If IsNumeric(Expression) Then
                If CBool(Expression) Then
                    cSql = "True"
                  Else
                    cSql = "False"
                End If
              Else
                Select Case Expression
                  Case "Ja", "Wahr", "True", "Yes"
                    cSql = "TRUE"
                  Case Else
                    cSql = "FALSE"
                End Select
            End If
          Case Else
            cSql = Expression
        End Select
    End If
End Function

_________________
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
       

Willi Wipp am 07. Aug 2008 um 03:54 hat folgendes geschrieben:
Hi MAPWARE,

sehr schoener Ansatz und noch besser als BuildCriteria Wink

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 BuildCriteria 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 Tabellen & Abfragen: Datum in Zahl umwandeln 2 Lorenz 1018 01. Sep 2004, 18:45
Lorenz Datum in Zahl umwandeln
Keine neuen Beiträge Access Tabellen & Abfragen: Mehrfachauswahl aus Listenfeld kombiniert mit SQL IN (...) 2 SMArmageddon 2418 01. Sep 2004, 15:07
SMArmageddon Mehrfachauswahl aus Listenfeld kombiniert mit SQL IN (...)
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage nach heutigem / aktuellen Datum 1 MeWe 879 31. Aug 2004, 14:57
TommyK Abfrage nach heutigem / aktuellen Datum
Keine neuen Beiträge Access Tabellen & Abfragen: Datum überprüfen 4 Gast 1077 30. Aug 2004, 13:11
borstel Datum überprüfen
Keine neuen Beiträge Access Tabellen & Abfragen: Time für Datum 0 meener 666 11. Aug 2004, 18:52
meener Time für Datum
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Hilfe wegen Datum 1 Mongospliff 670 03. Aug 2004, 14:07
Willi Wipp Hilfe wegen Datum
Keine neuen Beiträge Access Tabellen & Abfragen: Verschachtelte SQL Abfragen in ACCESS 2000? 1 Gast 1783 17. Jul 2004, 22:34
faßnacht(IT); Verschachtelte SQL Abfragen in ACCESS 2000?
Keine neuen Beiträge Access Tabellen & Abfragen: nur datensatz mit jüngstem datum ausgeben 2 Mordred 2200 16. Jul 2004, 17:10
Mordred nur datensatz mit jüngstem datum ausgeben
Keine neuen Beiträge Access Tabellen & Abfragen: Spezielle SQL Abfrage 4 P-Air 1272 13. Jul 2004, 16:26
Gast Spezielle SQL Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: SQL Abfragen ausgeben?? 2 woerny01 670 11. Jul 2004, 07:10
Gast SQL Abfragen ausgeben??
Keine neuen Beiträge Access Tabellen & Abfragen: SQL Abfrage 2 tocotronicx 976 25. Jun 2004, 15:32
Gast SQL Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage für aktuelles Datum 1 Gast 669 05. Jun 2004, 22:38
stpimi Abfrage für aktuelles Datum
 

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