Noch während der Konferenz notierte ich mir den Gedanken, einen eigenen Datentyp für SQL-Strings zu erstellen. Dieser Beitrag zeigt die wesentlichen Schritte der Implementierung.
Grundsätzliche Implementierung:
Die grundsätzliche Implementierung dieser Klasse ist gleich zu TM-SmartString.
1: Private m_SQLString As TM_SmartString
2:
3: Public Property Let Value(ByVal Text As String)
4: m_SQLString = Text
5: Call SplitUpSqlString(m_SQLString)
6: End Property
7:
8: Public Property Get Value() As String
9: Value = ConcatSqlString()
10: End Property
In Zeile 1 wird eine private Variable für den SQL-String deklariert. Die Property Value ist wieder als Standardmethode implementiert. Wie das geht habe ich bei TM-SmartString beschrieben.Bei der Zuweisung eines neuen SQL-Strings wird dieser mit der Methode SplitUpSqlString in seine Bestandteile zerlegt. Beim Abruf der SQL-Strings werden die einzelnen Bestandteile mit der Methode ConcatSqlString wieder zusammengesetzt.
SplitUpSqlString:
Diese Methode zerlegt den SQL-String in seine Bestandteile.
1: Private Sub SplitUpSqlString(ByVal strSQL As String)
2:
3: 'Variablen deklarieren
4: Dim posSelect As Long
5: Dim posFrom As Long
6: Dim posWhere As Long
7: Dim posGroupBy As Long
8: Dim posHaving As Long
9: Dim posOrderBy As Long
10:
11: 'Initialisieren
12: posSelect = InStr(1, strSQL, "Select")
13: posFrom = InStr(1, strSQL, "From")
14: posWhere = InStr(1, strSQL, "Where")
15: posGroupBy = InStr(1, strSQL, "Group By")
16: posHaving = InStr(1, strSQL, "Having")
17: posOrderBy = InStr(1, strSQL, "Order By")
18:
19: 'Select
20: m_SelectPart = Mid$(strSQL, posSelect + 7, posFrom - posSelect - 7)
21:
22: 'From, Where, Group By, Having und Order By
23: ....
24:
25: End Sub
Im ersten Schritt wird die Position der Schlüsselworte ermittelt. Im weiteren werden dann die einzelnen Bestandteile an Hand der Positionen der Schlüsselworte ermittelt und den jeweiligen privaten Variablen zugewiesen.ConcatSqlString:
Diese Methode setzt den SQL-String aus seinen einzelnen Bestandteilen zusammen.
1: Private Function ConcatSqlString() As String
2:
3: 'Variablen deklarieren
4: Dim sql As String
5:
6: sql = "SELECT " & m_SelectPart & " "
7:
8: sql = sql & "FROM " & m_FromPart & " "
9:
10: If Len(m_WherePart) > 0 Then
11: sql = sql & "WHERE " & m_WherePart & " "
12: End If
13:
14: If Len(m_GroupByPart) > 0 Then
15: sql = sql & "GROUP BY " & m_GroupByPart & " "
16: End If
17:
18: If Len(m_HavingPart) > 0 Then
19: sql = sql & "HAVING " & m_HavingPart & " "
20: End If
21:
22: If Len(m_OrderByPart) > 0 Then
23: sql = sql & "ORDER BY " & m_OrderByPart & " "
24: End If
25:
26: ConcatSqlString = Trim$(sql)
27:
28: End Function
Es wird Schlüsselwort für Schlüsselwort geprüft, ob dieses Text enthält. Im Erfolgsfall wird der SQL-String um das Schlüsselwort und den zugehörigen Inhalt erweitert.Zugriff auf Bestandteile:
Um auf die einzelnen Bestandteile des SQL-Strings zugreifen zu können, wurde jeweils eine Get- und eine Let-Property angelegt.
1: Public Property Let SelectPart(ByVal strText As String)
2: m_SelectPart = strText
3: End Property
4: Public Property Get SelectPart() As String
5: SelectPart = m_SelectPart
6: End Property
Hier sind beispielhaft die Properties für den SelectPart dargestellt.Mit dieser Implementierung steht die grundsätzliche Funktion der neuen Klasse bereit. Wie man diese Klasse einsetzt, zeige ich in einem folgenden Beitrag.
Die neue Version 2.36.17 steht (wie immer) auf meiner Webseite zum Download bereit.
Keine Kommentare:
Kommentar veröffentlichen