Le forum (ô combien francophone) des utilisateurs de Powerbuilder.







Rebonjour,
J'ai un nouveau probleme et j'aimerais avoir vos avis dessus avant d'effectuer des modifications.
J'ai une datawindow construite autour d'une procédure stockée qui utilise parfois des alias dans la partie select
Bout de la requete SQL :
select
a.ID_PERSONNE_MORALE,
substring (convert (char(5), a.ID_PERSONNE_MORALE), 2, 4)
SHORT_ID_PERSONNE_MORALE,
b.RAISON_SOCIALE,
b.RAISON_SOCIALE_COMPLEMENTAIRE,
c.NUMERO_VOIE,
c.COMPLEMENT_ADRESSE_1,
c.COMPLEMENT_ADRESSE_2,
c.CODE_POSTAL,
[...]
a.RAISON_SOCIALE RAISON_SOCIALE_COURRIER,
a.RAISON_SOCIALE_COMPLEMENTAIRE RAISON_SOCIALE_COMPL_COURRIER,
a.ADRESSE_1 ADRESSE_1_COURRIER,
a.ADRESSE_2 ADRESSE_2_COURRIER,
J'ai a.ADRESSE_1 qui est identifié par l'alias ADRESSE_1_COURRIER et a.ADRESSE_2 par l'alias ADRESSE_2_COURRIER
Pour ce qui est du retrieve y a pas de probleme, j'arrive à recupérer mes données
Mais lorsque j'essaie de faire un update j'obtiens le message d'erreur:
Invalid column name 'ADRESSE_2_COURRIER'.
Aucune modification apportée à la base de données.
UPDATE dbo.OBI_EDITEUR_ADRESSE_COURRIER SET ADRESSE_2_COURRIER = 'TEST' WHERE ID_PERSONNE_MORALE = 12178
Comment faire pour que la datawindow differencie l'alias du vrai nom du champ?
Merci pour vos reponses
Dernière modification par Nephtis (09-07-2007 10:31:33)
Hors ligne








en edit source tu as regardé ce que ca donnait?
Hors ligne














tu as vérifié les update properties ?
Hors ligne







