Archiv | VBScript RSS Feed für diesen Bereich

SQL-Datenbank Abgleich zwischen zwei Servern

5. Mai 2011

keine Kommentare

Vor ein paar Wochen musste ich einen Abgleich zwischen zwei SQL-Datenbanktabellen machen. Die Datenbanken lagen jedoch auf zwei unterschiedlichen physikalischen Servern.

Da ich im Netz kein reines SQL-Script dazu finden konnte hier meine Lösung.

Es handelt sich dabei um ein VBScript, welches die Quelltabelle abfragt, das erhaltene Recordset durchläuft und Zeile für Zeile in die Zieltabelle schreibt.

‘Variablendeklaration
Dim objSourceCN, strSourceServer, strSourceDatabase, strSourceUser, strSourcePassword, strSourceTable, strSourceIDColumn, strSourceColumn, strSourceSQL
Dim objTargetCN, strTargetServer, strTargetDatabase, strTargetUser, strTargetPassword, strTargetTable, strTargetIDColumn, strTargetColumn, strTargetSQL
Dim objRS

‘Quelldatenbank
strSourceServer = “QUELLSERVERNAME_ODER_IP”
strSourceDatabase = “NAME_DER_QUELLDATENBANK”
strSourceUser = “BENUTZERNAME_FÜR_QUELLDATENBANK”
strSourcePassword = “PASSWORT_FÜR_QUELLDATENBANK”
strSourceTable = “QUELLTABELLE”
strSourceIDColumn = “QUELL_ID_SPALTE”
strSourceColumn = “QUELLSPALTE”

‘Zieldatenbank
strTargetServer = “ZIELSERVERNAME_ODER_IP
strTargetDatabase = “NAME_DER_ZIELDATENBANK”
strTargetUser = “BENUTZERNAME_FÜR_ZIELDATENBANK”
strTargetPassword = “PASSWORT_FÜR_ZIELDATENBANK”
strTargetTable = “ZIELTABELLE”
strTargetIDColumn = “ZIEL_ID_SPALTE”
strTargetColumn = “ZIELSPALTE”

‘Quellconnection
Set objSourceCN = CreateObject(“ADODB.Connection”)
objSourceCN.Open “Provider=SQLOLEDB;Data Source=” & strSourceServer & “;” & “Initial Catalog=” & strSourceDatabase & “;” & “User ID=” & strSourceUser & “;Password=” & strSourcePassword & “;”

‘Zielconnection
Set objTargetCN = CreateObject(“ADODB.Connection”)
objTargetCN.Open “Provider=SQLOLEDB;Data Source=” & strTargetServer & “;” & “Initial Catalog=” & strTargetDatabase & “;” & “User ID=” & strTargetUser & “;Password=” & strTargetPassword & “;”

‘SQL-Abfrage zum Abfragen der Quelldatenbank
strSourceSQL = “Select ” & strSourceTable & “.” & strSourceIDColumn & “, ” & strSourceTable & “.” & strSourceColumn & “ From ” & strSourceTable
‘SQL Abfrage zur Quelldatenbank ausführen
Set objRS = objSourceCN.Execute(strSourceSQL)

‘Gehe das RecordSet
Do Until objRS.EOF

‘SQL-Abfrage zum Ändern der Zieldatenbank
strTargetSQL = “UPDATE ” & strTargetTable & ” SET ” & strTargetColumn & “ = ‘” & objRS(strTargetColumn) & “‘ WHERE ” & strTargetIDColumn & “ = ‘” & objRS(strTargetIDColumn) & “‘”
‘Hilfsausgabe
WScript.Echo strTargetSQL
‘Ausführung SQL-Abfrage zum Ändern der Zieldatenbank
objTargetCN.Execute strTargetSQL
‘Leeren der SQL-Abfrage zum Ändern der Zieldatenbank
strTargetSQL = “”
‘Gehe ein Recordset Wert weiter
objRS.MoveNext

Loop

‘Schieße Verbindung zur Zieldatenbank
objTargetCN.Close
‘Schließe Recordset
objRS.Close
‘Schließe Verbindung zur Quelldatenbank
objSourceCN.Close

Weiterlesen ...

Ausgabe per Internet Explorer Fenster in VBScript

27. September 2010

keine Kommentare

