View Full Version : unerfahren mit free RPG
Hallo,
ich muss einen free RPG Code umschreiben bin aber sehr unerfahren was free angeht. Bin über jeden Tipp dankbar. Also ich möchte in dem folgenden Code nur die Sätze in die Tabelle VorST laden in denen der Inhalt des Feldes BVNR aus der RUNDEN2 und des Feldes Vorsch (Intern definiert) gleich sind. Die Inhalte sind Alphanumerisch (5A). Ich hab schon soviel hin und her Probiert ich glaub ich mache da irgendwas grundlegendes falsch.
D Vorsch S 5A
/Free
Vorsch ='TESTT';
VorST = 'Select ' +
'KY, ARTN, VARTV, TLG, usw...
'FROM ' + %TRIM(LibName) + '.' + %TRIM(Tablename) + ' ' +
'Join BES.RUNDEN2 ON(ABARTV=ARTNRV AND ' +
'ABARTN=ARTNR) ' +
(((***und hier auch wenn BVNR = Vorsch ****))))
'WHERE ' +
'ABL <= ' + Min + ' AND TMP <>0 AND ' +
'TMPB<>0 AND TMPL<>0 ) ' +
'ORDER BY ARTN,VARTV';
/EndFree
Ich habe grade Festgestellt das das an nummerisch und nicht numerisch liegen muss.
Wenn ich Vorsch mit 11111 fülle und BVNR entsprechend auch (das Feld bleibt dabei 5A) dann klappt das.
D Vorsch S 5A
/Free
Vorsch ='11111';
Select
.
.
.
'WHERE ' +
'ABL <= ' + Min + ' AND TMP <>0 AND ' +
'TMPB<>0 AND TMPL<>0 AND BVNR= ' + Vorsch + ' ' +
'ORDER BY ARTN, VARTN';
/End-Free
Wenn ich aber Vorsch und BVNR mit AB111 fülle dann geht es nicht. Was ist den an der Syntac in der Where Clausel falsch???
Hallo,
das Ganze hat weniger mit Free-Format als mit der Aufbereitung des Strings zu tun.
Den String, den Du aufbereitest willst Du sicher später als dynamisches SQL-Statement ausführen.
Der fertige String muss sich eigentlich kopieren und z.B. mit STRSQL ausführen lassen.
Soweit so gut! Das Problem sind wahrscheinlich die alphanumerischen Felder oder Datumsfelder. Die Feldinhalte dieser Felder müssen in Hochkomata angegeben werden. Wenn Du allerdings versuchst ein einzelnen Hochkomma in einen String zu setzten, wirst Du immer Probleme erhalten. In einem String muss anstelle eines einzenlen Hochkomma 2 Hochkomata (keine Gänsefüßchen) angegeben werden.
D HK C Const('''')
/Free
String = 'Select .... +
Where MyFld = ' + HK + %Trim(MyVar) + HK +
' and MyNxtFld = ' + %Char(Num) ...
Am einfachsten ist, man definiert eine Konstante z.B. HK und verwendet diese immer dann wenn ein Hochkomma erforderlich ist.
Bei numerischen Feld-Inhalten klappt bei Dir die Abfrage, da SQL seit V5R3 numerische Felder wenn erforderlich in ein Alpha-Format konvertiert. Enthält der String jedoch nicht nur numerische Zeichen, müssen die Hochkomata unbedingt gesetzt werden.
In Deinem Fall stellt sich allerdings die Frage, ob dynamisches SQL tatsächlich notwendig ist.
Wenn das SQL-Statement immer gleich bleibt und lediglich andere Werte (z.B. Kunden-Nr.) ausgewählt werden, ist statisches SQL mit Host-Variablen wesentlich eleganter.
Birgitta
Alphanumerische Werte müssen in einfache Anführungszeichen gesetzt werden. Innerhalb deiner Zeichenketten mußt du so ein einfaches Anführungszeichen dann verdoppeln.
...
'TMPB<>0 AND TMPL<>0 AND BVNR= ''' + Vorsch + ''' ' +
...
Hallo,
danke für schnelle Anwort. Es lag tatsächlich nur an den ollen Hochkomma. Oh man ich glaub ich muss dann mal nen Kurs belegen. DANKE
holgerscherer
23-08-08, 14:57
Oh man ich glaub ich muss dann mal nen Kurs belegen. DANKE
Nee, Du musst nur an den Fingern die Hochkommata abzählen.
Und bei der Gelegenheit das Konglomerat bitte schön sauber
formatieren, das ist unübersichtlich. Da ist es kein Wunder, dass Du daran verzweifelst.
Auch wenn /free ja nicht schlecht ist, sollte man nicht gleich einen Wettbewerb im Codekomprimieren gewinnen :)
-h