VBScript läuft nicht komplett durch
Hallo zusammen,
zur Zeit arbeite ich an nem Projekt, mit dessen Hilfe die Temperaturen im RZ aus einer Software ( Templogger von Arexx ) in eine Txtdatei exportiert werden sollen. Anschließend wird diese Datei ausgelesen und die Werte werden in eine Datenbank geschrieben. Wenn ich die einzelnen Teile des Scriptes laufen lasse, funktioniert es ohne Probleme , zwar etwas langsam aber es funktioniert! Kopiere ich alles zusammen, bleibt er irgendwo hängen und schreibt nicht die Werte in die DB. Das Script soll, sofern es richtig läuft, mit dem Taskplaner alle 5 min die Werten in der DB aktualisieren.
Hat jemand ne Idee woran es liegt?
zur Zeit arbeite ich an nem Projekt, mit dessen Hilfe die Temperaturen im RZ aus einer Software ( Templogger von Arexx ) in eine Txtdatei exportiert werden sollen. Anschließend wird diese Datei ausgelesen und die Werte werden in eine Datenbank geschrieben. Wenn ich die einzelnen Teile des Scriptes laufen lasse, funktioniert es ohne Probleme , zwar etwas langsam aber es funktioniert! Kopiere ich alles zusammen, bleibt er irgendwo hängen und schreibt nicht die Werte in die DB. Das Script soll, sofern es richtig läuft, mit dem Taskplaner alle 5 min die Werten in der DB aktualisieren.
Hat jemand ne Idee woran es liegt?
'Alte Textdateien löschen
Const DeleteReadOnly = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile("c:\TempDa~1\*.txt"), DeleteReadOnly
'Einstellungen zum Export updaten
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("C:\Progra~1\Arexx\Temper~1\export-sample2.cmd", True)
MyFile.WriteLine("merge= no")
MyFile.WriteLine("grain = 0")
MyFile.WriteLine("file= c:\Tempda~1\Westring2 .txt")
Datum = Right("0" & Day(Date), 2) & "-" & Right("0" & Month(Date), 2) & "-" & Year(Date)
MyFile.WriteLine("start = " & Datum)
MyFile.WriteLine("end = 31-12-2100")
MyFile.WriteLine("sensors=all")
MyFile.Close
'Exportieren der Werte aus der Software in die Textdatei
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("C:\Progra~1\Arexx\Temper~1\export.exe C:\Progra~1\Arexx\Temper~1\export-sample2.cmd")
'Schreiben in die DB
Const pfadmesslogs = "\\S001APS021.rku.net\C$\TempDaten\"
Const pfadmesslogs1 = "\\S001APS026.rku.net\C$\TempDaten\"
Const pfadmesslogs2 = "\\S001APS024.rku.net\C$\TempDaten\"
Const DBConnectionstring = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Temperaturprojekt;Data Source=S001APS021.rku.net"
Set classTemperaturLogger = New TempLogger
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFolder(pfadmesslogs2)
For Each file In objFile.Files
classTemperaturLogger.LogDateipfad = file
'WScript.Echo file
classTemperaturLogger.Dateiname = file.Name
'WScript.Echo file.Name
classTemperaturLogger.SplitDateiName
classTemperaturLogger.ZuweisungSensorID
classTemperaturLogger.WriteToDB
Next
Class TempLogger
Public LogDateipfad
Public Dateiname
Public Sensor
Public Split_DateiName
Public Sensor_CO2
Sub SplitDateiName()
Split_DateiName = Split(Dateiname, " ")
'WScript.Echo Split_DateiName(0)
'WScript.Echo Split_DateiName(1)
'WScript.Echo Split_DateiName(2)
End Sub
Sub ZuweisungSensorID()
If Split_DateiName(1) = "_25744" Then
Sensor = "25744"
' ElseIf Split_DateiName(1) = "_8870" Then
' Sensor = "8870"
Else
Exit Sub
End If
If Split_DateiName(2) = "CO2.txt" Then
Sensor_CO2 = "CO2"
Else
Sensor_CO2 = "Temperatur"
End If
'WScript.Echo Sensor_RH
End Sub
Sub WriteToDB()
Dim arrFileLines()
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(LogDateipfad, 1)
Do Until objFile.AtEndOfStream
ReDim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = LBound(arrFileLines) +5 To UBound(arrFileLines) - 1 Step 1
split1 = Split(arrFileLines(l), " ")
'WScript.Echo split1(0)
'WScript.Echo split1(1)
Set DBConnection = CreateObject("ADODB.Connection")
DBConnection.Open DBConnectionstring
SQLString = "If '" & split1(0) & "' NOT IN (SELECT datum FROM [S001APS021].[Temperaturprojekt].[dbo].[tbl" & Sensor_CO2 & "Messungen_" & Split_DateiName(0) & "]) "_
& "BEGIN "_
& "INSERT INTO [S001APS021].[Temperaturprojekt].[dbo].[tbl" & Sensor_CO2 & "Messungen_" & Split_DateiName(0) & "] (datum, messung, idsensoren) VALUES ('" & split1(0) & "', " & split1(1)& ", " & Sensor & ") "_
& "END"
'WScript.Echo SQLString
Set Ergebnis = DBConnection.Execute(SQLString)
DBConnection.Close
Next
End Sub
End Class
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141464
Url: https://administrator.de/forum/vbscript-laeuft-nicht-komplett-durch-141464.html
Ausgedruckt am: 08.04.2025 um 17:04 Uhr
21 Kommentare
Neuester Kommentar
Hallo,
ich denke das solltest du irgendwie spezifizieren. Sonst wüsste ich nicht wie man dir hier eventuell helfen kann. Also was z.B. heißt hängen bleiben? Fehlermeldung? Endlosschleife? kommentarloses Durchlaufen ohne Effekt? Und wird denn eine Verbindung zur DB aufgebaut (SQL Server Profiler falls vorhanden)?
grüße