Meistens verwendet man die Ausgabe per Dosbox bei VBScript, welche zwar recht schnell geladen ist, aber nur eingeschränkt angepasst werden kann.

Eine deutlich höhere Flexibilität bietet da die Ausgabe per Internet Explorer Fenster. Dieses kann mittels HTML, CSS ect. an jede Begebenheit angepasst werden kann.

Anbei findet ihr einen kurzen Quellcode, welcher sich durch die Kommentare für jeden verständlich sein sollte.

‘ Laden der benötigten Objekte
Set objExplorer = WScript.CreateObject("InternetExplorer.Application")
Set objWMIService = GetObject("Winmgmts:\\" & "." & "\root\cimv2")
‘ Abfragen der Desktopauflösung
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
      intHorizontal = objItem.ScreenWidth
      intVertical = objItem.ScreenHeight
      Exit For
Next
‘ Zu ladende Seite des Internet Explorer Fensters
objExplorer.Navigate "about:blank"
‘ Toolbar soll deaktiviert sein
objExplorer.ToolBar = 0
‘ Statusbar deaktivieren
objExplorer.StatusBar = 0
‘ Breite des Internet Explorer Fensters
objExplorer.Width= 400
‘ Höhe des Internet Explorer Fensters
objExplorer.Height = 110 
‘ Horizontale Position des Internet Explorer Fensters
objExplorer.Left = (intHorizontal – 400) / 2
‘ Vertikale Position des Internet Explorer Fensters
objExplorer.Top = (intVertical – 110) / 2
‘ Internet Explorer Fenster sichtbar
objExplorer.Visible = 1
‘ Ausgabe des Internet Explorer Fensters
objExplorer.Document.Body.InnerHTML = _
"<span style=""font-size:0.8em; font-family:Arial""><b>Ausgabe</b></span>"     
‘ Internet Explorer Fenster schließen
objExplorer.Quit

Weiterlesen ...

“Datei öffen”-Dialog unter VBScript

27. September 2010

keine Kommentare

Viele von euch kennen wahrscheinlich das Problem, man schreibt ein VBScript in dem eine Datei ausgewählt werden soll. Okay, man kann das auch mit Hilfe einer Inputbox lösen, aber das ist unschön.
Besser wäre hier natürlich ein "Datei öffnen"-Dialog. Folgende Zeilen Code sollten euch helfen:

‘ Objekt für den benötigten Dialog laden
Set objDialog = CreateObject("UserAccounts.CommonDialog")
‘ Auswahl der Dateitypen
objDialog.Filter = "VBScript Scripts|*.vbs|All Files|*.*"
‘ Einstellung welcher Dateityp, beim Start des Dialogs ausgewählt werden soll
objDialog.FilterIndex = 1
‘ Angabe des Pfades welcher geöffnet werden soll
objDialog.InitialDir = "C:\"
‘ Auswahl von mehreren Dateien
objDialog.Flags = &H0200
‘ Auslesen ob eine Datei vom Benutzer ausgewählt wurde
intStatus = objDialog.ShowOpen

‘ Wenn keine Datei ausgewählt wurde oder Abbrechen gedrückt ist intStatus 0
If intStatus = 0 Then
      ‘ Programm beenden
      WScript.Quit
‘ Ansonsten ist der Wert 1, was natürlich heisst, dass eine Datei ausgewählt wurde
Else
      ‘ Ausgabe des ausgewählten Dateinamen
      WScript.Echo objDialog.FileName
End If

ACHTUNG: Der "Datei öffnen"-Dialog funktioniert nur unter Windows XP!

Weiterlesen ...

E-Mail mittels VBScript versenden

22. September 2010

keine Kommentare

Hier ein kurzes VBScript, welches sich glaube ich schon von selbst erklärt.

Für weitere Erklärungen lest euch am besten die Kommentare im Quellcode durch.

Option Explicit

‘ Variablendeklaration
Dim objEmail, objFSO

‘ Objekt laden
Set objEmail = CreateObject(“CDO.Message”)

