View Full Version : Aus ILE Programm direkt in IFS schreiben
Nun ja, HTML ist auch nur eine Form von XML und SQL unterstützt dies halt.
Aber es ging ja nur un dem File-IO (Lesen/Schreiben) und das ist ja nur eine Set-Anweisung "Variable <=> CLOB_FILE".
Warum immer so kompliziert, wenn doch SQL die einfachste Methode ist?
Ok, ich bin letzten auf ein Kundensystem gestoßen, wo ich keine SQL-Programme erstellen kann;-).
... naja, wenn ich mir diesen Murks anschaue, der aus einer Deklaration mit SQLTYPE gemacht wird - eine Art Struktur mit prefix-Namen, die keine ist, da war doch ein RPGII Programmierer am Werk. Empfehlen kann ich das eher nicht! Vom Error Handling ganz zu schweigen.
D*B
Ich habe aber keine Probleme damit, und das Errorhandling ist halt SQLCODE und SQLSTATE.
Und es ist halt einfacher als die C-Routinen einzubinden;-).
Da es bereits seit V5R2 (oder so) existiert hat man halt an der Struktur nichts mehr geändert.
Und damals klappte das auch ohne ILE.
Mein Trick ist, die Datei nach dem Erstellen gleich zu schliessen und erneut zu öffnen:
Flags = O_WRONLY + O_CREAT + O_APPEND + O_CCSID;
Mode = S_IRWXU + S_IRWXG + S_IRWXO;
Fd = Open(%Trim(IfsLink):Flags:Mode:1252);
Callp Close(Fd);
Fd = Open(%Trim(IfsLink):O_CCSID+O_WRONLY+O_TEXTDATA:0: 0);
Wollte kurz berichten:
hat alles geklappt! Vielen Dank!
Grüße Frank
Wofür 2 Open? Nach dem 1. Open solltest du bereits Daten schreiben können.
Hallo,
dachte ich auch! Aber: wenn ich nach dem ersten öffnen schreibe, dann hat die Datei einen undefinierten Inhalt.
Beispielsweise "Hello World" sieht dann so aus:
È…““–@æ–™“„@
Im iNavigator sieht es korrekt aus!
Wenn ich die Datei schreibe und anschließend wieder gleich schließe und danach erneut öffne, kann ich die Datei einwandfrei beschreiben und alles sieht ok aus!
Das war einer der Punkte mit dem ich mich schwer tat!
Dann stimmt was mit deiner Job-Umgebung nicht, denn im 1. Open gibst du eine CCSID 1252 an, im 2. Open verwendest du CCSID 0.
Hast du mal deine Job-CCSID geprüft? Ist die u.U. wieder mal *HEX?
... der casus knaxus sind die flags. Beim ersten open wird die CCSID angegeben und die Datei erstellt. Das 2. open wird als Textdatei gemacht, was Konvertierung bedeutet.
D*B
Dann kann man das Flag O_TEXTDATA ja bereits beim 1. Open angeben;-).
OK! Dann werde ich das heute mal probieren! Melde mich sobald ich näheres weiß.