Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
SQL - String zerlegen bzw. splitten
zurück: Logdatei leicht gemacht weiter: Grafiken in DIB-Format für Hintergrundbilder konvertieren Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Information Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
TNFL
Im Profil kannst Du frei den Rang ändern


Verfasst am:
16. Jun 2011, 13:05
Rufname:

SQL - String zerlegen bzw. splitten - SQL - String zerlegen bzw. splitten

Nach oben
       Version: Office 2007

Hallo Leute,

im Internet habe ich leider nicht auf Anhieb die richtige Funktion gefunden um einen SQL-String per VBA zu zerlegen. Hier nun meine eigene Lösung für alle, die diese Funktion ebenfalls nutzen möchten. Die Funktionen können sicher noch deutlich verbessert werden, aber es funktioniert erst mal.

Nutzung: Alles komplett in ein neues Modul kopieren. Anschließend können die Funktionen wie unter "SplitSQL_TEST" dargestellt aufgerufen werden.
Code:
Option Compare Database
Option Explicit

Sub SplitSQL_TEST()
    Dim strSQL As String, strSELECT As String, strFROM As String
    Dim strWHERE As String, strGROUPBY As String, strHAVING As String
    Dim strORDERBY As String

    strSQL = "SELECT BenutzerID, benutzername, passwort, nachname, vorname" _
            & " FROM tbl_adm_Benutzer" _
           & " WHERE benutzertyp > 1" _
        & " GROUP BY BenutzerID, benutzername, passwort, nachname, vorname" _
          & " HAVING BenutzerID > 0" _
        & " ORDER BY benutzername;"
Debug.Print "SELECT1: " & sqlReturnSELECT(strSQL, False)
Debug.Print "SELECT2: " & sqlReturnSELECT(strSQL, True)
Debug.Print "--------"
Debug.Print "FROM1: " & sqlReturnFROM(strSQL, False)
Debug.Print "FROM2: " & sqlReturnFROM(strSQL, True)
Debug.Print "--------"
Debug.Print "WHERE1: " & sqlReturnWHERE(strSQL, False)
Debug.Print "WHERE2: " & sqlReturnWHERE(strSQL, True)
Debug.Print "--------"
Debug.Print "GROUP BY1: " & sqlReturnGROUPBY(strSQL, False)
Debug.Print "GROUP BY2: " & sqlReturnGROUPBY(strSQL, True)
Debug.Print "--------"
Debug.Print "HAVING1: " & sqlReturnHAVING(strSQL, False)
Debug.Print "HAVING2: " & sqlReturnHAVING(strSQL, True)
Debug.Print "--------"
Debug.Print "ORDER BY1: " & sqlReturnORDERBY(strSQL, False)
Debug.Print "ORDER BY2: " & sqlReturnORDERBY(strSQL, True)
Debug.Print "--------"
End Sub

Public Function sqlReturnSELECT(varSQL As Variant _
                              , Optional varOhneSELECT As Boolean = False)
    Dim strTmp As String
   
    strTmp = Left(varSQL, InStr(1, varSQL, "FROM") - 2)
    If varOhneSELECT = True Then
        strTmp = Right(strTmp, Len(strTmp) - 7)
    End If
    sqlReturnSELECT = strTmp
End Function

Public Function sqlReturnFROM(varSQL As Variant _
                            , Optional varOhneFROM As Boolean = False)
    Dim strTmp As String
   
    strTmp = varSQL
    If InStr(1, varSQL, "WHERE") > 0 Then
        strTmp = Left(varSQL, InStr(1, varSQL, "WHERE") - 2)
      ElseIf InStr(1, varSQL, "GROUP BY") > 0 Then
        strTmp = Left(varSQL, InStr(1, varSQL, "GROUP BY") - 2)
      ElseIf InStr(1, varSQL, "HAVING") > 0 Then
        strTmp = Left(varSQL, InStr(1, varSQL, "HAVING") - 2)
      ElseIf InStr(1, varSQL, "ORDER BY") > 0 Then
        strTmp = Left(varSQL, InStr(1, varSQL, "ORDER BY") - 2)
    End If
    strTmp = Mid(strTmp, InStrRev(strTmp, "FROM"), Len(strTmp))
    If varOhneFROM = True Then
        strTmp = Right(strTmp, Len(strTmp) - 5)
    End If
    'Wenn ein ';' am Ende des Strings ist, dieses entfernen
    sqlReturnFROM = IIf(Right(strTmp, 1) = ";" _
                      , Left(strTmp, Len(strTmp) - 1), strTmp)
