[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2005
    Beiträge
    37

    Question Fehler bei ADO Zugriff CWBZZ5014

    Hallo,

    nach Umstellung eines Teils unserer PC Landschaft auf Win XP / ado 2.8, quittiert die AS400 SQL Inserts einer VB Anwendung mit Werten < 1 mit folgendem Fehler:

    CWBZZ5014 Wert für Parameter xy konnte nicht in Host Datentyp umgesetzt werden.

    (Insert erfolgt über Prepared Command, V5R3)

    Bei IBM habe ich "vage" Hinweise gefunden, außerdem taucht die Fehlermeldung in einer PTF Beschreibung, ohne weitere Erklärungen, auf (PTF SI16496).


    Hat jemand Erfahrungen mit diesem Fehler ? Lässt er sich mit dem PTF beseitigen ? Freue mich über Tipps und Infos.


    Mit freundlichen Grüßen
    Andreas Sturm

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dieses Problem gibts ggf. bei numerischen Inhalten, wenn die Nachkommastellen bei Übergabe als Double nicht passen. Ggf. als String mittels FORMAT(myvar, "0.00") bzw. entsprechender Anzahl NK oder mittels ROUND(myvar, 2) übergeben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jan 2005
    Beiträge
    37
    Hallo,

    Format bzw. Round nützt mir an der Stelle nix, da der Parameter im Command als double deklariert ist, d.h. es erfolgt bei Wertzuweisung immer eine autom. Typkonvertierung (mit dem daraus resultierenden Fehler). Bisher hat nur geholfen, den Parameter als char zu deklarieren, dann scheint die AS400 ihn selbst erfolgreich zu konvertieren was ja dem

    Ggf. als String mittels FORMAT(myvar, "0.00") bzw. entsprechender Anzahl NK oder mittels ROUND(myvar, 2) übergeben.
    entspricht, mich aber nicht glücklich macht. Außerdem stellt sich die Frage ab welcher CA Version das nicht mehr funktioniert.

    Besten Dank

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Round() nützt natürlich was, da damit die Nachkommastellen eben gekürzt werden können.
    Ich hatte schon früher des öfteren Probleme (auch z.B. mit MSAccess und verknüpfter Tabelle), wenn der Dezimalwert zuviele Vor- oder Nachkomma enthält.

    Bei Parametertyp CHAR (was für alle Parameter geht) wird eben vom Host in den passenden Typ konvertiert, aber auch hier darf die Stellenzahl nicht überschritten werden.
    Übrigens: Auch wenn der Parameter vom Typ DOUBLE ist, kommt es dann doch tatsächlich auf das Ziel-DB-Feld an.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jan 2005
    Beiträge
    37

    Wink

    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dann würde ich dir eine weitere "Umgehung" vorschlagen:

    insert .... values(?, ..., dec(?, 7, 4), ...)

    also eine Zwangskonvertierung des Double in Decimal. Allerdings führt dies ggf. zu Rundungsverlusten, da das Casting nicht rundet sondern abschneidet.

    Andererseits: was hindert dich denn den Parameter als adChar zu übergeben ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jan 2005
    Beiträge
    37

    Exclamation

    Hallo,

    den Tipp werde ich gleich mal ausprobieren !!!

    Zitat Zitat von Fuerchau
    Andererseits: was hindert dich denn den Parameter als adChar zu übergeben ?
    o

    Tja, auf den Rechnern mit W2K und der "alten" Client Access Version führt der Insert mit char zu einer Fehlermeldung.

    Gruß Andreas

  8. #8
    Registriert seit
    May 2002
    Beiträge
    2.643

    Ptf schon installiert ?

    Hallo,
    also dieses Ptf ist für Iseriers Access und wurde bereits
    ersetzt durch SI17742 für 5722XE1. Ich würde das
    auf jeden Fall installieren auf der R530 Maschine.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Altes CA und neues OS gibt immer Probleme !
    Umgedreht, neues CA und altes OS ist meist problemlos.
    Ich würde auf jeden Fall mindestens die zum OS passende CA-Version und das letzte Update einsetzen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Jan 2005
    Beiträge
    37

    :o( :o)

    Dann würde ich dir eine weitere "Umgehung" vorschlagen:

    insert .... values(?, ..., dec(?, 7, 4), ...)
    Leider laufe ich dann auf die nächste Fehlermeldung:

    SQL0418: Verwendung von Parametermarkierungen ungültig.

    .... aber, Versuch macht kluch, das

    cast(? as dec(7, 4))

    funktioniert wunderbar !!!

    Schönen Dank für den Tipp mit dem Typecasting auf AS400 Seite.

    Gruß Andreas

    P.S.

    der Austausch von CA wäre unternehmensweit ohne Weiteres nicht möglich

Similar Threads

  1. Nachricht CPDB053 beim Zugriff auf Windows Freigabe
    By schatte in forum NEWSboard Windows
    Antworten: 7
    Letzter Beitrag: 21-11-06, 11:37
  2. QNTC Zugriff auf CD Laufwerk Fehlerhaft
    By pwrdwnsys in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-11-06, 15:34
  3. Fehler: SQL0302 Umsetzungsfehler / ado
    By Asti in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-08-06, 13:24
  4. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  5. Fehler beim Zugriff auf Ornder auf QOPT
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 13-01-05, 07:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •