Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Existe-t-il un moyen rapide de faire un rowscopy d'une dw composite à part copier chaque dw une à une ?
Hors ligne
j'ai une composite avec 6 dw report a l'interieur et je voudrais faire un rowscopy de ces dw dans une autre dw c'est plus clair?
Hors ligne
Un moyen rapide, je ne crois pas.
A moins de créer une fonction générique qui boucle sur toutes les dw présentes dans la composite.
C'est un peu lourd, mais une fois qu'elle est écrite, tu peux la réutiliser...
Hors ligne
thezerg a écrit:
Existe-t-il un moyen rapide de faire un rowscopy d'une dw composite à part copier chaque dw une à une ?
non pas à ma connaissance, à moins peut-être de faire un export PSR puis un import PSR
Hors ligne
je vais étudier tous ca merci à vous
Hors ligne
foon a écrit:
Un moyen rapide, je ne crois pas.
A moins de créer une fonction générique qui boucle sur toutes les dw présentes dans la composite.
C'est un peu lourd, mais une fois qu'elle est écrite, tu peux la réutiliser...
Il faut spécifier quoi dans le describe pour récupérer le nombre de dw ainsi que son nom?
Hors ligne
Normalement, l'expression suivante te retourne sous forme d'une string la liste des objets dans la datawindow séparés par des tabulations:
dw_1.Describe("DataWindow.Objects")
Hors ligne
describe("DataWindow.Objects")
me permet de connaitre tous les objet de la dw mais est-ce que je peux avoir le nombre d'objet?
Hors ligne
à peu de secondes près je t'évitais une réponse
Hors ligne
Directement, non, mais tu peux compter ce que tu as dans ta string résultante en prenant en compte les caractères séparateurs tab...
Hors ligne
oui c'est ce que je craignais lol
thx to all
Hors ligne
String ls_list, ls_control[], ls_type Int i //liste des controls séparés par tab ls_list = dw_1.Describe("DataWindow.Objects") // à parser dans un tableau f_string_to_tab( ls_list, '~t', ls_control ) // boucle sur le tableau et test du type pour chaque control For i = 1 To UpperBound( ls_control ) ls_type = dw_1.Describe( ls_control[ i ] + ".Type") If ls_type = 'report' Then // traitement End If Next
Hors ligne
ah merci j'étais en train de le faire
merci beaucoup
Hors ligne
il y a une petite fonction à écrire : f_string_to_tab
allez 15 lignes de code et elle te reservira certainement
Hors ligne
oui je pense merci encore
Hors ligne
eRaSorZ a écrit:
il y a une petite fonction à écrire : f_string_to_tab
Dans les PFC, et la classe n_cst_string je pioche les fonctions of_ArrayToString et of_ParseToArray
Hors ligne
HS
Et pour ceux qui n'ont pas la chance de bosser sur les PFC?
Fin HS
Hors ligne
c'est mon cas lol mais j'ai fait une fonction qui retourne le tableau bien rempli et voila
Hors ligne
Pas tout à fait HS ta question, Foon.
Tu ouvres la classe qui va bien dans les PFC et CTRL-C + CTRL-Tab + CTRL-V
Cependant, je suis victime du not invented here syndrome. C'est à dire, que bien que connaissant l'existence de cette fonction, je l'avait réécrite moi-même (en effet, comment un employé de Sybase pourrait faire aussi bien que moi ? Impossible !)
public function string of_arraytostring (readonly string as_array[], readonly string as_separator); //=of_arraytostring(as_array[], as_separator) Long ll_taille, ll_indice String ls_concatene Boolean lb_separe = False //Verification prealable IF IsNull(as_separator) THEN RETURN "" ll_taille = upperBound(as_array) FOR ll_indice = 1 TO ll_taille IF ( Not IsNull (as_array[ll_indice]) ) & AND as_array[ll_indice] <> "" THEN IF lb_separe THEN ls_concatene += as_separator + as_array[ll_indice] ELSE //première chaine concaténée ls_concatene = as_array[ll_indice] lb_separe = TRUE END IF END IF NEXT return ls_concatene end function
Hors ligne
Shahin pour la fonction. Il se trouve que je n'ai jamais eu l'occasion de bosser
sur les PFC (Je n'ai fait que des missions sur Powerlib ou frameworks dérivés des Powertools).
J'espère que je vais bientôt pouvoir m'y mettre.
Hors ligne
Ah là là. Je suis vraiment le . Je vous ait mis la fonction réciproque c'est à dire pas la bonne !
public function long of_stringtoarray (readonly string as_text & , readonly string as_separator, ref string as_array[]); //of_stringToArray(mle.text, "~n", ls_lignes) //Renvoie le nombre d'elements du tableau (nbre de sous-chaine) ou -1 si erreur long ll_pos=0, ll_indice=1, ll_nbChaine=0 long ll_start = 1 //position du premier caractère d'une sous-chaine long ll_sepLen ll_sepLen = Len(as_separator) //Récupérer le nombre d'élts du tableau (une seule allocation dynamique de mémoire) ll_pos = Pos(as_text, as_separator) DO WHILE ll_pos > 0 ll_nbChaine ++ ll_pos = Pos(as_text, as_separator, ll_pos + ll_sepLen) LOOP //Le nombre d'élts du tableau est : nbre de séparateurs + 1 ll_nbChaine ++ //Allocation dynamique du tableau as_array[ll_nbChaine] = "" ll_pos = Pos(as_text, as_separator) DO WHILE ll_pos > 0 as_array[ll_indice] = Mid(as_text, ll_start, ll_pos - ll_start) //incrémentation des indices ll_indice ++ ll_start = ll_pos + ll_sepLen ll_pos = Pos(as_text, as_separator, ll_start) LOOP //Ajouter le dernier as_array[ll_indice] = Mid(as_text, ll_start) RETURN ll_nbChaine end function
Hors ligne
foon a écrit:
Shahin pour la fonction.
De rien. Ce fut un plaisir.
foon a écrit:
Il se trouve que je n'ai jamais eu l'occasion de bosser sur les PFC
Moi non plus
foon a écrit:
J'espère que je vais bientôt pouvoir m'y mettre.
Moi aussi j'espère que tu vas t'y mettre
Hors ligne
Merci à tous les 3 je mets le sujet en résolu.
Hors ligne
pour info ca peut servir :
blob lblb_data
ids_source.getfullstate(lblb_data)
dw_1.setfullstate(lblb_data)
permet de recopier une dw a l'identique meme si celle-ci est une composite
Hors ligne