WinCC flex VBS <-> MySQL

erzteufele

Level-2
Beiträge
738
Reaktionspunkte
167
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

in der Faq gibt es ja einen kleinen Code um daten mittels vbs an eine datenbank zu schicken dieses hier

Code:
Const db_server="192.168.1.1"
Const db_port= "3306"
Const db_user= "root"
Const db_pass= "MeinPasswort"
Const db_name= "test"
Const db_tabelle= "tabelle"

Dim Sql, conn, strConnectString, rs
  
     ' sql-Anweisung
     Sql = "INSERT INTO " & db_tabelle & " ( datum, zeit ) values ('" & Date & "' , '" & Time & "' );"
 
     ' Verbindung zu MySql Server initialisieren
     Set conn=CreateObject("ADODB.Connection")
     strConnectString = "DRIVER={MySQL ODBC 5.1 Driver};" _
               & "SERVER=" & db_server & ";" _
               & " DATABASE=" & db_name & ";" _
               & "UID=" & db_user & ";PWD=" & db_pass & "; OPTION=3"
     conn.Open strConnectString                               
     'ausführen
     Set rs=CreateObject("ADODB.recordset")
     rs.Open Sql, conn          
     conn.Close

was muss ich denn machen wenn ich was aus der datenbank lesen und auf eine variable schreiben will.

also z.b. in der datenbank gibt es eine tablle, in der ersten spalte, in der ersten zeile ist, ein boolischer wert diesen hätte ich gerne auf der runtime im prinzip muss ich doch nur den sql befehl ändern in "select ...." aber dann wie bekomm ich diese daten dann angezeigt? :confused: wahrscheinlich ist es mal wieder viel zu einfach und ich stell mich wieder blöd dran... kann aber auch grad nicht testen hab keine datenbank zur verfügung diese baut unser it´ler erst nachem urlaub auf..

grüßel erzi
 
es gibt in einer datenbank sowas wie zeile,spalte nicht.
das funktioniert völlig anders wie in einer tabellenkalkulation.

du musst gezielt in der datenbank in einem oder mehreren feldern nach der gewünschten abfrage suchen


Code:
Set objRecordset = dbConn.Execute("SELECT DISTINCT 'Column' FROM 'Database'.'table' WHERE ID=27 AND ExtraFieldID=53")
While Not objRecordset.EOF
   strValue = objRecordset.Fields("Column").Value
   objRecordset.MoveNext 'springe zum nächsten datensatz
Wend
MsgBox strValue
schau mal hier. das ist zwar php veranschaulicht aber ganz gut wie das ganze funktioniert
http://www.php-einfach.de/einf_mysql_weitere_abfragen.php
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
um das, was Volker schreibt vielleicht noch einmal etwas anders darzustellen :
Du sprichst nicht direkt Elemente an sondern du kommunizierst im Grunde mit einem Programm.
Dabei stellst du z.B. eine Anfrage wie "was steht in der Spalte 'Name' drin" und du bekämst hier möglicherweise alle Inhalte der Spalte zurück geliefert.
Oder du sagst "Schreibe in die namentlich benannte Tabelle in die Spalten 'Datum' und 'Uhrzeit' die Werte von 'Date' und 'Time' hinein ...

Entscheidend ist hier, die Sprach-Syntax des SQL-Servers zu kennen, die unabhängig von deiner Entwicklungssprache ist.

Gruß
Larry
 
ok irgendwie wird´s funktionieren müssen ;) danke schonmal jetzt brauch ich erstmal eine testumgebung.

aber mal so generell warum ich dies überhaupt mache :D vielleicht gibt es ja schon fertige lösungen ;)
ich muss von einer SPS DMC code´s an ein ERP system schicken wenn 4 tray´s voll sind = 48teile soll ich dem ERP system sagen das es jetzt drucken soll, dann generiert der system eine chargennr. das etikett usw... der druck fällt auf den stapel tray´s und die maschine darf den stapel ausschieben.

ich wollte jetzt eigentlich die dmc´s in die datenbank schieben und dann eine tabelle in der datenbank quasi als kommunikation schnittstelle zum erp nutzen mit den signalen drucker ist bereit, drucken starten, druck beendet usw...

glaube aber fast ein opc wäre vielleicht dafür besser geeignet oder wie seht ihr dies? habt ihr sowas schonmal gemacht?

grüßel erzi
 
Hallo,
etwas in der Form, wie bei dir habe ich noch nicht gemacht. Dennoch bin ich der Meinung, das du den richtigen Weg verfolgst (ohne genauere Kenntnis deines Vorhabens) wenn du die Daten in die Datenbank schreibst. Du mußt es halt nur richtig machen ... 8)
Ich würde mich dafür also erstmal an einer Test-Datenbank austoben ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
auch ein opc-server muss seine daten erstmal irgendwoher bekommen. opc ist nur eine andere art die daten in die sps zu bekommen.

