WinCC VBS Skript auf SQL Datenbank schreiben

Junge

Level-2
Beiträge
226
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich benutze WinCC v7.5.4 und ich möchte gerne auf die WinCC Datenbank zugreifen. Ich habe bisher nur dürftige Beispiele in VBS gefunden, die mir nun aber nicht mehr weiterhelfen und vielleicht könnt ihr mir etwas auf die Sprünge helfen. Ich möchte einen Eintrag in einen vorhandenen Datensatz machen.

Mir scheint, dass mein "CommandText" nicht richtig ist, da mir APDIAG (WinCC DiagnoseTool), mir an der Zeile "DBCommand.Execute", mir folgenden Fehler ausgibt:

"Der Befehl enthielt mindestens einen Fehler.".

Vermutlich wird der Filter/Schreibbefehl falsch sein. Ich habe nun wirklich alle mögliche Fälle ausprobiert, aber ich komme nicht weiter. Die Tabelle "PRT#JOBS" hat die Datensätze aller Druckaufträge. Ziel ist es den Speicherort und Datenname zu dynamisieren, so dass ich den selben Druckauftrag immer wieder für unterschiedliche Chargen verwenden kann, da dies leider nicht direkt über den Druckauftrag mit einer Variable zu machen ist.


Die Skriptstellen habe ich mit '#####################################################
eingerahmt, wo ich denke, dass der Fehler sein könnte.

Code:
Sub DatabaseWrite ()

'1# Create connection string for ADO access
'ConnectionString = „Provider=<Providernamen>.<Instanznr.>;Catalog=<DSN der Datenbank>R;Data Source=<Rechnername>\WinCC“
'-----------------------------------------------------------------------------------------
Dim ProviderName
Dim CatalogName                                            'Data Source Name from WinCC-RT
Dim DataSourceName                                        'Name of the PC from WinCC-RT
Dim szConnectionString

'First instance of WinCCOLEDB
'------------------------
ProviderName = "Provider=WinCCOLEDBProvider.1;"
HMIRuntime.Trace "ProviderName:" & ProviderName & vbNewLine

'Name of Runtime-Database
'------------------------
Set CatalogName = HMIRuntime.Tags("@DatasourceNameRT")    'Catalog=CC_17864_21_09_08_11_12_05R (Für diese Anwendung die falsche Datenbank)
CatalogName = "Catalog=" & CatalogName.Read     
CatalogName = Left(CatalogName,Len(CatalogName) -1) & ";"'Löscht das R am Ende   
HMIRuntime.Trace "CatalogName:" & CatalogName & vbNewLine

'Data Source
'------------------------
'DataSourceName = "Data Source=.\WinCC"
Set DataSourceName = HMIRuntime.Tags("@LocalMachineName")           
DataSourceName = "Data Source=" & DataSourceName.Read &"\WinCC"
HMIRuntime.Trace "DataSourceName:" & DataSourceName & vbNewLine

szConnectionString = ProviderName + CatalogName + DataSourceName
HMIRuntime.Trace "ConnectionString:" & szConnectionString & vbNewLine
'-----------------------------------------------------------------------------------------

'2# Define command string
'----------------------------------------------------------------
Dim CommandText
Dim szValue

szValue = HMIRuntime.Tags("Configuration_Path_Test").Read

'#####################################################
CommandText = "SELECT JOBNAME FROM PRT#JOBS WHERE JOBNAME like 'PrintReportBatch_FKM_ProductionPDF' INSERT INTO PRT#JOBS(FILENAME) VALUES ('" & szValue &"');"
'#####################################################

HMIRuntime.Trace "CommandText:"& CommandText & vbNewLine
'----------------------------------------------------------------

'3# Open connection
'----------------------------------------------------------------
Dim DBConnection                                       

Set DBConnection = CreateObject("ADODB.Connection")
DBConnection.ConnectionString = szConnectionString
DBConnection.open
'----------------------------------------------------------------

'4# Execute command
'----------------------------------------------------------------
Dim DBCommand

Set DBCommand = CreateObject("ADODB.Command")
DBCommand.ActiveConnection = DBConnection
DBCommand.CommandText = CommandText
'#####################################################
DBCommand.Execute
'#####################################################
'----------------------------------------------------------------

'5# Close connection
'----------------------------------------------------------------
HMIRuntime.Trace "Connection closed again" & vbNewLine
Set DBCommand = Nothing
DBConnection.Close
Set DBConnection = Nothing
'----------------------------------------------------------------
End Sub


Ich hoffe, dass ich das Problem einigermaßen verständlich erklärt habe. Vielleicht ist das Skript auch komplett falsch, es ist mein erster Versuch überhaupt mit VBS eine Datenbankverbindung aufzubauen.
 
Zuletzt bearbeitet:
Hallo,

