VB-Skript/CSV/SQL

c.wehn

Level-2
Beiträge
608
Reaktionspunkte
47
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,

ich muss ein Progamm basteln das es mir ermöglicht:

Wert aus einer CSV (Ich hab zum üben mal eine Exceltabelle genommen) zu lesen.

Dann möchte ich ihn in die SPS bzw in die internen Variablen der HMI verarbeiten und dann später in eine SQL Datenbank übergeben.

Ich hab leider nur ganz groben einblich in VB und bin da total auf eure Zusammenarbeit angewiesen. (Ihr sollt es mir nicht schreiben aber mir sagen wann mein Fuß aufm Schlauch steht.) =)

Ich hab mich in Forum mal erkundigt und in einem Beitrag schon gelesen wie man eine Excel ausliest.

Ich hab sie erstellt mit einem Wert 10 in der Zeile A1

jetzt wollte ich diesen Wert mit einem Bit in die internen HMI Variablen laden.

Allerdings erstmal erfolglos. Gebt mir mal BITTE einen Anstoß wie ich das hinkriege

Code:
On Error Resume Next
 
Dim appExcel , fs , wbExcel , wsExcel
Dim Verzeichnis , Datei
Dim Zeile

'------------------------------------------------------------------------------
' Pointer auf Tabelle laden
Set appExcel = CreateObject ("EXCEL.Application")
Set fs = CreateObject ("Scripting.FileSystemObject")

' Objekte erzeugen
' prüfe ob datei existiert. wenn nicht erzeugen.
If Not fs.FileExists (Verzeichnis + Datei) Then
    appExcel.Workbooks.Add
    appExcel.ActiveWorkbook.SaveAs(Verzeichnis + Datei)
End If
 
Set wbExcel = appExcel.Workbooks.Open (Verzeichnis + Datei)
Set wsExcel = wbExcel.Worksheets("Tabelle1")


' Variablen-Zuweisungen ...
Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel"
Datei = "10.xls"

' Zelle lesen und um 1 erhöhen
Zeile = wsExcel.Range("A1")

If SmartTags("Auslesen") = True Then
SmartTags("Excel_A1") = Zeile
End If

 

'------------------------------------------------------------------------------
' verwendeten Speicher wieder freigeben
Set wsExcel = Nothing
Set wbExcel = Nothing
Set fs = Nothing
Set appExcel = Nothing
Set Verzeichnis = Nothing
Set Datei = Nothing
Liebe Grüße
 
Hallo c.wehn.

Volker har beschrieben wie man von Excel liest, wie man von ein Text-Datei liest (z.B CSV), und wie man in SQL schreibt.
http://www.sps-forum.de/showthread.php?t=15348

Ich finde aber das es is etwas risikant diese Aufgabe mit VBS zu lösen.
Wenn Du von ein Text-Datei liest und nicht von Excel wäre es einfacher (=stabiler), und wenn der SQL Datenbank auf den Rechner befindet, und nicht auf ein Netzwerk-Server, dann gibt es auch weniger Probleme. Dann konnte es vielleicht doch gehen.

Aber warum VBS verwenden ? (wegen Flexible ?).
Es gibt Datenbank lösungen die direkt mit Exel oder Textdateien Daten austauchen können. Es kostet etwas, aber ist dafür auch stabiler.

Andersum: Was ist Dein eigentliche Aufgabe das Du lösen muss ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo c.wehn.

Andersum: Was ist Dein eigentliche Aufgabe das Du lösen muss ?

Hallo JesperMP,

ich hab das gelesen was Volker geschrieben hat, man sollte das ja auch an dem Code erkennen können :)

Mein Problem ist das ich es in keine interne Variable bekomme.

Meine Aufgabe wie beschrieben.

Seriennummer aus CSV entnehmen,
Prüfprogramm ablaufen lassen,
Prüfergebniss mit Seriennummer in SQL schreiben.


Die CSV befindet sich auf dem Rechner, die SQL Datenbank ist extern.
 
Hallo,
es wäre wichtig, dass du in dem Script die Deklaration der Variablen und die Verwendung in der richtigen Reihenfolge machst :
Code:
[B][COLOR=red]' Variablen-Zuweisungen ...
Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel[COLOR=darkgreen]\[/COLOR]"
Datei = "10.xls"
[/COLOR][/B]
' Objekte erzeugen
' prüfe ob datei existiert. wenn nicht erzeugen.
If Not fs.FileExists (Verzeichnis + Datei) Then
    appExcel.Workbooks.Add
    appExcel.ActiveWorkbook.SaveAs(Verzeichnis + Datei)
End If
 
