TIA V18 - Concat Zusammenfügen von Strings

tomlei

Level-2
Beiträge
139
Reaktionspunkte
11
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich übergebe einem FC String und Real Variablen und setze sie mit Concat zusammen zu einem SQL String. Zrück bekomme ich den String.

Code:
IF #fld_entityName_DS1 <> '' THEN
    #str1 := '';
    #str1 := 'INSERT INTO PLC (entityName, entityValueReal) VALUES (';
    #str_fld1_DS1 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS1, IN3 := '$'');
    #str_fld2_DS1 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS1, N := 3);
    #str_fld1_DS2 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS2, IN3 := '$'');
    #str_fld2_DS2 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS2, N := 3);
    #str_fld1_DS3 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS3, IN3 := '$'');
    #str_fld2_DS3 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS3, N := 3);
    #str_fld1_DS4 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS4, IN3 := '$'');
    #str_fld2_DS4 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS4, N := 3);
    #str_fld1_DS5 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS5, IN3 := '$'');
    #str_fld2_DS5 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS5, N := 3);
    #str_fld1_DS6 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS6, IN3 := '$'');
    #str_fld2_DS6 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS6, N := 3);
    #str_fld1_DS7 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS7, IN3 := '$'');
    #str_fld2_DS7 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS7, N := 3);
    #str_fld1_DS8 := CONCAT(IN1 := '$'', IN2 := #fld_entityName_DS8, IN3 := '$'');
    #str_fld2_DS8 := "REAL_TO_STRF"(IN := #fld_entityValueReal_DS8, N := 3);
    
    #SQLString := CONCAT(
                         IN1 := #str1,
                         IN2 := #str_fld1_DS1,
                         IN3 := ',',
                         IN4 := #str_fld2_DS1,
                         IN5 := ')');
    #SQLString := CONCAT(
                         IN1 := #SQLString,
                         IN2:=  ',(',
                         IN3 := #str_fld1_DS2,
                         IN4 := ',',
                         IN5 := #str_fld2_DS2,
                         IN6 := ')');
    #SQLString := CONCAT(
                         IN1 := #SQLString,
                         IN2 := ',(',
                         IN3 := #str_fld1_DS3,
                         IN4 := ',',
                         IN5 := #str_fld2_DS3,
                         IN6 := ')');
    #SQLString := CONCAT(
                         IN1 := #SQLString,
                         IN2 := ',(',
                         IN3 := #str_fld1_DS4,
                         IN4 := ',',
                         IN5 := #str_fld2_DS4,
                         IN6 := ')');
    #SQLString := CONCAT(
                         IN1 := #SQLString,
                         IN2 := ',(',
                         IN3 := #str_fld1_DS5,
                         IN4 := ',',
                         IN5 := #str_fld2_DS5,
                         IN6 := ')');
    #SQLString := CONCAT(
                         IN1 := #SQLString,
                         IN2 := ',(',
                         IN3 := #str_fld1_DS6,
                         IN4 := ',',
                         IN5 := #str_fld2_DS6,
                         IN6 := ')');

        #SQLString := CONCAT(
                             IN1 := #SQLString,
                             IN2 := ',(',
                             IN3 := #str_fld1_DS7,
                             IN4 := ',',
                             IN5 := #str_fld2_DS7,
                             IN6 := ')');
        #SQLString := CONCAT(
                             IN1 := #SQLString,
                             IN2 := ',(',
                             IN3 := #str_fld1_DS8,
                             IN4 := ',',
                             IN5 := #str_fld2_DS8,
                             IN6 := ')');
END_IF;
Mit dem $' soll dem Text ein ' davor und danach hinzugefügt werden. Warum erscheint dann im String nicht nur das ' sondern auch das $ ??
Also:
'INSERT INTO PLC (entityName, entityValueReal) VALUES ($'Filter1$',6159.500),($'Filter2$',6148.890),($'ORI$',6235.000),($'4$',0000),($'5$',0000),($'6$',0000)'
 
