Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
SQL-Formatierer
zurück: InputBox Ersatz weiter: Vorstellung eines NestedSet als TreeView mit Drag&Drop 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
clsOOP
Klassenfreund


Verfasst am:
11. Sep 2012, 00:50
Rufname:

SQL-Formatierer - SQL-Formatierer

Nach oben
       Version: Office XP (2002)

Zitat:
Hallo,

wer häufig Abfragen in der VBA-Umgebung als String-Variable benötigt, kennt das Problem: Man erstellt eine Abfrage und kopiert den SQL-String. Anschließend erstellt man in der VBA-Umgebung eine Variable oder Konstante und weist dieser dann den String zu. Dabei wird der String dann allerdings nie umgebrochen und man erhält einen meterlangen Ausdruck, so daß man erst das Formular horizontal scrollen muß, um sich den String ansehen zu können. Man kann ihn allerdings nie komplett sehen, was dann z.B. so aussieht:
Code:
Private sSQL As String = "SELECT TK.KursNr, TK.KurstypNr, TK.PersonenNr_Personal, TK.[Kurs_Ort-ID], TK.KursstatusNr, TKO.KostenProStunde, TP.Stundensatz, TK.Anfangsdatum, TK.Enddatum, TK.UhrzeitID
FROM tblKurs_Ort AS TKO INNER JOIN (tblPersonal AS TP INNER JOIN (tblKurstyp AS TKT INNER JOIN (tblKursstatus AS TKS INNER JOIN tblKurse AS TK ON TKS.KursstatusNr = TK.KursstatusNr) ON TKT.KurstypNr = TK.KurstypNr) ON TP.PersonalNr = TK.PersonenNr_Personal) ON TKO.Kurs_OrtID = TK.[Kursort-ID]
Diesen String müßte man jetzt per Hand formatieren, damit man ihn in der VBA-Umgebung vollständig sehen kann - ungefähr so:
Code:
Private sSQL As String = "SELECT TK.KursNr, TK.KurstypNr, TK.PersonenNr_Personal, TK.[Kurs_Ort-ID], " & _
"TK.KursstatusNr, TKO.KostenProStunde, TP.Stundensatz, TK.Anfangsdatum, " & _
"TK.Enddatum, TK.UhrzeitID " & _
"FROM tblKurs_Ort AS TKO INNER JOIN (tblPersonal AS TP INNER JOIN " & _
"(tblKurstyp AS TKT INNER JOIN (tblKursstatus AS TKS INNER JOIN tblKurse AS TK ON " & _
"TKS.KursstatusNr = TK.KursstatusNr) ON TKT.KurstypNr = TK.KurstypNr) ON " & _
"TP.PersonalNr = TK.PersonenNr_Personal) ON TKO.Kurs_OrtID = " & _
"TK.[Kursort-ID] "
Da diese Prozedur bei sehr langen SQL-Strings ziemlich viel Zeit kostet, war ich auf der Suche nach einem Schnell-Formatierer für SQL-Strings. Ich dachte an ein Add-In. Da ich nicht fündig geworden bin, habe ich mir selber einen gebastelt, der die Formatierung jetzt für mich vornimmt. Übrigens auch umgekehrt - einen VBA-String wandelt er auch in einen funktionsfähigen SQL-String für das Abfragefenster um. Die einzige Vorraussetzung ist: es muß ein funktiosnfähiger SQL-String, sei es als VBA-String oder für eine Abfrage im Abfragefenster, eingefügt werden.
Das ganze ist ein Add-In, das man ganz normal über Extras/AddIns/AddIn-Manager installiert. Um es zu benutzen, kopiert man einfach einen SQL-String und öffnet über Extras/AddIns den "clsOOP SQL-Formatter" und fügt den String in das Textfeld ein. Anschließend drückt man einfach die ENTER-Taste und das Ergebnis erscheint sofort im selben Textfeld - komplett markiert, um es zu kopieren.
Drückt man erneut ENTER, wird der String zurück verwandelt.
Ich habe es mit allen Arten von Abfragen getestet - außer SubSelects - meine Ansprüche sind damit völlig erfüllt - die Hin-und Her-Formatierung kann ich jetzt blitzartig erledigen und mich um das eigentliche Problem kümmern.
Zur Sicherheit den umgewandelten String aber trotzdem nochmal ansehen.
Ach ja: Tabellenfelder sollten nicht wie SQL-Schlüsselwörter heißen oder diese enthalten - z.B. steckt in "Kursort" SORT drin - das könnte dazu führen, daß die Formatierung "eigenartig" aussieht.

Hab noch ein wenig was verbessert:
Die neue Version enthält folgende Änderungen:
- über ein Optionsmenü kann man Optionseinstellungen bzgl. zu erstellender Konstante oder Variable vornehmen und den Umbruch individuell festlegen
- SQL-Schlüsselwörter werden jetzt so erkannt, daß auch Tabellenfelder SQL-Schlüsselwörter beinhalten können