thezerg a écrit:
en edit source tu as regardé ce que ca donnait?
Je suis sous PB 6.5 et je sais pas trop ou se trouve le boutton "edit source" (j'avais fait ma formation sur PB 10)Si tu sais comment faire ...
J'ai fait un export puis j'ai regardé le fichier et mes champs sont bien identifiés par les alias.
Est ce que si je modifie manuellement le srd pour remettre les bon champs et que je l'importe juste après il y a des chances que ca marche ou est ce que ça corrompt un peu pb?
En tout cas je vais le tester ...
eRaSorZ a écrit:
tu as vérifié les update properties ?
Dans les update properties, les champs proposés sont les alias et pas les vrais champs
Dernière modification par Nephtis (06-07-2007 16:57:41)
Hors ligne








click droit sur la DW ya pas edit source?
Hors ligne







thezerg a écrit:
click droit sur la DW ya pas edit source?
Non, Version 6.5
Hors ligne

Hors ligne







J'ai essayé de changé le dbName mais les colonnes sont verouillées (imposible de les modifier)
Dernière modification par Nephtis (06-07-2007 17:43:28)
Hors ligne
Nephtis a écrit:
J'ai essayé de changé le dbName mais les colonnes sont verouillées (imposible de les modifier)
sous pb6.5, il faut que tu fasses un export...et que tu changes toi meme depuis le fichier.

Hors ligne







C'est ce que j'ai fait mais quand j'ouvre directement la datawindow et que je regarde les Column Specification... la modification à bien été prise en compte.
Par contre quand j'ouvre l'objet où se trouve la datawindow et que je fait un clic droit sur la datawindow puis Modify Datawindow et enfin Column Specification..., je me retrouve avec les alias pour les champs que j'avais modifié
Hors ligne
tu peux mettre ici, ton fichier datawindow exporté ?

Hors ligne







Le voila
C'est celui que j'ai modifié.
Liste de mes modifications :
- ligne 29 : "ADRESSE_1_COURRIER" remplacé par "ADRESSE_1"
- ligne 30 : "ADRESSE_2_COURRIER" remplacé par "ADRESSE_2"
Hors ligne







Je résume ce que j'ai fait :
- J'ai exporté la dw
- J'ai modifié les deux lignes (pour le test ensuite je modifierais les autres de la meme facon)
- J'ai supprimé l'ancienne dw de ma pbl
- J'ai importé la nouvelle dw dans ma pbl
- J'ai supprimé mon user object où il y avait ma pbl
- J'ai créé un nouveau user object
- J'ai placé la nouvelle dw
Mais il y a toujours les champs ADRESSE_1_COURRIER et ADRESSE_2_COURRIER?!?!?
Moi je n'y comprends plus grand chose
Hors ligne







Le problème initial n'est pas réglé mais comme il faut que j'avance ce que je vais faire c'est que je vais coder l'évenement sqlpreview de ma datawindow pour lancer une procédure stockée qui se chargera de la mise à jour.
C'est pas très beau mais ce problème ne me laisse pas le choix.
Dés que j'aurais fini de tester je posterais le code si un jour quelqu'un se retrouvais dans le même galère que moi
Hors ligne








Tu aurai pu aussi modifier la procédure stockée pour mettre "ADRESSE_1" comme alias.
Nephtis a écrit:
Le problème initial n'est pas réglé mais comme il faut que j'avance ce que je vais faire c'est que je vais coder l'évenement sqlpreview de ma datawindow pour lancer une procédure stockée qui se chargera de la mise à jour.
C'est pas très beau mais ce problème ne me laisse pas le choix.
Pas trés beau ? Au contraire, si le select se fait par proc stock, il est logique que l'update se fasse par proc stock aussi.
Hors ligne







shahin a écrit:
Tu aurai pu aussi modifier la procédure stockée pour mettre "ADRESSE_1" comme alias.
Je préfère ne pas trop modifier ce qui existe déjà, je ne sais pas si cette procédure est utilisée à d'autres endroits
Hors ligne








Bien vu Nephtis !
Hors ligne







shahin a écrit:
Bien vu Nephtis !
Comme je l'avais dit un peu plus haut voici une solution pour contourner ce problême :
/**********************************************************************/ // // /**********************************************************************/ long ll_id_personne_morale string ls_raison_sociale, ls_raison_sociale_complementaire, ls_ad1, ls_ad2, ls_localite, & ls_cp, ls_ville, ls_pays, ls_telephone, ls_telex, ls_fax, ls_messagerie /**********************************************************************/ // //// Debut du script // /**********************************************************************/ //On se place dans le cas d'un update if request = PreviewFunctionUpdate! then if sqltype = PreviewUpdate! then ll_id_personne_morale = this.object.id_personne_morale[row] ls_raison_sociale = this.object.raison_sociale_courrier[row] ls_raison_sociale_complementaire = this.object.raison_sociale_compl_courrier[row] ls_ad1 = this.object.adresse_1_courrier[row] ls_ad2 = this.object.adresse_2_courrier[row] ls_localite = this.object.localite_courrier[row] ls_cp = this.object.code_postal_courrier[row] ls_ville = this.object.bureau_distributeur_courrier[row] ls_pays = this.object.pays_courrier[row] ls_telephone = this.object.telephone_courrier[row] ls_telex = this.object.telex_courrier[row] ls_fax = this.object.fax_courrier[row] ls_messagerie = this.object.messagerie_courrier[row] if sqlca.UPDATE_ADRESSE_EDITEUR (& ll_id_personne_morale, & ls_raison_sociale, & ls_raison_sociale_complementaire, & ls_ad1, & ls_ad2, & ls_localite, & ls_cp, & ls_ville, & ls_pays, & ls_telephone, & ls_telex, & ls_fax, & ls_messagerie) <> 0 then rollback using sqlca; return 1 end if end if return 2 end if
Il ne vous manquera bien sur qu'a modifier les champs pour qu'ils correspondent à ceux de votre base de donnée
Hors ligne