Hallo,

da liegt wohl ein Missverständnis vor.

Ich verwende ein Prepared Command und einer der Parameter für dieses Command wird als double deklariert.

z.B.

Set adoCmdInsParm = adoCmdInsert.CreateParameter("PREIS", adDouble, adParamInput, 7)

Wenn ich diesem Parameter jetzt einen Wert zuweise

z.B.

adoCmdInsert.Parameters(6).Value = "0.055"

oder

adoCmdInsert.Parameters(6).Value = 0.055 (oder Round(0.055) etc.)

findet automatisch eine Typkonvertierung statt. Da kann ich (auf der rechten Seite) runden, formatieren, abschneiden etc., der Wert des Parameters wird immer vom Typ double sein. Das Problem ist ein Darstellungsfehler auf PC Seite (ein Kollege der unter C programmiert hat das Phänomen ebenfalls). Sobald der Datentyp double ist gelingt auf PC Seite keine "Punktlandgung" mehr, soll heißen (trotzt round, format etc.): 0.055 wird "dargestellt", bei Anzeige auch immer ausgegeben, aber tatsächlich steht im Speicher 0.054999999999999999998etcetc. und dann meckert die AS400, denn dieser Wert wird so übergeben. (Hat sie ja auch recht)

Den Parameter selber des Prepared Command kann ich aber auf PC Seite nicht verändern (durch round, format etc.). Der einzig funktionierende Ansatz bisher, den Parameter als char zu deklarieren.

Set adoCmdInsParm = adoCmdInsert.CreateParameter("EPREI", adChar, adParamInput, 7)

Was mich wundert, dass ich den Parameter nicht mit adDecimal, adNumeric oder adCurrency verwenden kann. Das Zielfeld ist decimal 7,4, verwende ich einen dieser Datentypen gibt es eine "falscher Typ" Fehlermeldung. Dabei hat adCurrency fix 4 Nachkommastellen und adDecimal sollte 100% passen.

Habe weitere Informationen zum PTF (PTF SI16496) gefunden. Scheinbar gibt es Probleme mit unterschiedlichen Sprachversionen und iSeries Access. Es ist auch ein Hinweis zu finden zu Problemen mit Werten < 0.1. Jetzt wüsste ich gerne ob jemand diesen Fehler mit dem PTF ausbügeln konnte.

Gruß Andreas