End Function

Public Function sqlReturnWHERE(varSQL As Variant _
                             , Optional varOhneWHERE As Boolean = False)
    Dim strTmp As String
   
    'Prüfung, ob Statement überhaupt vorhanden ist
    If InStr(1, varSQL, "WHERE") > 0 Then
        strTmp = varSQL
        If InStr(1, varSQL, "GROUP BY") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "GROUP BY") - 2)
          ElseIf InStr(1, varSQL, "HAVING") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "HAVING") - 2)
          ElseIf InStr(1, varSQL, "ORDER BY") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "ORDER BY") - 2)
        End If
        strTmp = Mid(strTmp, InStrRev(strTmp, "WHERE"), Len(strTmp))
        If varOhneWHERE = True Then
            strTmp = Right(strTmp, Len(strTmp) - 6)
        End If
        'Wenn ein ';' am Ende des Strings ist, dieses entfernen
        sqlReturnWHERE = IIf(Right(strTmp, 1) = ";" _
                           , Left(strTmp, Len(strTmp) - 1), strTmp)
      Else
        sqlReturnWHERE = ""
    End If
End Function

Public Function sqlReturnGROUPBY(varSQL As Variant _
                               , Optional varOhneGROUPBY As Boolean = False)
    Dim strTmp As String
   
    'Prüfung, ob Statement überhaupt vorhanden ist
    If InStr(1, varSQL, "GROUP BY") > 0 Then
        strTmp = varSQL
        If InStr(1, varSQL, "HAVING") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "HAVING") - 2)
          ElseIf InStr(1, varSQL, "ORDER BY") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "ORDER BY") - 2)
        End If
        strTmp = Mid(strTmp, InStrRev(strTmp, "GROUP BY"), Len(strTmp))
        If varOhneGROUPBY = True Then
            strTmp = Right(strTmp, Len(strTmp) - 9)
        End If
        'Wenn ein ';' am Ende des Strings ist, dieses entfernen
        sqlReturnGROUPBY = IIf(Right(strTmp, 1) = ";" _
                             , Left(strTmp, Len(strTmp) - 1), strTmp)
      Else
        sqlReturnGROUPBY = ""
    End If
End Function

Public Function sqlReturnHAVING(varSQL As Variant _
                              , Optional varOhneHAVING As Boolean = False)
    Dim strTmp As String
   
    'Prüfung, ob Statement überhaupt vorhanden ist
    If InStr(1, varSQL, "HAVING") > 0 Then
        strTmp = varSQL
        If InStr(1, varSQL, "ORDER BY") > 0 Then
            strTmp = Left(varSQL, InStr(1, varSQL, "ORDER BY") - 2)
        End If
        strTmp = Mid(strTmp, InStrRev(strTmp, "HAVING"), Len(strTmp))
        If varOhneHAVING = True Then
            strTmp = Right(strTmp, Len(strTmp) - 9)
        End If
        'Wenn ein ';' am Ende des Strings ist, dieses entfernen
        sqlReturnHAVING = IIf(Right(strTmp, 1) = ";" _
                            , Left(strTmp, Len(strTmp) - 1), strTmp)
      Else
        sqlReturnHAVING = ""
    End If
End Function

Public Function sqlReturnORDERBY(varSQL As Variant _
                               , Optional varOhneORDERBY As Boolean = False)
    Dim strTmp As String
   
    'Prüfung, ob Statement überhaupt vorhanden ist
    If InStr(1, varSQL, "ORDER BY") > 0 Then
        strTmp = varSQL
        strTmp = Mid(varSQL, InStrRev(varSQL, "ORDER BY"), Len(varSQL))
        If varOhneORDERBY = True Then
            strTmp = Right(strTmp, Len(strTmp) - 9)
        End If
        'Wenn ein ';' am Ende des Strings ist, dieses entfernen
        sqlReturnORDERBY = IIf(Right(strTmp, 1) = ";" _
                             , Left(strTmp, Len(strTmp) - 1), strTmp)
      Else
        sqlReturnORDERBY = ""
    End If
