Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Werte von WinCCFlexible in SQL-Datenbank schreiben per Script

  1. #1
    Registriert seit
    30.03.2011
    Beiträge
    47
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich wollte gerne Daten archivieren aus meinem Flexible-Project per Script.
    Meine SQL-Tabelle besitzt 5 Spalten (Id=Primärschlüssel,Datum,Start,Ende,Dauer), bei einer Wertänderung einer bestimmten Variable wird mein Script ausgeführt. Hab mein Script so geschrieben, wie auf der Siemens Support Seite beschrieben 3.2 Datensatz schreiben
    http://support.automation.siemens.co...ard&viewreg=WW
    mit INSERT INTO VALUES und funktioniert auch alles soweit mit der Wertübertragung.
    Mein Problem ist aber, ich möchte gerne nur in 4 Spalten (Datum,Start,Ende,Dauer) Werte schreiben und die erste Spalte Id soll dann automatisch in der SQL-Tabelle immer einen Wert weiter springen.
    Auf der Siemens Seite wird nur beschrieben , wie man alle Spalten schreibt.
    Könnte vielleicht jemand einen Beispielcode reinsetzen,mit allen Kommas,&-Zeichen,"-Strichen usw.???
    Zitieren Zitieren Werte von WinCCFlexible in SQL-Datenbank schreiben per Script  

  2. #2
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    wo soll denn der index-wert herkommen?
    musst du schon selber erzeugen!

    ich würde so vorgehen:
    1. höchsten wert lesen (mit select und sortierung nach erster spalte)
    2. +1 auf den wert addieren
    3. und dann in alle 5 spalten mit insert schreiben

    alternativ das lesen des höchsten wertes nur einmal beim
    programmstart ausführen um zugriffe zu sparen.

  3. #3
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    warum wird der index benötigt?
    reicht evtl. auch ein zeitstempel?
    ich verwende gerne als typ "timestamp" mit "now()" bekommst du da
    das aktuelle datum und die uhrzeit eingefügt. das sollte auch eindeutig
    sein.

    hab gerade noch etwas nachgeschlagen. es gibt eine funktion
    "auto_increment". diese muß bei der definition der tabelle für eine
    spalte angegeben werden. such mal in der doku zu deinem
    sql-server danach.

  4. #4
    Registriert seit
    30.03.2011
    Beiträge
    47
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Antwort.

    Das mit der Addition würde ich gerne ausprobieren. Nur weiß ich nicht genau wie.

    Mein Code speziell für SELECT und INSERT INTO sieht jetzt folgender Maßen aus:
    SQL_Table = "SELECT * FROM"& "Tabellen_Name" & " WHERE Id = "& Dat_No

    SQL_Table = "INSERT INTO "& "Tabellen_Name" & " VALUES ('" & Dat_No & _
    "' , '" & Value_1 & "' , '" & Value_2 & "' , '" & Value_3 & "' , '" & Value_4 & "')"

    könnten vielleicht auch Fehler drin sein, bin erst Montag wieder in der Firma und seh den Code jetzt nicht vor mir.
    Wo muss ich jetzt die Addition ansetzen.
    Könntest du oder jemand mir bitte den oberen Code so umschreiben, dass es funktioniert.

  5. #5
    Registriert seit
    29.10.2010
    Beiträge
    32
    Danke
    1
    Erhielt 5 Danke für 5 Beiträge

    Standard

    setz bei deiner ersten spalte im sql server management studio die eigenschaft "identity" (increment 1), d.h. diese spalte wird dann automatisch hochgezählt.

    daten einfügen kannst du dann folgendermaßen:

    insert into tabelle (datum, start, ende, dauer) values ('hallo', 'welt', 'wie', 'gehts')

    die spalte mit deiner id kommt also gar nicht vor, das regelt der sql server dann für dich.

    (ich bin jetzt mal davon ausgegangen, du arbeitest mit dem microsoft sql server ...)
    Geändert von mkol (31.03.2011 um 09:55 Uhr)

  6. #6
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    das lesen müsste etwa so aussehen:

    SQL_Table = "SELECT * FROM " & "Tabellen_Name" & " ORDER BY Id DESC"

    damit wird die tabelle gelesen und sortiert nach Id bereitgestellt (höchste zuerst).
    du bekommst damit eine komplette tabelle als ergebnis!
    nun wie im siemens-beispiel mit RST.MOVEFIRST den ersten datensatz
    (und dmit die höchste Id) anwählen.
    lesen und erhöhen mit
    Dat_No = RST.FIELDS(0).VALUE
    Dat_No = Dat_No +1

    das ganze sollte noch auf RST.EOF und RST.BOF abgefragt werden wie
    im siemens-beispiel.

    und das schreiben passt so wie es du gemacht hast.

  7. #7
    Registriert seit
    29.10.2010
    Beiträge
    32
    Danke
    1
    Erhielt 5 Danke für 5 Beiträge

    Standard

    wenn man es unbedingt manuell machen will (was mir nicht sinnvoll erscheint), kann man auch mit

    select max(id) + 1 from tabelle

    die nächste id/den nächsten index-wert ermitteln.

  8. #8
    Registriert seit
    30.03.2011
    Beiträge
    47
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok werde eure Vorschläge am Montag gleich mal testen und dann Info geben.Danke nochmal.

    Den Vorschlag von mkol:

    insert into tabelle (datum, start, ende, dauer) values ('hallo', 'welt', 'wie', 'gehts')

    hatte ich schon mal ausprobiert, nur funktioniert es bei mir nicht.Muss dazu sagen, das mit der increment_Funktion war auch nicht aktiviert,Spalte Id war nur mit einem Primärschlüssel versehen.
    Hatte es ungefähr so geschrieben:
    SQL_Table = "INSERT INTO "& "Tabellen_Name" ("Datum","Start","Ende","Dauer") & " VALUES ('" & Dat_No & _
    "' , '" & Value_1 & "' , '" & Value_2 & "' , '" & Value_3 & "' , '" & Value_4 & "')"

    Was habe ich dort falsch gemacht??

  9. #9
    Registriert seit
    30.03.2011
    Beiträge
    47
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sorry hinter VALUES der erste Wert muss natürlich weg.
    SQL_Table = "INSERT INTO "& "Tabellen_Name" ("Datum","Start","Ende","Dauer") & " VALUES ('" & Value_1 & "' , '" & Value_2 & "' , '" & Value_3 & _
    "' , '" & Value_4 & "')"

  10. #10
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    es müsste lauten:

    SQL_Table = "INSERT INTO " & Tabellen_Name & " (Datum,Start,Ende,Dauer) VALUES ('" & Value_1 & "' , '" & Value_2 & "' , '" & Value_3 & "' , '" & Value_4 & "')"

    vorrausgesetzt Tabellen_Name ist eine Variable (String)
    Geändert von tnt369 (31.03.2011 um 11:21 Uhr)

  11. Folgender Benutzer sagt Danke zu tnt369 für den nützlichen Beitrag:

    hollyzwei (31.03.2011)

Ähnliche Themen

  1. Per Ethernet an PC in SQL Datenbank schreiben
    Von Carsten77 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 25.08.2011, 08:37
  2. Antworten: 3
    Letzter Beitrag: 28.07.2011, 11:14
  3. Antworten: 3
    Letzter Beitrag: 07.04.2010, 00:16
  4. Antworten: 3
    Letzter Beitrag: 31.10.2008, 07:34
  5. von WinCC in SQL-Datenbank schreiben
    Von mertens2 im Forum HMI
    Antworten: 13
    Letzter Beitrag: 06.10.2008, 09:15

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •