Twincat 3: SQL-Befehl mit Variablen

bBrice.Youemto

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
[FONT=&quot]Hallo Leute,[/FONT]

[FONT=&quot]ich habe den folgenden String String mit einen SQL-Befehl angelegt.

[/FONT]
sCmd := 'INSERT INTO Windpark_3 (ID_SPS, Timestamp_SPS, Phase1) VALUES (23,$'2015-09-10 13:34:34.999$',234.2)';

[FONT=&quot]Klappt auch ganz gut. Damit habe ich den Datensatz in meiner Datenbank (MySQL) eingefügt.
[/FONT]

[FONT=&quot]Wie kann ich eine Variabel einbauen ? D.h ich möchte die 3 Werte durch 3 Variable ersetzen. [/FONT]

[FONT=&quot]Bin über jede Hilfe dankbar.[/FONT]
[FONT=&quot]Gruß Brice[/FONT]
 
Das Hochkomma definiert das du einen String hast - geht auch bei SQL-Befehlen ja gar nicht anders.

Du kommst somit nicht umher dir deinen String selber zusammenzubasteln und die Werte der Variablen dort einzufügen.
Hilfreich hierfür : FB_FormatString aus der Utility - Bibliothek

Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit der Funktion CONCAT kannst Du zwei Strings zusammenführen.
Code:
sCmd := CONCAT('INSERT INTO Windpark_3 (ID_SPS, Timestamp_SPS, Phase1) VALUES (', ..._TO_STRING(Var1));
sCmd := CONCAT(sCmd, ',$'');
sCmd := CONCAT(sCmd, ..._TO_STRING(Var2));
sCmd := CONCAT(sCmd, '$',');
sCmd := CONCAT(sCmd, ..._TO_STRING(Var3));
sCmd := CONCAT(sCmd, ')');

Soweit die Variablen schon Strings sind kannst Du Dir die Wandlung in einen String natürlich schenken. Guga war schneller, sein Vorschlag ist praktischer, weil es dann nur ein Einzeiler ist.
 
Zuletzt bearbeitet:
Das hat funktioniert. Vielen Danke Giga!!!

Ich habe noch eine Frage bitte: Da MySQL Database Server sehr langsam ist, möchte ich die Performance meines Datenloggers verbessert, indem bei einem Datenloggen z.B. 30 Datensätze zugleich in der MySQL-Datenbank geschrieben werden. Das ist möglich mit dem SQL-Befehl :

'INSERT INTO tabellenname (feld1, feld2, feld3) VALUES (wert11,$'wert12$',wert23), (wert21,$'wert22$',23), (wert31,$'wert32$',wert33), …, (wert101,$‘wert102$‘,wert103)‘;

wert11, wert12, wert13, ..., wert301, wert302, wert303 sind Variable.

Ich möchte beim Datenloggen z.B. 30 Datensätze in die Datenbank schreiben. Wie kann ich den oben stehenden SQL Befehl mit FB_FormatString aufbauen Denn der Baustein kann String mit einer maximalen Länge von 255 Zeichen bearbeiten.

Vielen dank und beste Grüße,
Brice
 
Hallo Brice,

wenn du nur "einfache" Inserts oder Updates machen möchtest, dann kannst du auch über den TwinCAT Database Server selbst Symbole erfassen und updaten lassen - entweder zyklisch oder bei Wertänderung. Das geht mit strukturierten Daten echt gut und TwinCat nimmt dir komplett das Handling ab.

Ich habe dazu auf dem MySQL Server eine Tabelle erstellt, in der ich die "Aktualwerte"speichere und dann über einen Trigger (before update) habe ich die Werte aus der Aktualwert-Tabelle in eine "Historie" geschrieben.

Eventuell ist dieser Weg für dich auch gangbar.

Viele Grüße!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein String den du mit den typischen Operatoren manipulieren kannst ist max 255 Char lang.
Allerdings "frisst" der SQL-Baustein ja soviel ich mich erinnere eine Adresse mit einer Länge.
Du kannst dann (leider händisch) diverse Sub-Strings erzeugen und sie dann per Memcpy in ein grosses Datenstream schreiben (0-Wert zur Terminierung nicht vergessen).
Das müsste der Baustein dann fressen. Der ist auf 10.000 Bytes limitiert.

Guga

P.S. Es gibt mehrere Bausteine. Alt und Neu. Du musst also eventuell den Typ wechseln von alt nach neu.
 
Zurück
Oben