Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour la commu,
Voila je rencontre un problème je suis entrant de faire le portage des sources de mon projet PB10.5 vers PB2017-R2.
En plus de ce portage je fais un passage de source 32bits en 64bits.
C'est là que j'ai un problème sur un écran je fais un dw_1.update() suivi d'un sqlca.committran() et tout se passe bien super. (dans tous les cas je teste le sqlca.sqlcode du update et il est OK)
Par contre quand je fais la même action (via un bouton) sur mon environnement 64bits au moment du sqlca.committran() j'ai 2 messages d'erreur :
1- le premier reprend la requête du datastore qui va être commit (OK)
2- le second m'indique ceci : Erreur de mise à jour sur 999
Select Error: Decimal conversion error. PowerBuilder supports only 18 decimal digits
Quand sur mon 64bits je consulte mon écran pour vérifier la sauvegarde de mes données et leurs mises à jour ça fonctionne (excepté ce foutu message d'erreur).
Le code est strictement le même. Pour infos dans cette datawindow le champs que je soupçonne être la cause est un NUMERIC(16,2) qui est géré dans un Decimal cette colonne stocke un montant qui suit la règle suivante : quantité * prix unitaire
Mes configurations projets sont les suivantes :
- 32bits :
|-- J'ai une chaîne de connexion ODBC 32bits qui va taper un schéma de BDD sur un serveur DB2/AS400
- 64bits :
|-- J'ai une chaîne de connexion ODBC 64bits qui va taper un schéma de BDD sur un serveur DB2/AS400
(Dans les 2 cas le schéma de BDD est le même entre l'application 32bits et 64bits).
Je patauge depuis hier soir si quelqu'un à une idée, je suis preneur
En vous remerciant
Hors ligne
Bonjour,
C'est quoi le type de la colonne dans la DW ? (edit source)
Hors ligne
Bonjour,
C'est un decimal(2) :
column=(type=decimal(2) update=yes updatewhereclause=yes name=ecimtglobal dbname="ENTCIP.ECIMTGLOBAL")
Hors ligne
Bon, je ne connais pas DB2, mais je pense que tu peux résoudre ça en creusant un peu sur la déclaration de ta colonne.
Sinon au pire, vu que la màj semble fonctionner, essaye de mettre ça dans un TRY CATCH, au moins y'aura plus le message (c'est sale, mais bon, c'est PB...)
Hors ligne
Ce qui est bizarre c'est que si le montant dans ma colonne est inférieur à 1000 ça passe dès que je passe sur 4 digit avant le séparateur j'ai le message d'erreur... Trop bizarre
J'ai essayé d'englober dans le tout dans un try catch mais impossible de chopper le message d'erreur, quel est le type d'exception du committran() ?
Si quelqu'un a des idées à tester je prends car la je tourne en rond et ça me saoule...
Hors ligne
A tout hasard, ça donne quoi avec :
COMMIT USING SQLCA ;
au lieu de :
sqlca.committran()
Hors ligne
Ça me fait la même chose entre les 2 commit...
Hors ligne
Bonjour,
J'ai une question subsidiaire :
J'ai des champs dans mon datastore qui sont défini en Decimal avec 0 en précision (donc pas de chiffre après la virgule).
Dans ma BDD je retrouve aussi des colonnes (les mêmes) qui sont définies en DEC(XX,0).
Je ne pense pas que ça vienne de là car le message est explique il fait un cast en DECIMAL d'une valeur mais est-ce que ça peut être une piste viable de recherche ?
Pour infos :
L'applicatif est en 64bits sur un Windows Server 2016 64bits
Les BDD se trouvent sur un serveur DB2/AS400
Les connexions entre l'application et les BDD se font en ODBC 64bits
Hors ligne
Bonjour,
Je ne connais pas DB2. De mémoire, j'ai déjà du rencontrer ce problème sur d'autres bases. Je pense que cela peut provenir du paramétrage du format numérique de la connexion ODBC :
http://infocenter.sybase.com/help/index … JBACJI.htm
Il y a pas mal de choses spécifiques à DB2 concernant le format numérique.
Hors ligne