Set wbExcel = appExcel.Workbooks.Open (Verzeichnis + Datei)
Set wsExcel = wbExcel.Worksheets("Tabelle1")


' Zelle lesen und um 1 erhöhen
Zeile = wsExcel.Range("A1")

If SmartTags("Auslesen") = True Then
SmartTags("Excel_A1") = Zeile
End If

...
Gruß
LL
 
Hallo Larry, das ist mir auch aufgefallen allerdings will es trotzdem nicht.

Irgendwas stimmt mit der Adressierung des Verzeichnis nicht....

ist das richtig so mit dem Verzeichnis + Datei?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay... das mit dem Erstellen klappt jetzt....
was unglaublich wichtig ist für eine ordentliche Verzeichnis Adressierung ist:

Code:
Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Exce[COLOR=Black]l[/COLOR][B][COLOR=Red]\[/COLOR][/B]"
 
Also folgendes:

Ich kann jetzt die Datei erstellen wenn nicht vorhanden,
ich kann in die Datei schreiben aber ich kann nichts aus ihr raus lesen?


Die Variable "Excel_A1" ist eine interne Variable und als Integer.
Die Variable "Auslesen" ist ein Bit das ich verwende um zu sehen ob das Skript abläuft (der bit geht auch auf 1)
In D1 steht eine 6
die Variable Excel_A1 habe ich auf ein Ausgabefeld in Dezimalform gelegt

wo ist nun mein fehler?

Code:
On Error Resume Next
 
Dim appExcel , fs , wbExcel , wsExcel
Dim Verzeichnis , Datei

'------------------------------------------------------------------------------
' Pointer auf Tabelle laden
Set appExcel = CreateObject ("EXCEL.Application")
Set fs = CreateObject ("Scripting.FileSystemObject")

Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel\"
Datei = "erstellen.xls"

 
Set wbExcel = appExcel.Workbooks.Open (Datei + Verzeichnis)
Set wsExcel = wbExcel.Worksheets("Tabelle1")


SmartTags("Excel_A1") = wsExcel.Range("D1")
SmartTags("Auslesen") = True

' Tabelle abspeichern
wbExcel.Close True 'false
appExcel.Quit ()
 

'------------------------------------------------------------------------------
' verwendeten Speicher wieder freigeben
Set wsExcel = Nothing
Set wbExcel = Nothing
Set fs = Nothing
Set appExcel = Nothing
Set Verzeichnis = Nothing
Set Datei = Nothing



lg
 
Ich hatte für eine Jahr her etwas ähnliches vor.
SPS <--> WinCC Flex VBS und ADO und ODBC <--> Oracle SQL.
Es funktionierte einwandfrei. Ganze 99.99% von der Zeit.
Nach mehrere Tagen stürtzte das alles ab, und musste manuell wieder gestartet werden. So ging das jeder paar Tagen.
Das Problem lag irgendwo mit Netzwerkprobleme zwischen den Rechner und den Datenbank Server.
Das eigentliche Problem was das VBS nicht von sich selbst das Verbindung wieder aufbauen konnte. Ich habee wirklich alles probiert.
Zum schluss hatte ich ein fertiges Produkt eingesetzt (FactorySQL), und seit dann habe ich von keine Problem gehört.

Nur zum nachdenken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir setzen für die Verbindung zwischen SPS und SQL Datenbanken den SQL4Automation Connector ein. Der Vorteil ist, dass ich vollen Zugriff auf die SQL Datenbank habe und keine langsame OPC Verbindung benötige. Eine Abfrage dauert 20 bis 150 ms. Ausserdem werden neben CoDeSys SPSen auch Kuka, Stäubli und Bosch Rexroth Roboter unterstützt. Siemens wird bis Anfangs März verfügbar sein. B&R wird demnächst unterstützt. www.sql4automation.com
 
Die Variable "Excel_A1" ist eine interne Variable und als Integer.
Die Variable "Auslesen" ist ein Bit das ich verwende um zu sehen ob das Skript abläuft (der bit geht auch auf 1)
In D1 steht eine 6
die Variable Excel_A1 habe ich auf ein Ausgabefeld in Dezimalform gelegt

wo ist nun mein fehler?

Hallo,
so pauschal fällt mir da nun nichts mehr auf ...
Du hast weiter oben schon mal von CSV-Datei gesprochen. Hast du nun so eine oder eine "echte" XLS-Tabelle ?
Dann außerdem - hast du in der XLS-Tabelle das Tabellenblatt "Tabelle1" oder heißt das ggf. anders bei dir ?
Kannst du in die Tabelle hineinschreiben ?

Gruß
LL
 
Zurück
Oben