‘ E-Mailadresse des Senders
objEmail.Sender = “sender@sender.de”
‘ E-Mailadresse des Empfängers
objEmail.To = “empfaenger@empfaenger.de”
‘ Betrefftext
objEmail.Subject = “Das ist der Betrefftext”
‘ E-Mailinhalt
objEmail.TextBody = “Das ist der Inhalt der E-Mail”
‘ Dateianhang
objEmail.AddAttachment “c:\temp\readme.txt”
‘ Nutzen eines externen SMTP-Servers (1 = lokaler SMTP-Server; 2 = externer SMTP-Server)
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/sendusing”) = 2
‘ SMTP Serveradresse (IP oder Name)
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/smtpserver”) = “123.123.123.123″
‘ Port (Achtung bei SSL Verschlüsselung ist der Standardport 465)
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/smtpserverport”) = 25
‘ SSL Verschlüsselung aktivieren oder deaktieren
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/smtpusessl”) = False
‘ Einstellen des Connectiontimeouts
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout”) = 60

‘ Bei SMTP Authentifizierung folgende Zeilen verwenden (1 = Klartext)
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate”) = 1
‘ Benutzername
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/sendusername”) =”SMTP Benutzername”
‘ Kennwort
objEmail.Configuration.Fields.Item _
(“http://schemas.microsoft.com/cdo/configuration/sendpassword”) =”SMTP Kennwort”

‘ Felder laden
objEmail.Configuration.Fields.Update
‘ E-Mail versenden
objEmail.Send

Weiterlesen ...

Numlock/Capslock Status prüfen und manipulieren

18. August 2010

keine Kommentare

All zu oft sind es die kürzesten Scripte, die das Leben eines Systemadministrators deutlich vereinfachen. Das folgende Script habe ich bei einer Telefonsoftware an einer Pforte benötigt. Immer wenn jemand die Numlock-Taste deaktiviert hat war die Pforte nicht mehr erreichbar. Dies hat dazu geführt, dass man spät abends angerufen wird und dem Kunden erklären muss er  soll lediglich die Numlock-Taste drücken. 

Leider kann man mit VBScript die Tastatur nicht abfragen, weswegen ich einen kleinen Umweg über ein VB-Programm gehen musste. Natürlich hätte ich alles direkt in der EXE implementieren können, aber warum so umständlich, wenn es sowas wie einen Statusprüfer für Tastaturen schon gibt.

Ladet euch dazu von www.robvanderwoude.com die NUMLOCK.EXE herunter und speichert die direkt unter C:\. Danach kopiert ihr euch das unten aufgeführte VBScript in euren Lieblingseditor und speichert es als .vbs Datei ab. 

‘ Beschreibung

‘ Prüfe alle X Millisekunden ob Numlock aktiv ist
‘ Wenn nicht aktiere Numlock wieder 

‘ Variablendeklaration
Dim strSleep, objShell 

‘ Alle wieviel Sekunden soll Numlock geprüft werden
‘ 1000 = 1 Sekunde
strSleep = 10000 

‘ benötigte Objekte laden
Set objShell = WScript.CreateObject("WScript.Shell") 

‘ Endlosschleife wiederholt sich alle X Millisekunden
‘ anhand des in strSleep gesetzen Wertes
Do
       ‘ Wenn NUMLOCK.EXE den Wert 0 zurück gibt …
       if (objShell.run ("c:\NUMLOCK.EXE",0,true)) = 0 then
               ‘ … dann aktiviere Numlock wieder
               objShell.SendKeys "{NUMLOCK}"
       end if 

       ‘ Warte X Millisekunden
       wscript.sleep strSleep 

‘ Ende der Schleife
Loop

 

Beim Start der vbs-Datei läuft das Script in eine Endlosschleife. Bei jedem Durchlauf der Schleife startet die NUMLOCK.EXE und gibt mittels Errorlevel den Wert 0 oder 1 zurück. Der Wert 1 steht dafür wenn Numlock aktiviert ist und der Wert 0 wiederum wenn Numlock deaktiviert ist. Danach wartet das Script ein paar Millisekunden anhand des in Zeile 11 hinterlegten Wertes. Die NUMLOCK.EXE könnt ihr natürlich auch irgendwo anders ablegen als direkt auf C:\. Passt dazu einfach den Pfad in Zeile 20 im VBScript an.

Falls ihr das gleiche Script für Capslock benötigt, findet ihr auf www.robvanderwoude.com die passende EXE wie auch den passenden VB-Code den ihr auch für jede andere Taste umschreiben könnt. 

Quellen:
- www.ashelper.de
- www.robvanderwoude.com

Weiterlesen ...