Strings zusammenfügen für Datenbank eintrag

Gizzl0r

Level-1
Beiträge
142
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
TC3 Strings zusammenfügen für Datenbank eintrag

Guten Morgen,
versuche gerade einen String zusammen zu bauen der per SQL Befehl in die DB geschrieben wird.
Um den String zusammen zu setzen, hatte ich Concat versucht, dieser ist jedoch auf 255 Stellen begrenzt. Gibt es eine größeres Concat?

Der Befehl sieht zur Zeit so aus:

sCmd :='INSERT INTO dbo._PTPM2 (_Auftragsnummer,_Bestaetigungsnummer,_Breite_Ist,_Breite_Soll,_Fertigungsauftragsnummer,_Hoehe_Ist,_Hoehe_Soll,_Kunde,_Kundennummer,_Laenge_Ist,
_Laenge_Soll,_Personalnummer,_PN,_Produktbezeichnung,_Pruefdatum,_Schaltkraft_MP_1,_Schaltkraft_MP_2,
_Schaltkraft_MP_3,_Schaltkraft_MP_4,_Schaltkraft_MP_5,_Schaltkraft_MP_6,_Schaltkraft_MP_7,_Schaltkraft_MP_8,_Schaltkraft_MP_9,
_Seriennummer,_Zeitstempel) VALUES ($'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$',$'V$')';


wobei die $'V$' durch Messvariablen ersetzte werden sollen.
Gibt es hierfür eine elegante Lösung?
Gruß
Daniel
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldigung hatte es vergessen. Es handelt sich hierbei um TC3.
Hatte gerade die Funktion Concat2 gefunden.

Diese hatte ich so aufgebaut:

VAR
sCmd: POINTER TO STRING;
sCmd2: POINTER TO STRING;
scmd3: POINTER TO STRING;
sCmd_string:STRING(3000);
sCmd2_string:STRING(3000);
sCmd3_string:STRING(3000);
END_VAR

sCmd_string:='INSERT INTO..........';
sCmd2_string:='VALUES ('...........;

scmd:=ADR(sCmd_string);
scmd2:=ADR(sCmd2_string);

concat2(pSrcString1:= sCmd, pSrcString2:= sCmd2, pDstString:=scmd3 , nDstSize:= SIZE OF(scmd3);

scmd3_string:=scmd3^;



Hierbei wirft er mir jedoch einen Fehler raus und die SPS geht in den Fehlermodus.
 
Moin!

Sieh dir mal den FunctionBlock FB_FormatString an. Damit kannst du dir auch dein sCmd zusammensetzen.

Wenn bedarf besteht suche ich das mal aus meinem Code heraus. Ist aber vermutlich sehr stümperhaft gelöst, aber es funktioniert.

Gruß
 
@wollvieh
super. Das klappt. Jedoch habe ich denke ein Logisches Denkproblem.

Zur Zeit mache ich es so:
VAR

psCmd_ADR:STRING(1500):='INSERT INTO dbo._PTPM2 (_Auftragsnummer,_Bestaetigungsnummer,_Breite_Ist,_Breite_Soll,_Fertigungsauftragsnummer,_Hoehe_Ist,_Hoehe_Soll,_Kunde,_Kundennummer,_Laenge_Ist,_Laenge_Soll,_Personalnummer,_PN,_Produktbezeichnung,_Pruefdatum,_Schaltkraft_MP_1,_Schaltkraft_MP_2,_Schaltkraft_MP_3,_Schaltkraft_MP_4,_Schaltkraft_MP_5,_Schaltkraft_MP_6,_Schaltkraft_MP_7,_Schaltkraft_MP_8,_Schaltkraft_MP_9,_Seriennummer,_Zeitstempel) VALUES (';

psCmd2_ADR:STRING(1500):='GL_VAR.auftragsnr_links,GL_VAR.bestaetigungsnummer_links,GL_VAR.breite_ist_links,GL_VAR.breite_links,GL_VAR.fertigungsauftnr_links,GL_VAR.hoehe_ist_links,GL_VAR.hoehe_links,GL_VAR.kunde_links,GL_VAR.kundennr_links,GL_VAR.laenge_ist_links,GL_VAR.laenge_links,GL_VAR.personalnummer_links,GL_VAR.produktnr_links,GL_VAR.produktbezeichnung_links,GL_VAR.zeitstempel_links,GL_VAR.kmz_messung_links[0],GL_VAR.kmz_messung_links[1],GL_VAR.kmz_messung_links[2],GL_VAR.kmz_messung_links[3],GL_VAR.kmz_messung_links[4],GL_VAR.kmz_messung_links[5],GL_VAR.kmz_messung_links[6],GL_VAR.kmz_messung_links[7],GL_VAR.kmz_messung_links[8],GL_VAR.kmz_messung_links[9],GL_VAR.seriennummer,GL_VAR.zeitstempel_links';

psCmd3_ADR:STRING(1000);
psCmd4_ADR:STRING(3000);


END_VAR



psCmd:=ADR(psCmd_ADR);
psCmd2:=ADR(psCmd2_ADR);
psCmd3:=ADR(psCmd3_ADR);
// call sql command
concat2(pSrcString1:= psCmd, pSrcString2:= psCmd2, pDstString:=pscmd3 , nDstSize:= 2000);


psCmd4_ADR:=psCmd3^;



3:
IF fbSQLCommand.Execute(ADR(psCmd4_ADR), SIZEOF(psCmd4_ADR)) THEN
IF fbSQLCommand.bError THEN
nState := 255;
ELSE
nState := nState+1;
END_IF
END_IF



In der psCmd4_ADR befindet sich nur ein kleiner Teil des Strings ('INSERT INTO dbo._PTPM2 (_Auftragsnummer,_Bestaetigungsnummer,_Breite_Ist,_Breite') das wars...

Ebenso würde er doch statt die Messdaten in GL_VAR.Artikelnummer etc. reinzupacken nur die Variablenbezeichnung in diesem Fall "GL_VAR.Artikelnummer" in die datenbank schreiben oder?
 
Zuletzt bearbeitet:
Zurück
Oben