grundsätzlich gibt es mehrere möglichkeiten. z.b. excel-datei, csv-datei usw.
 
so habe mal eine testdatenbank, treiber installiert aber ich bekomme die meldung

[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben

Code:
Const db_server="172.16.0.227"
Const db_port= "3306"
Const db_user= "sps"
Const db_pass= "sps"
Const db_name= "test"
Const db_tabelle= "wincc"

Dim Sql, conn, strConnectString, rs
  
     ' sql-Anweisung
     Sql = "INSERT INTO " & db_tabelle & " ( datum, uhrzeit ) values ('" & Date & "' , '" & Time & "' );"
 
     ' Verbindung zu MySql Server initialisieren
     Set conn=CreateObject("ADODB.Connection")
     strConnectString = "DRIVER={MySQL ODBC 5.1 Driver};" _
               & "SERVER=" & db_server & ";" _
               & "DATABASE=" & db_name & ";" _
               & "UID=" & db_user & ";PWD=" & db_pass & "; OPTION=3"
     conn.Open strConnectString                               
     'ausführen
     Set rs=CreateObject("ADODB.recordset")
     rs.Open Sql, conn          
     conn.Close
2014-09-10_160143.jpg

sollte doch alles richtig sein oder ?

grüßel erzi
 
ist das ein mist... sorry hab den x64 treiber installiert weil ich ja ein 64bit system habe... aber winccflex läuft als 32bit instanz... da muss auch der 32bit treiber installiert sein habe ich auch erst irgendwo im netz gelesen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt hab ich noch eine kleine frage ;)

nun mag ich den inhalt der ersten spalte "Row_1" mit dem index 1 (indexspalte) auslesen und in eine datei speichern, die Spalte ist ein 2byte int und die variable in wincc flex auch aber es kommt ein typkonflikt ...

Code:
     ' sql-Anweisung
     Lesen = "SELECT Row_1 FROM `Table_2` WHERE id=1"
 
     ' Verbindung zu MySql Server initialisieren
     Set conn=CreateObject("ADODB.Connection")
     strConnectString = "DRIVER=MySQL ODBC 5.1 Driver;" _
               & "SERVER=" & db_server & ";" _
               & "DATABASE=" & db_name & ";" _
               & "UID=" & db_user & ";PWD=" & db_pass & "; OPTION=3"
     conn.Open strConnectString                               
     'ausführen
     'Set rs=CreateObject("ADODB.recordset")
     'rs.Open
     Ausgelesen = conn.execute(Lesen)
      SmartTags("Variable_1")=Ausgelesen       
     conn.Close

kann ich mir irgendwie anzeigen lassen was generell in Ausgelesen drin steht?

grüßel erzi
 
fels jmd mal sowas machen sollte...
Code:
Const db_server="172.16.0.227"
Const db_port= "3306"
Const db_user= "sps"
Const db_pass= "sps"
Const db_name= "test"
Const db_tabelle= "wincc"

Dim conn, strConnectString, Lesen, rs, Schreiben
  
     ' sql-Anweisung
     Lesen = "SELECT `Drucker Bereit`,`Drucker drucken`,`Drucker Fertig` FROM `Kommunikation` WHERE id=1"
     Schreiben ="UPDATE `test`.`Kommunikation` SET `Drucker drucken` = '" & SmartTags("Daten.KommunikationG4W.Drucker_drucken") & "' WHERE `Kommunikation`.`id` = 1;" 
     
     ' Verbindung zu MySql Server initialisieren
     Set conn=CreateObject("ADODB.Connection")
     strConnectString = "DRIVER=MySQL ODBC 5.1 Driver;" _
               & "SERVER=" & db_server & ";" _
               & "DATABASE=" & db_name & ";" _
               & "UID=" & db_user & ";PWD=" & db_pass & "; OPTION=3"
     conn.Open strConnectString                               

     Set rs=CreateObject("ADODB.Recordset")
     
     rs.open Lesen,conn,1,1
     
     SmartTags("Daten.KommunikationG4W.Drucker_Bereit")=rs.fields(0) 
     'SmartTags("Daten.KommunikationG4W.Drucker_drucken")=rs.fields(1)
     SmartTags("Daten.KommunikationG4W.Drucker_Fertig")=rs.fields(2)
     rs.close
     
     rs.open Schreiben,conn
             
     conn.Close
 
Zurück
Oben