Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'ai une application qui charge des tables dans une base (MS SQL) à partir de fichiers *.XML. Chaque fichier correspond à une table.
Pour charger toutes les tables on rentre dans une boucle qui :
1) crée un DATASTORE,
2) fait un SetTransObject
3) fait un ImportFile
4) fait un Update
5) fait un Commit
Cette boucle est pilotée par le contenu d'une table paramètre qui fournit le nom du fcihier XML, le nom de la Datastore et le nom de le table à charger.
J'ai besoin de créer et charger 3 nouvelles tables. J'ai donc modifié l'application (création de 3 Datawindow, modification de la table paramètre).
Exécutée en interprété elle fonctionne corretement. Exécutée avec le .EXE elle fontione pour toutes les tables créées avant la modif et pas du tout pour les nouvelles.
Après recherche et messabox, il s'avère que le code retour du SetTransOject est de -1 pour ces 3 tables en executable mais normal en interprété.
Qu'ai-je oublié de faire pour que cela fonctionne??
D'avance merci
Hors ligne
hello !
tu as fait un grant public to all, pour ces nouvelles tables ?
A+++
Hors ligne
si ça ne fonctionne toujours pas tu peux poster ta boucle ou une partie de ta boucle?
Hors ligne
Merci.
Nous sommes en train de verifier les droits et autorisations des tables de la base et j'avoue, c'est un sujet qui me dépasse
Ca ne fonctionne toujours pas et voici la fonction appelée dans la boucle :
Integer li_rc=0, li_rc_st Long ll_rc String ls_msg, ls_sql Datastore lds_data //- Initialisation lds_data = Create Datastore lds_data.Dataobject = as_dataobject li_rc_st = lds_data.SetTransObject(atr_trans) messagebox ('SetTransObject', as_tablename + '/' + string(li_rc_st) + string(atr_trans)) //- Chargement des données ll_rc = lds_data.Importfile(XML!, as_filename) //- Gestion des erreurs choose case ll_rc case -1 ls_msg = "No rows or startrow value supplied is greater than the number of rows in the file" case -2 Etc... end choose IF ll_rc < 0 THEN ls_msg = "Copy Error - Import" + ls_msg li_rc = -1 ELSE //- Suppression des anciennes données ls_sql = "delete from " + as_tablename Execute immediate :ls_sql USING atr_trans; //- sauvegarde des nouvelles données li_rc = lds_data.Update() IF li_rc = 1 THEN Commit Using atr_trans; li_rc = 0 ELSE ls_msg = "Copy Error - Save " + atr_trans.SQLERRTEXT Rollback Using atr_trans; li_rc = -2 END IF END IF Destroy lds_data Return li_rc
Hors ligne
pour tes 3 nouvelles tables...
refais le meme test, mais en passant directement via une datawindow, au lieu d'une datastore...
comme ca, en cas d'erreur, tu auras droit au message d'erreur...et bien plus précis cette fois ci...
enfin, c'est juste une piste...
Bon courage
Hors ligne
J'essaie et je vous tiens au courant
Hors ligne
J'ai enfin trouvé :
L'application tient dans une pbl.
Donc pour générer l'exécutable on a inclus la pbl ans l'exe (pas de pbd).
Dans le fichier des ressources pbr les 3 datawindow manquaient. Je les ai ajoutées.
et oh bonheur ça MARCHE
Vous pouvez le mettre à Résolu
Merci à vous pour votre soutien
Hors ligne