Freue mich natürlich, wenns Euch was nützt und über Eure Reaktionen Wink

_________________
Schöne Grüße,

clsOOP



clsOOP SQL-Formatter.zip
 Beschreibung:
SQL-Formatierer

Download
 Dateiname:  clsOOP SQL-Formatter.zip
 Dateigröße:  21.52 KB
 Heruntergeladen:  34 mal


clsOOP SQL-Formatter_0_07.zip
 Beschreibung:
SQL-String-Formatierer

Download
 Dateiname:  clsOOP SQL-Formatter_0_07.zip
 Dateigröße:  54.34 KB
 Heruntergeladen:  32 mal

MiLie
kein Office- VBA- Programmierer


Verfasst am:
11. Sep 2012, 20:16
Rufname: Micha
Wohnort: Chemnitz

AW: SQL-Formatierer - AW: SQL-Formatierer

Nach oben
       Version: Office XP (2002)

Hallo,

super für die Arbeit aber das gibt es bereits fertig - online, man muss nichts installieren.
SQLinForm

wähle als outputsql VBA (es gibt mehrere Varianten)
dein Beispiel als SQL Formatiert wäre
Code:
SELECT     TK.KursNr             ,
           TK.KurstypNr          ,
           TK.PersonenNr_Personal,
           TK.[Kurs_Ort-ID]      ,
           TK.KursstatusNr       ,
           TKO.KostenProStunde   ,
           TP.Stundensatz        ,
           TK.Anfangsdatum       ,
           TK.Enddatum           ,
           TK.UhrzeitID
FROM       tblKurs_Ort AS TKO
           INNER JOIN (tblPersonal AS TP
                      INNER JOIN (tblKurstyp AS TKT
                                 INNER JOIN (tblKursstatus      AS TKS
                                            INNER JOIN tblKurse AS TK
                                            ON         TKS.KursstatusNr = TK.KursstatusNr)
                                 ON         TKT.KurstypNr               = TK.KurstypNr)
                      ON         TP.PersonalNr                          = TK.PersonenNr_Personal)
           ON         TKO.Kurs_OrtID                 
und als VBA Variante 2 formatiert wäre
Code:
strsql= "" & _
"SELECT TK.KursNr, " & _
"       TK.KurstypNr, " & _
"       TK.PersonenNr_Personal, " & _
"       TK.[Kurs_Ort-ID], " & _
"       TK.KursstatusNr, " & _
"       TKO.KostenProStunde, " & _
"       TP.Stundensatz, " & _
"       TK.Anfangsdatum, " & _
"       TK.Enddatum, " & _
"       TK.UhrzeitID " & _
"FROM   tblKurs_Ort AS TKO " & _
"       INNER JOIN (tblPersonal AS TP " & _
"              INNER JOIN (tblKurstyp AS TKT " & _
"                     INNER JOIN (tblKursstatus AS TKS " & _
"                            INNER JOIN tblKurse AS TK " & _
"                            ON     TKS.KursstatusNr = TK.KursstatusNr) " & _
"                     ON     TKT.KurstypNr = TK.KurstypNr) " & _
"              ON     TP.PersonalNr = TK.PersonenNr_Personal) " & _
"       ON     TKO.Kurs_OrtID = TK.[Kursort-ID]"
das formatiert nicht nur, sondern macht es übersichtlich, insbesondere bei Subselects und mehreren Joins.
Es bestehen reichlich Einstellmöglichkeiten für die Formatierungen.

Aber trotzdem, ein schöner Ansatz und wahrscheinlich viel Arbeit.

_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
clsOOP
Klassenfreund


Verfasst am:
11. Sep 2012, 22:32
Rufname:


AW: SQL-Formatierer - AW: SQL-Formatierer

Nach oben
       Version: Office XP (2002)

Hallo MiLie,

vielen Dank für Deine Info und Dein Kompliment:-)
Die Arbeit hielt sich in Grenzen, hab mich letztes WE hingesetzt und war trotzdem noch beim "Tag der Sachsen"Wink
Die Online-Version ist meiner wirklich haushoch überlegen, die Übersichtlichkeit ist richtig gut. Mal sehen, wenn ich Lust habe, verbesser ich das vielleicht in meiner Version noch.
Vorerst ist es mir ausreichend - es sollte nur ein Schnell-Formatierer sein, damit der String komplett auf den Schirm paßt und mich diese Formatierung nicht weiter aufhält.
Vorteil meiner Version ist aber, daß man nicht online sein muß. Auf Arbeit z.B. haben wir nur Intranet:-(

@All
Übrigens: die aktuelle Version ist die 007 - falls sich trotz online-Möglichkeit doch noch jemand dafür interessiert;-)

_________________
Schöne Grüße,

clsOOP
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

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln