Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0202: SQL Strings für Access generieren

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Datenbanken und XML

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Datenbanken, SQL, Access

Der Vorschlag wurde erstellt am: 22.02.2008 17:28.
Die letzte Aktualisierung erfolgte am 25.02.2008 09:31.

Zurück zur Übersicht

Beschreibung  

bei der Erstellung von SQL Anweisungen muss insbesondere bei Update und Insert sehr sorgfältig vorgegangen werden. Diese Klasse unterstützt die aufwendige Schreiberei und Konvertiererei, in diesem Fall erstellt für Access.mdbs. Bei einem Wechsel der Datenbank kann die Klasse getauscht werden (andere Darstellung von Datetime).

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [11,86 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ------ Anfang Projektdatei SQL_Strings_Access.vbproj  ------
' ----------- Anfang Datei clsSQLStringsAccess.vb  -----------
' -----------------------------------------------
'  clsSQLStringsAccess     VB2005
'  Klasse zur Erstellung von SQL Anweisungen für
'  Select, Insert, Update
'
'  Autor:      peter.k.sauer@web.de
'  created:    22.02.2008
' -----------------------------------------------

Public Class clsSQLStringsAccess

    Private colFieldNames As New List(Of String)
    Private colFieldValues As New List(Of String)

    ''' <summary>
    ''' erstellt neue Field- Value-Collection für Insert, Update
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub FldListNew()

        colFieldNames.Clear()
        colFieldValues.Clear()

    End Sub

    ''' <summary>
    ''' fügt Field-Name und -Value zur Collection hinzu
    ''' </summary>
    ''' <param name="FieldName">Name DB Feld</param>
    ''' <param name="FieldValue">Feld Value</param>
    Public Sub FldListAdd(ByVal FieldName As String, ByVal FieldValue As String)

        colFieldNames.Add(FieldName)
        colFieldValues.Add(FieldValue)

    End Sub

    ''' <summary>
    ''' Field- und ValueList drucken
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub FldListDebugPrint()

        Debug.Print("colFieldNames: colFieldValues")

        For i As Integer = 0 To colFieldNames.Count - 1
            Debug.Print(colFieldNames(i).ToString & ": " & colFieldValues(i).ToString)
        Next

    End Sub

    ''' <summary>
    ''' liefert einen String für SQL Insert
    ''' </summary>
    ''' <param name="TableName">Tabelle für Insert</param>
    Public ReadOnly Property GetInsert(ByVal TableName As String) As String
        Get

            Dim s As New System.Text.StringBuilder

            s.Append("Insert Into " & TableName & " (")

            Dim i As Integer

            For i = 0 To colFieldNames.Count - 1
                s.Append("[" & colFieldNames(i).ToString & "], ")
            Next

            s.Remove(s.ToString.Length - 2, 2)
            s.Append(") Values (")

            For i = 0 To colFieldValues.Count - 1
                s.Append(colFieldValues(i).ToString & ", ")
            Next

            s.Remove(s.ToString.Length - 2, 2)
            s.Append(") ")
            Return s.ToString

        End Get

    End Property

    ''' <summary>
    ''' liefert einen String für Update
    ''' </summary>
    ''' <param name="TableName">Tabelle Update</param>
    ''' <param name="sWhere">optional, Beispiel: ID = 4711</param>
    Public ReadOnly Property GetUpdate(ByVal TableName As String, Optional ByVal sWhere As _
        String = Nothing) As String

        Get

            Dim s As New System.Text.StringBuilder

            s.Append("Update " & TableName & " Set ")

            For i As Integer = 0 To colFieldNames.Count - 1

                s.AppendFormat("[{0}] = {1}, ", colFieldNames(i).ToString, colFieldValues( _
                    i).ToString)

            Next

            s.Remove(s.ToString.Length - 2, 2)
            s.Append(" ")

            If sWhere <> Nothing Then
                s.AppendFormat("Where {0}", sWhere)
            End If

            Return s.ToString

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für einen String
    ''' </summary>
    ''' <param name="sString">zu darstellender String</param>
    Public ReadOnly Property strStr(ByVal sString As String) As String

        Get

            If sString = Nothing Then
                Return "Null"
            End If

            sString = sString.Replace("'", "''")

            ' sString = sString.Replace("""", """""")
            Return "'" & sString & "'"

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für ein Datum
    ''' </summary>
    ''' <param name="Datum">dazustellendes Datum</param>
    ''' <value></value>
    Public ReadOnly Property strDate(ByVal Datum As Date) As String
        Get

            If Datum = Nothing Then
                Return "Null"
            End If

            Dim s As String = Datum.ToString("\#MM\/dd\/yyyy\#")

            Return s

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für ein Datum
    ''' </summary>
    ''' <param name="Datum">dazustellendes Datum</param>
    Public ReadOnly Property strDate(ByVal Datum As String) As String
        Get

            If Datum = Nothing Then
                Return "Null"
            End If

            Dim d As Date = Date.Parse(Datum)
            Dim s As String = d.ToString("\#MM\/dd\/yyyy\#")

            Return s

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für Datum + Uhrzeit
    ''' </summary>
    ''' <param name="Datum">abzubildendes Datum</param>
    Public ReadOnly Property strDateTime(ByVal Datum As Date) As String
        Get

            If Datum = Nothing Then
                Return "Null"
            End If

            Dim s As String = Datum.ToString("\#MM\/dd\/yyyy HH:mm:ss\#")

            Return s

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für Datum + Uhrzeit
    ''' </summary>
    ''' <param name="Datum">abzubildendes Datum</param>
    Public ReadOnly Property strDateTime(ByVal Datum As String) As String
        Get

            If Datum = Nothing Then
                Return "Null"
            End If

            Dim d As Date = Date.Parse(Datum)
            Dim s As String = d.ToString("\#MM\/dd\/yyyy HH:mm:ss\#")

            Return s

        End Get

    End Property

    ''' <summary>
    ''' liefert ein Datum mit der Uhrzeit 23:59:59 für Between
    ''' </summary>
    ''' <param name="Datum"></param>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property strDateMidNight(ByVal Datum As Date) As String
        Get
            Datum = Convert.ToDateTime(Datum.ToString("dd.MM.yyyy") & " 23:59:59")
            Return Datum.ToString("\#\/MM\/dd\/yyyy HH:mm:ss#")

        End Get

    End Property

    ''' <summary>
    ''' liefert einen SQL gerechten String für einen numerischen Wert
    ''' </summary>
    ''' <param name="numWert">numerisches Object vom Typ Integer, Decimal, Double, String etc</param>
    Public ReadOnly Property strNum(ByVal numWert As Object) As String

        Get

            Dim s As String = "0"

            If numWert IsNot Nothing Then
                s = numWert.ToString
            End If

            s = s.Replace(",", ".")
            Return s

        End Get

    End Property

End Class

' ------------ Ende Datei clsSQLStringsAccess.vb  ------------
' ------------------ Anfang Datei Form1.vb  ------------------

Public Class Form1

    ' Form1 mit Button1, Button2, DateTimePicker1, DateTimePicker2

    Private cSQL As New clsSQLStringsAccess

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load

        '
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click

        Dim FaName As String = "Harry O'Brian"
        Dim FaDatum As Date = Date.Now
        Dim FaCount As Integer = 4711
        Dim FaMoney As Decimal = New Decimal(12345.67)
        Dim sSQL As String = Nothing
        Dim ID As Integer = 4713

        With cSQL
            .FldListNew()
            .FldListAdd("FA_Name", .strStr(FaName))
            .FldListAdd("FA_Datum", .strDateTime(FaDatum))
            .FldListAdd("FA_Count", .strNum(FaCount))
            .FldListAdd("FA_Money", .strNum(FaMoney))

            .FldListDebugPrint()

            sSQL = .GetInsert("Firma")
            Debug.Print(sSQL)

            sSQL = .GetUpdate("Firma", "ID=" & ID.ToString)
            Debug.Print(sSQL)
        End With

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button2.Click

        Dim sSQL As String = Nothing

        Using SW As New IO.StringWriter
            SW.WriteLine("Select * From Firma Where")
            SW.WriteLine("(FA_Name Like {0}) And", cSQL.strStr("%O'Brian"))

            SW.WriteLine("(FA_Datum Between {0} And {1})", cSQL.strDate( _
                DateTimePicker1.Value), cSQL.strDateMidNight(DateTimePicker2.Value))

            sSQL = SW.ToString
        End Using

        Debug.Print(sSQL)

    End Sub

End Class

' ------------------- Ende Datei Form1.vb  -------------------
' ------- Ende Projektdatei SQL_Strings_Access.vbproj  -------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

probierts mal aus - pks 22.02.2008 17:30

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.