Sicher? Könnte es sein, dass du beim Beobachten einem Irrtum unterliegst? Beobachte mal die Zeichen des Strings einzeln, nicht nur als Zeichen sondern auch als Hex. Vermutlich wird das ' auch beim Beobachten als $' angezeigt und es ist gar kein $ enthalten.
 
Sicher? Könnte es sein, dass du beim Beobachten einem Irrtum unterliegst? Beobachte mal die Zeichen des Strings einzeln, nicht nur als Zeichen sondern auch als Hex. Vermutlich wird das ' auch beim Beobachten als $' angezeigt und es ist gar kein $ enthalten.
Da der SQL Server einen Fehler rückmeldete hatte ich mir den String als Text exportiert und dort sind tatsächlich diese Zeichen $ enthalten. Damit ist der SQL Befehl natürlich ungültig und kann nicht ausgeführt werden. Eigentlich sollten nur die Zeichen ' den Text der Feldnamen umschließen.
 
Da der SQL Server einen Fehler rückmeldete hatte ich mir den String als Text exportiert und dort sind tatsächlich diese Zeichen $ enthalten. Damit ist der SQL Befehl natürlich ungültig und kann nicht ausgeführt werden. Eigentlich sollten nur die Zeichen ' den Text der Feldnamen umschließen.
Moin,

ich habe in einem Projekt die Daten für unseren Dienst ähnlich vorbereitet wie du das vorhast.
Am Escapezeichen wirds wohl nicht liegen:

Code:
// Auszüge
...
        IF #temp_usiCnt = 0 THEN
          #temp_strOut := '(0,$'';
        ELSE
          #temp_strOut := ',(0,$'';
        END_IF;

...

        IF #temp_transfer.dwFlags.%B0 = 1 THEN
          #temp_strOut := CONCAT(IN1 := #temp_strOut, IN2 := ',$'1000$'');
        ELSE
          #temp_strOut := CONCAT(IN1 := #temp_strOut, IN2 := ',$'0000$'');
        END_IF;
        
...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da der SQL Server einen Fehler rückmeldete
Was für einen Fehler?

hatte ich mir den String als Text exportiert und dort sind tatsächlich diese Zeichen $ enthalten.
Womit exportiert?

Ich kann nur noch einmal darauf hinweisen: schau dir den erzeugten String genau an, jedes Zeichen einzeln und als Hex! Wenn du die einzelnen Zeichen in TIA als "Zeichen" anschaust, dann ist es logisch, dass die ' als $' angezeigt werden. Als Hex würdest du erhalten:
16#24 = $
16#27 = '
Sind in dem Text 16#24 enthalten? Oder doch nur 16#27, wie es sein soll?
Nach deinen Angaben in #1 wird in dem Strring kein '$'-Zeichen drin sein.
 
Was für einen Fehler?


Womit exportiert?

Ich kann nur noch einmal darauf hinweisen: schau dir den erzeugten String genau an, jedes Zeichen einzeln und als Hex! Wenn du die einzelnen Zeichen in TIA als "Zeichen" anschaust, dann ist es logisch, dass die ' als $' angezeigt werden. Als Hex würdest du erhalten:
16#24 = $
16#27 = '
Sind in dem Text 16#24 enthalten? Oder doch nur 16#27, wie es sein soll?
Nach deinen Angaben in #1 wird in dem Strring kein '$'-Zeichen drin sein.
Ich speichere die Strings zyklisch in einem Fifo und lasse den mit einem anderen Zyklus abarbeiten. Dort hatte ich die Variablen Ausgabe beim Beobachten kopiert. Das war aber gar nicht das Problem. Insofern hattest du Recht mit deinem Hinweis.

Die Fehlermeldung bekam ich vom Baustein TokenAnalyzer. Allerdings verbarg sich dahinter ein Zugriffsfehler zum Server.

Jetzt funktioniert dieser Part einwandfrei.
 
Zurück
Oben