MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access - Code Archiv
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 06.12.2014, 15:40   #1
ebs17
MOF Guru
MOF Guru
Standard Grundlagen - SQL ist leicht (5) - Datentypbehandlung für VBA

In einer Datenbank werden Daten geordnet und strukturiert abgelegt. Ehe Daten eingetragen oder dann verarbeitet werden können, müssen zuerst Tabellen und darin Felder definiert werden. Eine der obligatorischen Definitionen ist ein Datentyp pro Feld. Dadurch, dass eben durch Felddefinition und Eigenprüfung z.B. in einem Datumsfeld nur gültige Datumswerte eingetragen werden können und nicht irgendwelche Striche, Punkte, Texte, wird das Ganze erst massentauglich verarbeitbar - durch Regulierung kann man sich schon einmal auf etwas verlassen.

Es ist daher augenscheinlich, dass einem der Begriff DATENTYP und dessen Inhalt als eines der grundlegenden Elemente in der Datenbankarbeit unbedingt auch in der praktischen Anwendung vertraut sein sollten: Die intuitive Unterscheidung zwischen Text (String) und Datum (Date), zwischen Ganzzahl (Long Integer, Integer) und Dezimalzahl (Double, Currency, Single, Decimal) sollte geläufig sein, ebenso der Unterschied zwischen Datentyp und FORMAT (Darstellungsform des Wertes).

Wenn man nun per VBA äußere Werte (aus Variablen, Arrayfeldern, Formularsteuerelementen) in eine SQL-Anweisung einbringen will, hat man nun bei Nichtbeachtung der Datentypen besonders viele Fehler zu erwarten, weil gerade da eine strikte Erwartung an eingesetzte Formate besteht.
Typische Fälle:
Code:

xy = DLookup("FeldX", "TabelleY", "FeldZ = " & Me.txtZZ)

Me.RecordSource = "SELECT FeldX FROM TabelleY WHERE FeldZ = " & vZZ

CurrentDb.Execute "INSERT INTO TabelleY(FeldZZ) VALUES(" & arrZZ(0) & ")"
Bei den ersten beiden Fällen (Filterung) gibt es eine Reihe von Hilfsfunktionen bis Klassen, die aber für den dritten Fall (Werteinfügung in Tabelle) i.d.R. keine Lösung anbieten.
Universeller und einfach in der Anwendung ist die folgende Funktion, mit der man solche äußeren Werte SQL-tauglich verarbeiten kann:
Code:

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
                    If Fix(Expression) = Expression Then
                        cSql = Format(Expression, "\#yyyy-mm-dd\#")
                    Else
                        If Fix(Expression) = 0 Then
                            cSql = Format(Expression, "\#hh:nn:ss\#")
                        Else
                            cSql = Format(Expression, "\#yyyy-mm-dd hh:nn:ss\#")
                        End If
                    End If
                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
Die beigefügte Demo-DB verdeutlicht die Anwendung. Viel Spaß bei der Anwendung.
Angehängte Dateien
Dateityp: zip SQL_Datatype.zip (56,1 KB, 38x aufgerufen)

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.