goodbytes
Goto Top

Mittels VBS eine Maske für SQL-Abfrage erstellen?

Hallo,
ich habe mir eine SQL-Abfrage erstellt, die mir das Ergebnis in eine txt-Datei speichert. Funktioniert auch prima
Die Abfrage rufe ich mit einer Batch auf (nutze dazfür "SQLCMD"); dieigentliche SQL-Abfrage steht in der "Abfrage.txt".

Batch-Datei:
SQLCMD -U ODBC-Zugriff -P odbc -S Server\DATENBANK -d Instanzname -i Abfrage.txt -o Ergebnis.txt -r 1 -R -W -b -s ";"  

Abfrage.txt:
SELECT      *
FROM           [DB_Zählpunkt] RIGHT OUTER JOIN
                      [DB_Zeile] ON [DB_ZP].Nr_ = [DB_Zeile].ZPNr_ LEFT OUTER JOIN
                      [DB_Kopf] ON [DB_Zeile].Rechnungsnr_ = [DB_Kopf].Nr_

WHERE       ([DB_Zeile].Code= 'S')  
                      AND ([DB_Zeile].Gruppe = 'E-003)   
                      AND (([DB_Kopf].[Von-Datum] BETWEEN CONVERT(DATETIME, '2008-01-01 00:00:00', 102)  
                      AND CONVERT(DATETIME, '2008-12-31 00:00:00', 102))   
                      AND ([DB_Kopf].[Bis-Datum] BETWEEN CONVERT(DATETIME, '2008-01-01 00:00:00', 102)  
                      AND CONVERT(DATETIME, '2008-12-31 00:00:00', 102)))  
ORDER BY [DB_Kopf].Nr_
Die Filterkriterien (Code, Gruppe und der Zeitraum) ändere ich immer direkt in der Abfrage.
Nun soll allerdings ein Benutzer, der nichts mit SQL am Hut hat diese Abfrage regelmäßig ausführen (und muss natürlich auch entsprechend auch die Filterkriterien ändern können).

Wie bekomme ich da eine einfache Maske hin, wo er seine Werte einfach übergibt?
Von der "Abfrage.txt" und der Batch soll er ja möglichst gar nichts mitbekommen.

Torsten

Content-Key: 111074

Url: https://administrator.de/contentid/111074

Printed on: April 25, 2024 at 14:04 o'clock

Member: godlie
godlie Mar 11, 2009 at 10:22:39 (UTC)
Goto Top
Hallo afaik ist es in VBS net möglich GUI's zu bauen ( lass mich gerne vom Gegentiel überzeugen ).

Aber eine möglichkeit wäre es in html ein vbscript einzubetten, damit wäre die Möglcihekit zur Eingabe gegeben.

hab hier was gefunden: link

grüße
Member: goodbytes
goodbytes Mar 11, 2009 at 17:24:08 (UTC)
Goto Top
Hallo godlie,
das ist natürlich sehr elegante Variante um schnell eine Oberfläche zu bekommen, vor allem, weil man diese sehr schnell bei Änderungen anpassen kann.

Aber bei der Umsetzung meines speziellen Problems hab ich da so meine Probleme.

Den SQLCMD-Aufruf könnte ich ja direkt in den vbs-Teil einbinden, allerdings nutzt dieser Aufruf ja eine separate Datei, die die reine SQL-Abfrage enthält. Ich muss aber über diese grafische Oberfläche ja die Filterkriterien in dieser Abfrage ändern. Also entweder aus den Ergebnissen der Oberfläche direkt in die Datei schreiben (wie aber dann an die richtige Stelle?), oder den Inhalt der Abfrage-Datei irgendwie direkt mit in die hta-Datei mit reinbringen.

Oder kann man das Problem doch nur mit VB lösen? (VB6 hab ich zumindest noch da.) Da wären natürlich grafische Oberflächen auch möglich. Nur ist mir das zu komplex das hinzubekommen. Man könnte da mit Sicherheit alles gleich komplett reinbekommen, aber da kenne ich mich einfach zu wenig aus.

Torsten
Member: goodbytes
goodbytes Mar 17, 2009 at 12:24:08 (UTC)
Goto Top
Also diese Umsetzung mittels einer hta-Datei habe ich jetzt hinbekommen. Auch die SQL-Abfrage ist komplett mit drin (ohne Zeilenumbruch in der Zeile "oShell.Run "SQLCMD..."):

<head>
<title>SQL-Abfrage</title>
<HTA:APPLICATION
    APPLICATIONNAME="SQL-Abfrage"  
    SCROLL="no"  
    SINGLEINSTANCE="yes"  
    WINDOWSTATE="normal"  
    SysMenu ="Yes"  
>

<script language="VBScript">  

Dim WScript
Dim WshShell
Dim oShell

Set WScript = CreateObject("WScript.Shell")  
Set oShell = CreateObject("WScript.Shell")  

oShell.Run "SQLCMD " & "-U ODBC-Zugriff -P odbc -S MeinServer\Instanz -d Datenbank -Q ""USE Datenbank ... (Meine Abfrage)"" -o Ergebnis.txt -r 0 -R -W -b -s " & ";""", 1, True  

</script>

</head>

Nun habe ich aber noch ein letztes Problem. Ich kann ja in der hta-Datei Eingabeboxen definieren.
z.B.:

MeineVariable = InputBox("Bitte den Wert eingeben: ","Wert-Eingabe")  

Wie kann ich aber nun diese Variable in der enthaltenen SQL-Abfrage nutzen?

Torsten