unabhängig davon, ob deine SQL Syntax korrekt ist (Bei dem Teil mit like sowie bei dem Insert bin ich mir ziemlich sicher dass das nicht passt) kann ich dir den Tipp geben, die Kommandos zunächst mal "theoretisch" auszuprobieren. Bei den Microsoft DBs eignet sich dazu das SSMS (Sql Server Management Studio) gut. Damit kann man schonmal prüfen ob von den Berechtigungen her alles passt und bei Syntaxfehlern bekommt man schonmal grob angezeigt, wo es hakt. Gerade wenn man nicht täglich mit Datenbanken zu tun hat ist das echt hilfreich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

erstmal DANKE für eine erste Rückmeldung. Den SQL Server von Management Studio habe ich bereits installiert, damit habe ich mir auch erstmal die ganzen Bezeichnungen/Strukturen der Datenbank/en rausgelesen.

Ich habe natürlich auch schon weiter an dem Problem herumgetüftelt und bin der Meinung, dass es eher so sein müsste:

Alt:
Code:
CommandText = "SELECT JOBNAME FROM PRT#JOBS WHERE JOBNAME like 'PrintReportBatch_FKM_ProductionPDF' INSERT INTO PRT#JOBS(FILENAME) VALUES ('" & szValue &"');"

NEU
Code:
CommandText = "UPDATE PRT#JOBS SET FILENAME = 'TESTName' WHERE JOBNAME like ''PrintReportBatch_FKM_ProductionPDF'"

Leider habe ich immer noch den selben Fehler. Vielleicht liegt es aber auch noch an dem ConnectionString ...
Es ist leider nicht der übliche Fehler und auch kein Aufgabenbereich indem sich viele Leute bewegen, aber ich hoffe trotzdem auf ein paar Hilfreiche Tipps.




Ich habe jetzt den "neuen" CommandText" im SSMS verifiziert, also hier würde ich jetzt erstmal einen Syntaxfehler ausschließen.
 
Zuletzt bearbeitet:
Hallo,

falls jemand es noch irgendjemand interessiert :), fehler lag im ConnectionString
hier ist die Lösung:

Code:
'1# Create connection string
'-----------------------------------------------------------------------------------------
Dim ProviderName
Dim DataSourceName                                            'Data Source Name from WinCC-RT
Dim szConnectionString

'First instance of WinCCOLEDB
'------------------------
ProviderName = "Provider=MSDASQL;"
HMIRuntime.Trace "ProviderName:" & ProviderName & vbNewLine

'DataSourceName of Runtime-Database
'------------------------
Set DataSourceName = HMIRuntime.Tags("@DatasourceNameRT")    'DSN=CC_17864_21_09_08_11_12_05R (Für diese Anwendung die falsche Datenbank)
DataSourceName = "DSN=" & DataSourceName.Read     
DataSourceName = Left(DataSourceName,Len(DataSourceName) -1) & ";"'Löscht das R am Ende   
'DataSourceName = "DSN=CC_17864_21_09_08_11_12_05;"
HMIRuntime.Trace "DataSourceName:" & DataSourceName & vbNewLine

szConnectionString = ProviderName + DataSourceName & "UID=;PWD=;"
HMIRuntime.Trace "ConnectionString:" & szConnectionString & vbNewLine
'szConnectionString = "Provider=MSDASQL;DSN=CC_17864_21_09_08_11_12_05;UID=;PWD=;"
'-----------------------------------------------------------------------------------------



'2# Define command string
'----------------------------------------------------------------
Dim CommandText
Dim szValue

szValue = HMIRuntime.Tags("Configuration_Path_Test").Read
CommandText = "UPDATE [CC_17864_21_09_08_11_12_05].[dbo].[PRT#JOBS] SET FILENAME ='TestName' WHERE JOBID=7"
'like 'PrintReportBatch_FKM_ProductionPDF' INSERT INTO PRT#JOBS(FILENAME) VALUES ('" & szValue &"');"
HMIRuntime.Trace "CommandText:"& CommandText & vbNewLine
'----------------------------------------------------------------



'3# Open connection
'----------------------------------------------------------------
Dim DBConnection                                       

Set DBConnection = CreateObject("ADODB.Connection")
DBConnection.ConnectionString = szConnectionString
DBConnection.open
'----------------------------------------------------------------



'4# Execute command
'----------------------------------------------------------------
Dim DBCommand

Set DBCommand = CreateObject("ADODB.Command")
DBCommand.ActiveConnection = DBConnection
DBCommand.CommandText = CommandText
DBCommand.Execute
'----------------------------------------------------------------



'5# Close connection
'----------------------------------------------------------------
HMIRuntime.Trace "Connection closed again" & vbNewLine
Set DBCommand = Nothing
DBConnection.Close
Set DBConnection = Nothing
'----------------------------------------------------------------
 
Zurück
Oben