VBA: SQL-Statement in Textdatei als Variable definieren
#1
Hallo zusammen,

ist es mögich, im VBA (Excel 2013) eine Variable zu definieren, die auf eine Textdatei ( .txt) zugreift, in der ein sehr langes und umfangreiches SQL-Statement hinterlegt ist und dieses dann auch ausführt? Es werden hier Datenbankwerte abgegriffen, die anschließend per Makro weiterverarbeitet werden sollen. Das Statement ins Makro selbst zu schreiben möchte ich verhindern.

Gibt es hier einen Befehl?

Gruß
Top
#2
Gruß Namenloser,

Deine 'Variable' ist hier.
Da steckt in jedem Beispiel etwas mehr Code drin, denn so eine arme Variable wird sicher niemals auf eine Textdatei zugreifen können.
Auch nicht, wenn Sie es vielleicht gern möchten würde.


Bist Du Dir sicher, dass Du einen richtigen Weg beschreitest?
SQL-Strings gehören ganz sicher nicht in Textdateien, da kann ja sonstwas drin stehen.

Ansonsten ist Deine Anfrage insgesamt sehr allgemein gehalten und gleichzeitig doch leer und inhaltslos, was Du sicher auch an den bisher so zahlreichen Antworten bemerken kannst.



Gruß Carsten
Top
#3
Hallöchen,


klar ist das möglich. Im Prinzip reichen da wenige Zeilen Code für ein einzeiliges SQL-Statement..

Dim Text As String
Open ThisWorkbook.Path & "\sql.txt" For Input As #1
Line Input #1, Text
Close #1  
'... und weiter mit dem SQL ...

Die Arbeit mit SQL-Statements aus "Textdateien" ist übrigens nicht ungewöhnlich. Ich arbeite auch mit SQLPlus, da kann man in "Textdateien" gespeicherte SQL-Scripte ausführen. Ob die dann ein oder mehrere Statements enthalten, sei mal dahingestellt.

Im Excel sind bei mir SQL-Strings oft mit Variablen versehen, die erst bei Codeausführung gefüllt werden, und das bekommst Du mit einem String aus einer Textdatei nicht gebacken. Du müsstest dann mit Teilstrings arbeiten und das im Code zusammensetzen. Im Prinzip
SQL_strring = Text1 & Variable1 & Text2 & Variable2 & Text3
usw.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Hallöchen return,

es hat niemand behauptet, dass das nicht möglich ist und diese 3 Codezeilen zum Auslesen von Textdateien findet man in jedem von mir weiter oben geposteten Link.
Wichtig bei dieser Art des einfachsten Aufrufes ist der Errorhandler, damit die Datei auch wirklich wieder geschlossen und ebenfalls die Dateinummer freigegeben wird. Die bessere Methode dafür ist die Nutzung der Freefile-Funktion. Näheres zum Open-Befehl siehe auch hier.

Warum ich aber eigentlich antworte, weil diese Aussage komplett falsch ist:
(14.03.2017, 22:38)schauan schrieb: Im Excel sind bei mir SQL-Strings oft mit Variablen versehen, die erst bei Codeausführung gefüllt werden, und das bekommst Du mit einem String aus einer Textdatei nicht gebacken.
Natürlich bekommt man auch das 'gebacken', dies ist ja noch die einfachste Form der 'Bäckerei'.
Solche Variablen können bspw. als Platzhalter (bspw. @StartDate) hinterlegt und mit Replace einfach ersetzt werden. Man muss es halt dann auch tun.


Ansonsten haben m.M.n. Textdateien mit SQL-Strings auf Userebene nichts zu suchen, das ist billige und unsichere Bastelei. Dafür gibt es bessere und vor allem auch anwenderfreundlichere Lösungen, von der Sicherheit mal ganz abgesehen ...



Gruß Carsten
Top
#5
Hallo,

(10.03.2017, 13:53)T081A5 schrieb: Gibt es hier einen Befehl?

was Du suchst, ist eine Funktion, die den Text der Datei zurück gibt?

Hier ein Beispiel mit André`s Beispielcode:

Option Explicit

Function GET_SQLSTRING(Optional strDatei As String) As String
 Dim lngDateiNummer As Long
 
 lngDateiNummer = FreeFile
 If Len(strDatei) = 0 Then strDatei = ThisWorkbook.Path & "\sql.txt"
 
 If Len(Dir(strDatei)) Then
   Open strDatei For Input As #lngDateiNummer
     Line Input #lngDateiNummer, GET_SQLSTRING
   Close #lngDateiNummer
 End If
End Function

Sub TestSQL()
 Dim strSQL As String
 
 strSQL = GET_SQLSTRING("D:\Irgendwo\MeinSQLText.txt")
 If Len(strSQL) Then
   'die Abfrage mit der Variable strSQL
 Else
   MsgBox "Keine Statements gefunden.", vbInformation
 End If
End Sub

Gruß Uwe
Top
#6
Smile 
Hallo zusammen,

Ihr seid mir lustige Helfer ...
(10.03.2017, 13:53)T081A5 schrieb: ... die auf eine Textdatei ( .txt) zugreift, in der ein sehr langes und umfangreiches SQL-Statement hinterlegt ist ...
... und dann wird sogleich wild mit Codezeilen um sich geschmissen, welche jeweils nur die erste Zeile der Textdatei einlesen. Egal, Hauptsache Code gepostet.
Ich warte jetzt noch auf Beispielcode mit FSO, WSH, ... - Da findet sich sicher noch jemand.   :19:

Mit dem schon oben geposteten Link kann doch jeder Suchmaschinenbediener eine popelige Datei öffnen und auslesen, da muss man den Code nicht noch einmal schreiben.


Ich hatte weiter oben schon geschrieben, dass seine Anfrage zu allgemein gehalten ist und keinerlei weiterführende Informationen enthält.
Solange Tobias mit detaillierten Informationen weiter so zurückhaltend ist, dann ist keine sinnvolle Hilfe möglich.

Mal abgesehen von meiner Einstellung zu solchem SQL-Textdateigehampel, wären die Fragen u.a.:
  • Wie sieht der Aufbau der Datei aus?
  • Nur ein String enthalten?
  • Einzeilig oder mehrzeilig?
  • usw. 

Weiterhin soll die 'Variable' auch den SQL-String ausführen:
(10.03.2017, 13:53)T081A5 schrieb: ... eine Variable zu definieren ... SQL-Statement ... und dieses dann auch ausführt? Es werden hier Datenbankwerte abgegriffen, die anschließend per Makro weiterverarbeitet werden sollen.
Ab hier wird das Problem aber eigentlich erst interessant.
Leider können wir nur rätselraten, da an dieser Stelle der Frage sämtliche Detailinformationen fehlen.
Mir fällt da nur ein:
Lieber Tobias, bitte formuliere Deine Anfrage neu und ausführlicher.


Gruß Carsten
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste