Anmelden

View Full Version : Feld mit loval via SQL belegen



Booley
17-08-05, 10:34
Hallo zusammen,

aus einem PC-Programm sollen Daten in unsere Buchhaltung auf der iSeries importiert werden. Hierzu gibt es seitens der Buchhaltung eine Standard-Schnittstelle.

Diese ist so intelligent, dass Felder, die mit *loval belegt sind, in der Zieldatei nicht verändert werden.

Die Daten werden auf PC Seite via SQL über die CO400-Treiber von SystemObjects in die DB2/400 geschrieben.

Und jetzt mein Problem:
Wie kann ich Felder mit loval belegen? Gibt es im Sql ein Schlüsselwort für loval?

Wenn ich das richtig sehe, speichert die DB2 numerische Loval-Werte einfach z.B. mit -9 ab. Strings werden aber mit Hex(00) gespeichert und nicht mit Hex(40) für Blank.

Wer weiß Rat? Bin für jeden Tipp dankbar.

Booley

Fuerchau
17-08-05, 10:42
Da LOVAL eine Eigenart des RPG ist, müssen die Felder vom PC-Programm entsprechend mit dem kleinsten möglichen Wert belegt werden:

-9
-99
-999
-9999
-9.9
usw. je nach Ausprägung des Feldes. Es können allerdings Schwierigkeiten auftreten, da das PC-Programm ggf. mit Double arbeitet und es somit zu Rundungsproblemen bei Nachkomma kommt.

Für Zeichenfelder müssen entsprechend lange HEX'00'-Werte übergeben werden. Dies ist allerdings nahezu unmöglich, da Hex'00' als Ende einer Zeichenkette erkannt wird und somit leere Felder per SQL übergeben werden. Diese werden wiederum selbständig mit Leerzeichen aufgefüllt.

Diesbezüglich muss also die Intelligenz des AS/400-Programmes angepasst werden.

Booley
17-08-05, 10:58
Hallo,

erst einmal danke für die schnelle Antwort. Dann habe ich das Prinzip also anscheinend schon mal richtig verstanden. Bleibt das Hey(00) Problem.

Dummer Weise ist von unserer Seite kein RPG-Programm dazwischen, dass diese Aufgabe mit loval übernehmen kann. Und wir wollten es eigentlich auch vermeiden, da noch eines zwischen zu hängen, da dies nur das erste von vielen PC-Schnittstellen-Programmen ist.

Kann ich denn nicht auch über SQL Hex-Werte als Values angeben?

Gruß
Booley

Fuerchau
17-08-05, 12:11
Klar geht das: X'00....' in der Anzahl benötigter Zeichen.

B.Hauser
17-08-05, 13:00
Klar geht das: X'00....' in der Anzahl benötigter Zeichen.

Unter Release V5R3M0 könnte statt einer Aufzählung auch die Scalare Funktion Repeat verwendet werden:

Repeat(x'00', Length(MyFld))


Vor Release V5R3M0 könnte mit Hilfe der Scalaren Funktionen TRANSLATE und SPACE ein Feld komplett mit x'00' gefüllt werden.

Translate(Space(Length(MyFld)), x'00', ' ')


Birgitta

Booley
18-08-05, 08:33
Alles klar, jetzt klappt's. :D

Vielen Dank an alle!

Booley