Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
Encore une question assez simple à première vue mais qui me perturbe complètement en ce moment.
J'ai une datawindow de ce type :
champ_entete_1
champ_entete_2
libellé_1 libellé_2
-------------------------------------------------------------------Header
champ_detail_1 champ_detail_2
-------------------------------------------------------------------Detail
champ_footer_1
champ_footer_2
-------------------------------------------------------------------Footer
Les cases libelle_X sont des objets de type text et tous les autres sont des objets de type column
En supposant que j'ai 10 lignes dans ma datawindow, comment puis-je modifier les champs de mon header et footer avec un SetItem?
Quel est le numéro de ligne que je dois passer en paramètre de la fonction SetItem?
La ligne 1 ou la ligne 10? Ou une autre?
Merci de m'éclairer sur ce sujet
Dernière modification par Nephtis (25-06-2009 09:38:26)
Hors ligne
Bonjour, quid de :
dw_1.Modify('libelle_1.text="' + ls_texte + '"')
Hors ligne
erasorz a écrit:
Bonjour, quid de :
Code: pb
dw_1.Modify('libelle_1.text="' + ls_texte + '"')
Je viens de tester et je tombe tout le temps sur une erreur de syntaxe pile a l'endroit de la première quote
Je précise bien que j'ai vérifie que mon champ est bien de type string
Hors ligne
j'ai peut-être inversé les " et les '
dw_1.Modify("libelle_1.text='" + ls_texte + "'")
Hors ligne
erasorz a écrit:
j'ai peut-être inversé les " et les '
Code: pb
dw_1.Modify("libelle_1.text='" + ls_texte + "'")
J'avais aussi tester de les inverser pour avoir la chaine entre quote ou entre double quotes mais toujours avec le même message d'erreur
Hors ligne
hum, hum
c'est pas libelle_1_t ton texte ?
Hors ligne
Je vérifie sans cesse en ce moment si je ne me trompe pas de nom de colonne et malheureusement je ne me trompe pas.
En fait la datawindow a été crée manuellement (type external lors de la conception) et représente une lettre.
Je n'ai mit aucun nom de colonne avec un "_t" a la fin, j'ai juste laissé des nom compréhensibles (adresse, code_postal, nom_editeur, etc...)
Mais ça bloque visiblement avec tous les champs le modify (je les ai pas tous testé).
Au départ j'avais fait comme si la ligne de header représentait la ligne 1 et la ligne de footer représentait la ligne max quand j'utilisais la fonction SetItem. Mais bien sur j'avais pas exactement le résultat voulu.
Je continue a chercher ce qui va pas dans le code ou dans la datawindow
Hors ligne
la dw est elle affectée au control DW ?
Tu peux mettre du code ?
Hors ligne
Le code du script qui va alimenter la datawindow :
//================================================================================== // Affectation des données à la datawindow d'envoi de lettre par mail //================================================================================== // -- Les données qui constituent la palette ll_nb_lignes = ldwc_data.RowCount() FOR ll_iterateur_palette=1 TO ll_nb_lignes //On traite ligne par lignes donc on insere a chaque fois une nouvelle ligne dw_lettre_pour_mail.InsertRow(0) ls_id_titre = ldwc_data.GetItemString(ll_iterateur_palette,"id_titre") ls_libelle_titre = ldwc_data.GetItemString(ll_iterateur_palette,"libelle_titre") ll_nb_ex = ldwc_data.GetItemNumber(ll_iterateur_palette,"nb_exemplaires") ll_poids = ldwc_data.GetItemNumber(ll_iterateur_palette,"poids") dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"titre",ls_id_titre) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"libelle",ls_libelle_titre) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"nb_exemplaires",ll_nb_ex) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"poids",ll_poids) /* Test en dernier recours (j'ai plus d'idées) // -- Les données qui constituent l'adresse dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"raison_sociale", ls_raison_sociale) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"raison_sociale_complementaire", ls_raison_sociale_complementaire) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"adresse_1", ls_adresse_1) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"adresse_2", ls_adresse_2) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"localite", ls_localite) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"code_postal", ls_code_postal) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"bureau_distributeur", ls_bureau_distributeur) // -- Les données qui constituent l'editeur dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"code_societe_messagerie", ls_code_societe_messagerie) // -- Les données qui constituent la date d'édition dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"date_edition", ld_date_edition) // -- Les données qui constituent les formules dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_1", ls_reediter_1) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_2", ls_reediter_2) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_3", ls_reediter_3) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_4", ls_reediter_4) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_5", ls_reediter_5) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_6", ls_reediter_6) dw_lettre_pour_mail.SetItem(ll_iterateur_palette,"reediter_7", ls_reediter_7) */ NEXT // -- Les données qui constituent l'adresse dw_lettre_pour_mail.SetItem(1,"raison_sociale", ls_raison_sociale) dw_lettre_pour_mail.SetItem(1,"raison_sociale_complementaire", ls_raison_sociale_complementaire) dw_lettre_pour_mail.SetItem(1,"adresse_1", ls_adresse_1) dw_lettre_pour_mail.SetItem(1,"adresse_2", ls_adresse_2) dw_lettre_pour_mail.SetItem(1,"localite", ls_localite) dw_lettre_pour_mail.SetItem(1,"code_postal", ls_code_postal) dw_lettre_pour_mail.SetItem(1,"bureau_distributeur", ls_bureau_distributeur) // -- Les données qui constituent l'editeur dw_lettre_pour_mail.SetItem(1,"code_societe_messagerie", ls_code_societe_messagerie) // -- Les données qui constituent la date d'édition dw_lettre_pour_mail.SetItem(1,"date_edition", ld_date_edition) // -- Les données qui constituent les formules // Test du Modify sur les formules ls_test=dw_lettre_pour_mail.Modify("reediter_1='"+ls_reediter_1+"'") MessageBox("Debug1","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_2='"+ls_reediter_2+"'") MessageBox("Debug2","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_3='"+ls_reediter_3+"'") MessageBox("Debug3","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_4='"+ls_reediter_4+"'") MessageBox("Debug4","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_5='"+ls_reediter_5+"'") MessageBox("Debug5","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_6='"+ls_reediter_6+"'") MessageBox("Debug6","ls_test = " + ls_test) ls_test=dw_lettre_pour_mail.Modify("reediter_7='"+ls_reediter_7+"'") MessageBox("Debug7","ls_test = " + ls_test)
Dernière modification par Nephtis (25-06-2009 09:40:58)
Hors ligne
c'est cela qui explose ?
ls_test=dw_lettre_pour_mail.Modify("reediter_1='"+ls_reediter_1+"'") MessageBox("Debug1","ls_test = " + ls_test)
reediter_1 est une colonne et pas un champs texte
Il faut le traiter comme les autres champs
Hors ligne
JCZ a écrit:
c'est cela qui explose ?
Code: pb
ls_test=dw_lettre_pour_mail.Modify("reediter_1='"+ls_reediter_1+"'") MessageBox("Debug1","ls_test = " + ls_test)reediter_1 est une colonne et pas un champs texte
Il faut le traiter comme les autres champs
C'est sur la proposition de erasorz que j'ai traité ces colonne de cette façon.
Mais avant j'avais bien le code de ce genre :
// -- Les données qui constituent les formules li_test=dw_lettre_pour_mail.SetItem(1,"reediter_1", ls_reediter_1) If(li_test<>1) Then MessageBox("Debug1","Probleme SetItem sur le champ reediter_1 : " + ls_reediter_1) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_2", ls_reediter_2) If(li_test<>1) Then MessageBox("Debug2","Probleme SetItem sur le champ reediter_2 : " + ls_reediter_2) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_3", ls_reediter_3) If(li_test<>1) Then MessageBox("Debug3","Probleme SetItem sur le champ reediter_3 : " + ls_reediter_3) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_4", ls_reediter_4) If(li_test<>1) Then MessageBox("Debug4","Probleme SetItem sur le champ reediter_4 : " + ls_reediter_4) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_5", ls_reediter_5) If(li_test<>1) Then MessageBox("Debug5","Probleme SetItem sur le champ reediter_5 : " + ls_reediter_5) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_6", ls_reediter_6) If(li_test<>1) Then MessageBox("Debug6","Probleme SetItem sur le champ reediter_6 : " + ls_reediter_6) End If li_test=dw_lettre_pour_mail.SetItem(1,"reediter_7", ls_reediter_7) If(li_test<>1) Then MessageBox("Debug7","Probleme SetItem sur le champ reediter_7 : " + ls_reediter_7) End If
Le problème reste de savoir quelle est la ligne a fournir au SetItem sachant que ces colonnes se trouvent dans le header et le footer
Dernière modification par Nephtis (24-06-2009 16:14:59)
Hors ligne
tu mets tout avec la meme valeur ...
et erasorz parlait de libelle et pas de colonne
Hors ligne
JCZ a écrit:
tu mets tout avec la meme valeur ...
et erasorz parlait de libelle et pas de colonne
Je sais pas si j'ai bien compris ce message mais je t'assures que les variables ls_reediter_X que j'affecte dans chaque SetItem contiennent bien la chaîne de caractères que je veux mettre à jour dans ma datawindow
Pause pour aujourd'hui (commence a avoir mal a la tete avec ce problème )
Dernière modification par Nephtis (24-06-2009 16:21:13)
Hors ligne
Au final j'ai recréé ma datawindow avec seulement 4 champs (les quatres qui sont dans le detail) et tous les autres champs en type text.
J'ai utilisé la fonction modify et désormais tout fonctionne
Merci pour votre aide
Hors ligne
Hors ligne
Pages: 1