PDA

View Full Version : SQL Set problem



steven_r
04-07-07, 08:32
Hallo *all

ich verwende in einem RPG Programm ein SQL zum umwandeln Decimal in HEX


wenn ich es so mache dann stimmts:


c+ set :hexwert = hex(37)

hier kommt 25 raus ist auch richtig nur wenn ich das Variabel machen möchte dann funktioniert das nicht.


//****************************************
D hexwert s 10
D nummer s 5 0
/FREE
nummer = 37;
/end-free
c/EXEC SQL
c+ set :hexwert = hex(:nummer)
c/end-exec

hier kommt 00037F raus.
ich habe auch die Variable nummer mit s und mit p probiert, was kann hier noch falsch sein?

danke im voraus

steven_r

B.Hauser
04-07-07, 09:08
Hallo,

wenn Du Nummer statt gepackt numerisch als Integer definierst klappt es. (SQL interpretiert numerische Ausdrücke, solange kein Dezimal-Trennzeichen angegeben wurde, immer als Integer!)

Die skalare Funktion Hex konvertiert den Inhalt eines Feldes so wie er gespeichert wurde. In gepackten Feldern werden die einzelnen Ziffern in Halbbytes gespeichert und in dem letzten Halbbyte steht das Vorzeichen.

Der Inhalt von Integer-Felder wird dagegen binär gespeichert und damit zeigt Dir die Funktion HEX dann auch den gewünschten Wert an.

Eine andere Variante (ohne SQL) wäre, ein Alpha-Feld in einer Datenstruktur durch ein Integer-Feld zu überlagern.



D DSConvert DS Qualified
D Hex 1A
D Num 3U 0 Overlay(Hex)


Wenn Du jetzt 37 in DSConvert.Num schiebst, steht der Hex-Wert, den Du suchst in DSConvert.Hex.
Diese Lösung klappt allerdings nur bei numerischen Werten.

Birgitta

steven_r
04-07-07, 09:41
Danke für die rasche hilfe.

das mit der DS funktioniert so nicht wenn ich 37 in num stelle habe ich in Hex einen unlesbaren wert.

Danke nochmals das mit SQL funktioniert super.

lg
steven_r

Fuerchau
04-07-07, 10:50
Mit Birgittas Lösung wandelst du eine Zahl in Binär um.

Mit der SQL-Funktion expandierst du die Hexzeichen [0-9A-F], das ist der Unterschied.