Hallo m3tatai!
Versuchs mal in Deinem ersten Quellcode in Codezeile 23 in dieser Art:
Durch das True am Ende wartet das Script auf den Exit der export-sample2.cmd
Gruß Dieter
Versuchs mal in Deinem ersten Quellcode in Codezeile 23 in dieser Art:
WshShell.Run("C:\Progra~1\Arexx\Temper~1\export.exe C:\Progra~1\Arexx\Temper~1\export-sample2.cmd", 0, True)
'Eventuell noch ein "WScript.Sleep 100" hinzufügen?
Gruß Dieter

Hallo m3tatai!
Habe grad mal das WshShell.Run getestet und gemerkt, dass es wegen den Klammern nicht so funktioniert, wie es soll.
In der Regel werden auch keine Klammern geschrieben, wenn kein Rückgabewert durch eine Funktion erfolgt.
Der erste Teil würde dann z.B. so aussehen:
Gruß Dieter
Habe grad mal das WshShell.Run getestet und gemerkt, dass es wegen den Klammern nicht so funktioniert, wie es soll.
In der Regel werden auch keine Klammern geschrieben, wenn kein Rückgabewert durch eine Funktion erfolgt.
Der erste Teil würde dann z.B. so aussehen:
'Alte Textdateien löschen
Const DeleteReadOnly = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile "c:\TempDa~1\*.txt", DeleteReadOnly
'Einstellungen zum Export updaten
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("C:\Progra~1\Arexx\Temper~1\export-sample2.cmd", True)
MyFile.WriteLine "merge= no"
MyFile.WriteLine "grain = 0"
MyFile.WriteLine "file= c:\Tempda~1\Westring2 .txt"
Datum = Right("0" & Day(Date), 2) & "-" & Right("0" & Month(Date), 2) & "-" & Year(Date)
MyFile.WriteLine "start = " & Datum
MyFile.WriteLine "end = 31-12-2100"
MyFile.WriteLine "sensors=all"
MyFile.Close
'WScript.Sleep 500 ???
'Exportieren der Werte aus der Software in die Textdatei
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\Progra~1\Arexx\Temper~1\export.exe C:\Progra~1\Arexx\Temper~1\export-sample2.cmd", 0, True
'WScript.Sleep 500 ???
Gruß Dieter

