Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Voilà encore une question.
Dans un script générique, j'ai besoin de vérifier si une colonne portant un nom spécifique existe dans la DW de la fenêtre en cours.
Car le traitement doit être différent dans le cas des écrans où la colonne existe.
Existe il une fonction miracle qui vérifie cela ?
Dernière modification par LeCiao (26-11-2007 15:45:15)
Hors ligne
Bonjour LeCiao,
Il te suffit de boucler sur toutes les colonnes de ta dw et de tester son nom:
Long l_colcount, l_currentcol String s_colcount, s_colname /* Boucle sur toutes les colonnes de la datawindow de saisie: */ s_colcount = dw_detail.Describe("DataWindow.Column.Count") IF IsNumber( s_colcount ) THEN l_colcount = Long( s_colcount ) ELSE Messagebox( "Erreur", "Erreur sur la récupération du nombre de colonnes" ) RETURN END IF l_currentcol = 1 DO WHILE l_currentcol <= l_colcount /* Récupération du nom de la colonne: */ s_colname = dw_detail.Describe("#" + String( l_currentcol ) + ".Name") /* Mettre ici ton test sur le nom de ta colonne:*/ IF Lower(s_colname) = "macolonneamoi" THEN Messagebox( "Cool", "C''est la bonne!" ) EXIT END IF l_currentcol = l_currentcol++ LOOP
Hors ligne
Merci je mets ça en place et je vous tiens au courant !
Hors ligne
Parfait pour une colonne. MAIS ne prend pas en compte un compute field !
Une idée complémentaire ??
Hors ligne
exemple de code à adapter
ls_syntax = dw_sheet.Object.DataWindow.Syntax ll_find = PosA(ls_syntax, "compute(", 1) li_Cpt = 1 Do while ll_find > 0 ll_find_name = PosA(ls_syntax, "name=", ll_find) ll_find_name2 = PosA(ls_syntax, " ", ll_find_name+5) ls_name = MidA(ls_syntax, ll_find_name + 5, ll_find_name2 - ll_find_name - 5) ll_find = PosA(ls_syntax, "compute(", ll_find_name2) li_Cpt ++ Loop
Hors ligne
Merci beaucoup à vous 2 ça marche nickel.
Voici le code final :
Long ll_tot, ll_i, ll_find, ll_find_name String ls_tot, ls_name, ls_syntax Boolean lb_trouve /* Boucle sur toutes les colonnes de la DW */ ls_tot = This.Describe("DataWindow.Column.Count") If IsNumber( ls_tot ) Then ll_tot = Long( ls_tot ) End If For ll_i = 1 To ll_tot /* Récupération du nom de la colonne: */ ls_name = This.Describe("#" + String(ll_i) + ".Name") /* Test sur le nom de la colonne */ If Lower(ls_name) = "cf_page" Then If This.object.cf_page.Visible Then This.object.cf_page.Visible = False lb_trouve = True End If ll_i = ll_tot End If Next /* Si on n'a pas trouvé la colonne, on recherche un compute field */ If Not lb_Trouve then ls_syntax = This.Object.DataWindow.Syntax ll_i = Pos(ls_syntax, "compute(", 1) Do while ll_i > 0 ll_find = Pos(ls_syntax, "name=", ll_i) ll_find_name = Pos(ls_syntax, " ", ll_find+5) ls_name = Mid(ls_syntax, ll_find + 5, ll_find_name - ll_find - 5) If Lower(ls_name) = "cf_page" Then If This.object.cf_page.Visible Then This.object.cf_page.Visible = False lb_trouve = True End If ll_i = 0 Else ll_i = Pos(ls_syntax, "compute(", ll_find_name) End If Loop End If uof_print() If lb_trouve Then This.object.cf_page.Visible = True End If This.SetRedraw(True)
Hors ligne