End Function
Ergebnis:
Zitat:
SELECT1: SELECT BenutzerID, benutzername, passwort, nachname, vorname
SELECT2: BenutzerID, benutzername, passwort, nachname, vorname
--------
FROM1: FROM tbl_adm_Benutzer
FROM2: tbl_adm_Benutzer
--------
WHERE1: WHERE benutzertyp > 1
WHERE2: benutzertyp > 1
--------
GROUP BY1: GROUP BY BenutzerID, benutzername, passwort, nachname, vorname
GROUP BY2: BenutzerID, benutzername, passwort, nachname, vorname
--------
HAVING1: HAVING BenutzerID > 0
HAVING2: BenutzerID > 0
--------
ORDER BY1: ORDER BY benutzername
ORDER BY2: benutzername
--------
Viel Spaß!
Willi Wipp
Moderator


Verfasst am:
18. Jun 2011, 06:08
Rufname:
Wohnort: Raum Wiesbaden


Re: SQL - String zerlegen bzw. splitten - Re: SQL - String zerlegen bzw. splitten

Nach oben
       Version: Office 2007

Hi TNFL,

schoenes Code-Beispiel

{Dieser Beitrag nimmt das Thema aus den unbeantworteten Themen heraus}
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: Tabellen oder string vergleichen 0 taomik 674 18. März 2005, 17:35
taomik Tabellen oder string vergleichen
Keine neuen Beiträge Access Tabellen & Abfragen: SQL - Anzahl Ergebnissätze begrenzen, z.B erste 1000 Sätze 2 Spoldo 18401 17. März 2005, 17:25
Spoldo SQL - Anzahl Ergebnissätze begrenzen, z.B erste 1000 Sätze
Keine neuen Beiträge Access Tabellen & Abfragen: Access ändert meine SQL Strings 1 Nil 608 24. Feb 2005, 13:25
lothi Access ändert meine SQL Strings
Keine neuen Beiträge Access Tabellen & Abfragen: Zeitspanne bei Datumswerten mit SQL filtern...? 3 DoMe 4372 15. Feb 2005, 17:57
Willi Wipp Zeitspanne bei Datumswerten mit SQL filtern...?
Keine neuen Beiträge Access Tabellen & Abfragen: SQL Gruppierung -AXP 2 nepokat 601 03. Feb 2005, 08:46
nepokat SQL Gruppierung -AXP
Keine neuen Beiträge Access Tabellen & Abfragen: SQL: Like Operator geht nicht 2 Klaus-Peter_ 11242 31. Jan 2005, 18:54
Klaus-Peter SQL: Like Operator geht nicht
Keine neuen Beiträge Access Tabellen & Abfragen: Create View bzw. Abfrage 1 Hedonist 899 17. Dez 2004, 12:07
lothi Create View bzw. Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Tabelle per SQL umbennen (Access 2000) 2 DerPater 1084 09. Dez 2004, 14:02
Gast Tabelle per SQL umbennen (Access 2000)
Keine neuen Beiträge Access Tabellen & Abfragen: Per SQL maximalen Spaltenwert im VBA code ermitteln 2 Gast 4779 31. Okt 2004, 23:10
Tom2002 Per SQL maximalen Spaltenwert im VBA code ermitteln
Keine neuen Beiträge Access Tabellen & Abfragen: Wenn-Dann-Sonst in SQL??? mit SQL-String :-) 11 SCHNEEMANN 7515 20. Okt 2004, 16:33
SCHNEEMANN Wenn-Dann-Sonst in SQL??? mit SQL-String :-)
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Wenn-Dann-Sonst in SQL??? 2 SCHNEEMANN 998 18. Okt 2004, 17:26
Willi Wipp Wenn-Dann-Sonst in SQL???
Keine neuen Beiträge Access Tabellen & Abfragen: SQL - Abfrage ob ein Wert in der Tabelle enthalten ist 1 notausgang 1301 23. Sep 2004, 09:42
stpimi SQL - Abfrage ob ein Wert in der Tabelle enthalten ist
 

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