Hallo m3tatai!
Naja, funktionieren tut es schon, aber es irritiert ein wenig und mein erst geposteter Code hätte dann in Deiner Schreibweise so lauten müssen:
was auch irgendwie deutlich macht, dass die Klammern unsinnig sind
Gruß Dieter
Naja, funktionieren tut es schon, aber es irritiert ein wenig und mein erst geposteter Code hätte dann in Deiner Schreibweise so lauten müssen:
WshShell.Run("C:\Progra~1\Arexx\Temper~1\export.exe C:\Progra~1\Arexx\Temper~1\export-sample2.cmd"), 0, True
Gruß Dieter

Hallo m3tatai!
Vor den Unterstrichen für Zeilenumbruch muss ein Leerzeichen stehen:
Ergebnis:
@Biber
Danke für die Code-Tags
Wollte gerade darauf hinweisen, dass m3tatai den SqlString in Code-Tags setzt, damit er besser lesbar ist und Schwups waren die Code-Tags da. War wohl Gedankenübertragung
Gruß Dieter
Vor den Unterstrichen für Zeilenumbruch muss ein Leerzeichen stehen:
SqlString = "If '" & Split1(0) & "' NOT IN (SELECT datum FROM [S001APS021].[Temperaturprojekt].[dbo].[tbl" & Sensor_CO2 & "Messungen_" & Split_DateiName(0) & "]) " _
& "BEGIN " _
& "INSERT INTO [S001APS021].[Temperaturprojekt].[dbo].[tbl" & Sensor_CO2 & "Messungen_" & Split_DateiName(0) & "] (datum, messung, idsensoren) VALUES ('" & Split1(0) & "', '" & Split1(1) & "', '" & Sensor & "') " _
& "END"
If 'Split1-0' NOT IN (SELECT datum FROM [S001APS021].[Temperaturprojekt].[dbo].[tblTemperaturMessungen_DateiName-0]) BEGIN INSERT INTO [S001APS021].[Temperaturprojekt].[dbo].[tblTemperaturMessungen_DateiName-0] (datum, messung, idsensoren) VALUES ('Split1-0', 'Split1-1', 'Sensor') END
@Biber
Danke für die Code-Tags
Gruß Dieter

Hallo m3tatai!

Unterstriche für Zeilenumbruch?
Den Ergebnis-SqlString?
Code-Tags?
Gruß Dieter
Zitat von @m3tatai:
Ähm sorry ich verstehe grad nur Bahnhof - bitte nochmal das ganze für VBS-Anfänger!
Mhm, bei was verstehst Du nur BahnhofÄhm sorry ich verstehe grad nur Bahnhof - bitte nochmal das ganze für VBS-Anfänger!
Unterstriche für Zeilenumbruch?
Den Ergebnis-SqlString?
Code-Tags?
Gruß Dieter

Hallo m3tatai!
Wie, wo und warum Dein Skript in den Serverumgebungen läuft oder nicht läuft entzieht sich meiner Kenntnis. Es ging mir lediglich nur darum, das der SqlString aufgrund der fehlenden Leerzeichen vor den Zeilenumbruchzeichen (Unterstriche) nicht korrekt war. Das kann man z.B. in einer VBA-Umgebung testen, die den Sql-String als Fehlerhaft (Rot eingefärbt) anzeigt. Und bei den VALUES, bin ich auch davon ausgegangen, dass alle String-Variablen in ' ' gesetzt werden sollen/müssen.
Gruß Dieter
Wie, wo und warum Dein Skript in den Serverumgebungen läuft oder nicht läuft entzieht sich meiner Kenntnis. Es ging mir lediglich nur darum, das der SqlString aufgrund der fehlenden Leerzeichen vor den Zeilenumbruchzeichen (Unterstriche) nicht korrekt war. Das kann man z.B. in einer VBA-Umgebung testen, die den Sql-String als Fehlerhaft (Rot eingefärbt) anzeigt. Und bei den VALUES, bin ich auch davon ausgegangen, dass alle String-Variablen in ' ' gesetzt werden sollen/müssen.
Gruß Dieter