Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
à partir d'une base de donnée SqlAnyWhere, lorque j'utilise un ordre select .. into ... je récupère un contenu de champ qui est tronqué. Par exemple au lieu d'avoir 'ESSAI', j'ai comme contenu du champ 'ES'. Ce n'était pas le cas en version 9.
Auriez-vous une idée ?
Merci.
Dernière modification par poff (19-09-2017 15:12:53)
Hors ligne
Bonjour,
Version de 9 de quoi, PB ou ASA ?
un extrait du code avec déclaration de variables + structure de ta table pourrait aider à te donner un coup de pouce.
Si c'est version 9 de PB que tu avais avant, regardes si il ne s'agit pas d'un soucis d'unicode.
Hors ligne
Bonjour,
Merci de me répondre. Je fais une migration vers PB10.5
SELECT "utilisateur"."uti_nom_util", "utilisateur"."uti_email_util" INTO :ls_uti_nom_util, :ls_uti_email_util FROM "utilisateur" WHERE "utilisateur"."uti_nom" = :as_user USING l_tr ;
Je pense qu'il s'agit d'un soucis d'unicode avec Anywhere.
Hors ligne
Est-ce que tu as vérifier si il y avait des paramètres de connection particuliers sur la connection ? (ODBC ou dbparm)
tu peut aussi essayer de tester ta connection dans l'environnement de dev : Tools / Database painter / ISQL Session : tapes
select * from utilisateur;
et CTRL+L et vois le resultat.
Hors ligne
Comment faire pour avoir ISQL Session ?
Dans PB10.5 Via ODBC lorsque je suis connecté à ma base et que je fais un Edit Data sous forme de Grid, les colonnes dans l'aperçu sont correctes.
J'ai un utilisateur 'ESSAI' qui porte le nom de 'ESSAI'. Via le code PB10.5, la chaîne en retour contient 'ES'.
Hors ligne
Et les chaines sont tronquées aussi avec une datawindow dans ton appli PB ?
Idem en preview dans l'IDE ?
Hors ligne
Les chaines sont tronquées ...
Les codes suivant donnent des chaines tronquées
ls_select = "select uti_nom from utilisateur where uti_nom="+f_39(as_user) guo_app.iuo_mds.uf_dynamic_datastore(lds,"SELECT",ls_select,l_tr) lds.retrieve() if lds.rowcount() = 1 then ls_user = upper(trim(lds.getitemstring(1,"uti_nom"))) end if
lds.dataobject="d_user_anywhere" lds.settransobject(l_tr) lds.retrieve(as_user) if lds.rowcount() = 1 then ls_user = upper(trim(lds.getitemstring(1,"uti_nom"))) end if
Hors ligne
J'ai pensé à cela, mais finalement j'en doute que le charset soit la bonne piste :
SELECT connection_property ('charset')
Il faudrait que tu compares la connexion que tu as dans l'IDE et celle utilisé par ton app, il doit y avoir une différence de paramètrage/option de connexion; étant donné que la datawindow fonctionne dans l'IDE et pas dans ton app.
Hors ligne
Bonjour,
Je suis actuellement sous PB 11.5 et je tourne avec une version très ancienne de SQL Anywhere (8.0) sans aucun problème de ce genre.
Tu n'as pas donné la version de SQL Anywhere ?
Une piste à vérifier :
Les migrations de Powerbuilder ne mette pas à jour la release des dataobjects, si tu fais un edit en mode source tu te rendras compte que le numéro de version n'a pas été mis à jour.
Il reste dans la version de Powerbuilder avec laquelle tu as construit l'objet (donc il ne supporte pas les fonctionnalités de la 10.5).
Pour réellement migrer une datawindow en version 10.5, Il faut faire une speudo-modification et resauvegarder.
Tu ouvres ta datawindow et tu passes en mode datasource (tu affiches la requête en mode syntaxe), tu places un retour chariot quelconque dans la requête puis tu le supprimes et tu retournes en mode IHM.
Cela force la régénération de la datawindow. Tu vérifies au passage dans la vue "column specification" que la longueur de tes chaines sont correctes. Tu sauvegardes.
Normalement, si tu réédites en mode source tu devrais être en release 10.5 (Pour ma part, notre application est la résultante de migrations successives, il m'arrive encore de trouver des datawindows en release 5 sous PB 11.5).
Tu tests ton exemple pour voir si cela à fait évoluer les choses (sans garantie).
Hors ligne
Bonjour,
Je suis en SQL Anywhere 5.
J'ai créé hier une datawindow (release10.5).
Lorsque je suis connecté à ma base et que je fais un preview via la datawindow, les informations arrivent correctement.
Lorsque je lance le programme en mode debug, les valeurs des champs sont tronquées.
Au départ j'avais un SELECT .. INTO ... Les valeurs des champs étaient tronquées.
Hors ligne
Bonjour,
J'ai migré ma base SQL Anywhere 5 en SQL Anywhere 8.
as_transaction.DbParm = "ConnectString='DSN="+as_profil+";UID=«util»;PWD=«mdp»';CharSet='cp1252'"
Dernière modification par poff (19-09-2017 15:12:20)
Hors ligne
poff a écrit:
Bonjour,
J'ai migré ma base SQL Anywhere 5 en SQL Anywhere 8.Code: pb
as_transaction.DbParm = "ConnectString='DSN="+as_profil+";UID=«util»;PWD=«mdp»';CharSet='cp1252'"
Et ... toujours les données tronquées ?
Hors ligne