Tipp-Upload: VB.NET 0202: SQL Strings für Access generieren
von pks
Ü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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.