Dim aConn, sConn , aRs, sSQL
Dim sPath
Dim oFld, sHeader, bHeader, sContent, sDelimiter
Dim sCharset
dim oArgs, oArg, sArg
dim oStdOut
Const adTypeText = 2
Const adSaveCreateOverWrite = 2
set oArgs=wscript.Arguments
Set oStdOut = WScript.StdOut
sPath = ""
sCharset = "utf-8"
sDelimiter = ";"
bHeader = 0
For Each oArg In oArgs
sArg = fGetParmName(oArg)
select case sArg
case "Sql", "S"
sSQL = fGetParmValue(oArg)
case "Path", "P"
sPath = fGetParmValue(oArg)
case "Conn", "C"
sConn = fGetParmValue(oArg)
case "Charset", "A"
sCharset = fGetParmValue(oArg)
case "Header" , "H"
bHeader = fGetParmValue(oArg)
case "Delimiter", "D"
sDelimiter = fGetParmValue(oArg)
End Select
Next
On Error Resume Next
Err.Clear
Set aConn = CreateObject("ADODB.Connection")
aConn.Open sConn
If Err.Number <> 0 Then call sError
Set aRs = aConn.Execute(sSQL)
If Err.Number <> 0 Then call sError
aRs.MoveFirst
If Err.Number <> 0 Then call sError
if bHeader = "Yes" Then
For Each oFld In aRs.Fields
sHeader = sHeader & oFld.Name & sDelimiter
Next
sHeader = Left(sHeader, Len(sHeader) - 1) & Chr(13) & Chr(10)
End If
sContent = sHeader & aRs.GetString(, , sDelimiter)
If Err.Number <> 0 Then call sError
if sPath<> "" Then
ExportToFile sPath, sContent
Else
oStdOut.Write sContent
end if
aConn.Close
If Err.Number <> 0 Then call sError
set oStdOut = Nothing
Set aRs = Nothing
Set aConn = Nothing
function fGetParmName (sIn)
fGetParmName= left(sIn, InStr(sIn,":") -1 )
if left(fGetParmName,1) ="/" Then fGetParmName = mid(fGetParmName,2)
End Function
function fGetParmValue (sIn)
fGetParmValue= mid(sIn, InStr(sIn,":") + 1 )
End Function
sub sError
Wscript.Echo Err.Description
On Error GoTo 0
Err.Clear
Wscript.Quit
End Sub
sub ExportToFile (sPath, sContent)
Dim aStream 'As ADODB.Stream
Set aStream = CreateObject("ADODB.Stream")
With aStream
.Open
.Type = adTypeText
.Charset = sCharset
If Err.Number <> 0 Then call sError
.Position = 0
.WriteText sContent
If Err.Number <> 0 Then call sError
.SaveToFile sPath, adSaveCreateOverWrite
If Err.Number <> 0 Then call sError
End With
Set aStream = Nothing
End SubSkrypt ten można uruchomić w następujący sposób:
eksport.vbs /Sql:"SELECT * FROM dbo.v_struktura_akt" /Conn:"DRIVER=SQL Server Native Client 10.0;SERVER=MASZYNA;UID=username;Trusted_Connection=Yes;WSID=MASZYNA;DATABASE=baza_danych;LANGUAGE=polski;" /Path:"E:\Roboczy\wynik.csv"
dostępne są następujące parametry:
/SQL:"select * from tabela" - zapytanie które chcemy uruchomić
/Conn:"DRIVER=SQL Server....." - ciąg połączenia do bazy danych, zaletą tego rozwiązania jest to że możemy pobrać dane z praktycznie dowolnej bazy danych
/Path:"d:\katalog\plik.csv" - ścieżka do pliku w którym chcemy przechowywać wynik. W przypadku gdy nie podamy pliku wynik zostanie przekierowany do strumienia STDOUT
/Charset:"utf-8" - domyślny marametr strony kodowej w której zapiszemy plik. Standardowo jest utf-8, ale można zastosować dowolną stronę kodową obsługiwaną przez ADODB.Stream np. windows-1250
/Header:"Yes" - dodaje wiersz z nagłówkami
/Delimiter:";" - ustala znak podziału poszczególnych kolumn
Mała uwaga: jeżeli chcemy wyłączyć Banner w programie CSCRIPT
Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation. All rights reserved.
Wykonajmy polecenie
cscript //NoLogo //S
Brak komentarzy:
Prześlij komentarz