PDA

View Full Version : VARCHAR RPG + DB



harkne
18-11-05, 08:13
Hallo alle,

ich hab mal eine Frage bezüglich VARCHAR-Felder in Dateien.
Falls ich mich richtig erinnere musste man früher bei der Umwandlung von RPG-Programmen CVTOPT(*VARCHAR) angeben. Jetzt meinte ein Kollege dass er es auch ohne umwandeln konnte. Funktioniert dann das abspeichern mit variabler Länge noch richtig ? Kann mir jemand dazu was näheres sagen. Wofür brauche ich wenn es auch ohne geht dann noch CVTOPT(*VARCHAR) ?

Vielen Dank für Eure Mühe

Viele Grüsse Harald

Fuerchau
18-11-05, 08:46
Wenn kein *VARCHAR definiert ist, werden die Felder in RGP gar nicht erst übernommen. Solnage ich sie nicht referenziere (also verwende) gibt es auch keine Probleme.
In ILERPG werden die die Felder mit dem Attribut VARYING definert, so dass die Länge bei Zuweisungen und Vergleichen korrekt ermittelt wird. Ansonsten werden sie als Felder fester Länge definiert, so dass auch bei Zuweisungen das Feld mit Leerzeichen aufgefüllt wird, der Vorteil der variablen Speicherung also verloren geht.

Ausserdem unterscheiden sich die Funktionen %SIZE und %LEN !

harkne
18-11-05, 09:17
Also dass ich es richtig verstehe.

Bei mir geht es um ILE RPG

Dort ist es nicht notwendig CVTOPT(*VARCHAR) anzugeben da dies automatisch gehändelt wird, oder wird das Feld mit Leerstellen aufgefüllt ?

Fuerchau
18-11-05, 10:06
OK, da habe ich mich etwas vertan. Es ist genau anders herum !
Fehlt die Angabe *VARCHAR werden in ILE die Felder als *VARY automatisch definiert.
Mit Angabe *VARCHAR werden die Felder als feste Felder definiert, wobei allerdings die Stellen 1-2 die Länge des Inhaltes als 2-Byte-Binärfeld enthält und im Programm selber verwaltet werden muss.

Bei RPG wurden VARLEN-Felder entweder nicht übernommen (ggf. Fehler bei der Umwandlung) oder als Felder fester Länge definiert.

Zu beachten ist bei Umstellung von RPG auf RPGLE also folgendes (insbesonders wenn CVTRPGSRC verwendet wurde):
Wurde RPG mit *VARCHAR umgewandelt, muss das auch mit dem umgestellten Programm gemacht werden, da sonst die ggf. vorhandene Selbstverwaltung der Längeninformation nicht funktioniert.
Bei neuen ILERPG's kann dies entfallen, da die Längeninfo automatisch verwaltet wird. Sollten allerdings Copy's verwendet werden, die sich auf *VARCHAR verlassen, so ist das entsprechend zu berücksichtigen.

Auch bei Programmaufrufen / Programmparametern mit *VARY-Feldern ist entsprechend aufzupassen.