Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

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

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 02-04-2009 07:58:02

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

[RESOLU] Probleme avec RowsCopy()

Bonjour,

Je travaille sur la maintenance d'une application PB qui a migré il y a quelques mois en 10.5.

Je dois développer une évolution pour une datawindow de recherche (avec une datawindow pour les criteres de recherches et une autre pour la liste de résultats). Actuellement, les deux datawindow sont au format 6.0 (version de PB avant la migration). Quand on clique sur le bouton "Rechercher", la fonction de recherche appelle la fonction RowsCopy() et cela fonctionne trés bien.

Par contre, quand je passe mes deux datawindow en version 10.5 (sans pour autant modifier les requetes), la fonction RowsCopy() fait planter la recherche...

Ca fait plusieurs jours que je me bats avec cette fonction sans pour autant avancer, c'est pourquoi je viens quérir vos conseils avisés !

Merci beaucoup pour votre aide !

Dernière modification par Kyoshiro (07-04-2009 16:03:42)


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#2 02-04-2009 08:48:25

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Probleme avec RowsCopy()

Bonjour,

Il est difficile de répondre à ce genre de cas avec si peu d'indications (Version base, code source, SQL ...).

Tu peux toujours essayer les choses suivantes :

En faisant un "edit source" de la datawindow, la première ligne indique la version de "release" de la datawindow, si elle n'indique pas la version 10 essaye de faire une speudo modification
de la datawindow pour forcer le passage en version 10 réelle.

Il existe des cas ou il est nécessaire de reconstruire la datawindow nativement dans la nouvelle version de PB pour que cela marche correctement (Problème de migration connu par Sybase). A chaque migration, j'ai été obligé de reconstruire les crosstab, sinon j'ai une GPF en exécution.

Il faut aussi ne pas oublier que PB 10.0 est unicode et que des problèmes peuvent en découler avec le "charset" de la base de données.

Hors ligne

 

#3 02-04-2009 09:08:05

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

Avant tout, merci pour ta réponse rapide.

J'ai bien essayé comme tu m'as dit de modifier la version des datawindow : j'ai ouvert les datasource puis sauvegardé sans modifier les requetes (le release dans "edit source" est bien passé à 10.5) et ça marche.

Par contre, il y a quelque chose que je ne comprends pas avec la méthode RowsCopy(). Dans la datawindow des critères de recherche, voila la requete que j'exécute :

Code: mssql

SELECT "EMP_A"."ID_EMP",   
         "EMP_A"."LB_NOM_EMP",   
         "EMP_A"."LB_PREN_EMP",   
         "EMP_A"."ID_FNCT",   
         emp_b.id_emp id_emp_cdv,   
         emp_b.id_emp_resp id_emp_ddv,   
         "EMP_B"."ID_EMP",   
         "EMP_B"."ID_EMP_RESP"  
    FROM "EMP" "EMP_A",   
         "EMP" "EMP_B"  
   WHERE ( "EMP_A"."ID_EMP_RESP" = "EMP_B"."ID_EMP" )

Puis voila la requête de la datawindow de recherche :

Code: mssql

SELECT emp_a.id_emp,   
         emp_a.id_fnct,   
         emp_a.lb_nom_emp,   
         emp_a.lb_pren_emp,   
         emp_a.id_emp_resp,   
         fnct.lb_fnct,   
         emp_b.lb_nom_emp lb_nom_cdv,   
         emp_b.lb_pren_emp lb_pren_cdv,  
         emp_c.lb_nom_emp lb_nom_ddv,   
         emp_c.lb_pren_emp lb_pren_ddv  
    FROM emp emp_a,   
         fnct,   
         emp emp_b,   
         emp emp_c  
   WHERE ( emp_a.id_emp_resp = emp_b.id_emp (+)) and  
         ( emp_b.id_emp_resp = emp_c.id_emp (+)) and  
         ( emp_a.id_fnct = fnct.id_fnct )   
ORDER BY emp_a.lb_nom_emp ASC,   
         emp_a.lb_pren_emp ASC

La, le RowsCopy() marche bien. Par contre, une fois que je modifie le code de la requête, pour la datawindow des critères de recherche à :

Code: mssql

SELECT "EMP_A"."ID_EMP",   
         "EMP_A"."LB_NOM_EMP",   
         "EMP_A"."LB_PREN_EMP",   
         "EMP_A"."ID_FNCT",   
         emp_b.id_emp id_emp_cdv,   
         emp_b.id_emp_resp id_emp_ddv,   
         "EMP_B"."ID_EMP",   
         "EMP_B"."ID_EMP_RESP",   
         "GFCS_LOG"."LB_GFCS_LOG"  
    FROM "EMP" "EMP_A",   
         "EMP" "EMP_B",   
         "GFCS_LOG"  
   WHERE ( "EMP_A"."ID_EMP_RESP" = "EMP_B"."ID_EMP" ) and  
         ( emp_a.id_emp = gfcs_log.id_emp (+))

et celle de la liste des résultats à :

Code: mssql

 SELECT emp_a.id_emp,   
         emp_a.id_fnct,   
         emp_a.lb_nom_emp,   
         emp_a.lb_pren_emp,   
         emp_a.id_emp_resp,   
         fnct.lb_fnct,   
         emp_b.lb_nom_emp lb_nom_cdv,   
         emp_b.lb_pren_emp lb_pren_cdv,  
         emp_c.lb_nom_emp lb_nom_ddv,   
         emp_c.lb_pren_emp lb_pren_ddv,
    gfcs_log.lb_gfcs_log  
    FROM emp emp_a,   
         fnct,   
         emp emp_b,   
         emp emp_c,
    gfcs_log  
   WHERE ( emp_a.id_emp_resp = emp_b.id_emp (+)) and  
         ( emp_b.id_emp_resp = emp_c.id_emp (+)) and  
         ( emp_a.id_fnct = fnct.id_fnct ) and
    ( emp_a.id_emp = gfcs_log.id_emp (+))  
ORDER BY emp_a.lb_nom_emp ASC,   
         emp_a.lb_pren_emp ASC

La fonction RowsCopy() ne marche plus... Comment ça se fait? je crois qu'une subtilité du RowsCopy() m'échappe...

Ah oui pour info, je suis en Oracle 10g

Dernière modification par Kyoshiro (02-04-2009 11:18:22)


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#4 02-04-2009 11:54:42

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Probleme avec RowsCopy()

Comme le demandait Buck, peux-tu nous copier ici ton code PB du RowsCopy.

Petit rappel :

aide PB a écrit:

A DataWindow cannot be in query mode when you call the RowsCopy method.


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#5 02-04-2009 12:51:33

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

Et bien comme je le dis dans mon premier post, je viens juste de débarquer sur la maintenance de cette application donc je ne suis pas sur d'être en mesure de vous dire ce que ça fait exactement.

Le code qui appelle RowsCopy() :

Code: pb

// Recopie les données saisies par l'utilisateur dans la DS de recherche
ll_rowcount = dw_qbe.RowCount()
IF lsrv_dsw_edit.of_Get_Ds_Rech( li_index ).Reset() < 0 THEN GOTO Error
IF dw_qbe.RowsCopy( 1, ll_rowcount, Primary!, lsrv_dsw_edit.of_Get_Ds_Rech( li_index ), 1, Primary! ) < 0 THEN GOTO Error

Note : dw_qbe est la datawindow de recherche

Au fait, question stupide mais comment fait on pour savoir qu'une datawindow est en querymode ou non? j'ai regardé dans l'aide de PB et ils n'en disent rien...

Message de modération:


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#6 02-04-2009 13:08:51

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Probleme avec RowsCopy()

Bonjour,

As-tu vérifié que l'ordre SQL de ta DW source est le même que celui ta DW resultat.
Il me semble que l'ordre des colonnes est important pour l'utilisation de la fonction Rowscopy().

Hors ligne

 

#7 02-04-2009 13:33:28

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

Mais si ca vient vraiment de l'ordre des colonnes, comment ca se fait que ca marche dans le premier exemple mais pas dans le deuxieme, alors que je n'ai rajouté qu'un champ (le meme dans mes deux datawindow) ?

PS : Au fait, question stupide mais comment fait on pour savoir qu'une datawindow est en querymode ou non? j'ai regardé dans l'aide de PB et ils n'en disent rien...


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#8 02-04-2009 14:18:54

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Probleme avec RowsCopy()

Kyoshiro a écrit:

PS : Au fait, question stupide mais comment fait on pour savoir qu'une datawindow est en querymode ou non? j'ai regardé dans l'aide de PB et ils n'en disent rien...

Tout bêtement en faisant un describe:

Code: pb

IF my_dw.describe('datawindow.querymode') = 'yes' THEN
    //Dw en mode query
END IF

Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#9 06-04-2009 15:40:19

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

moi ce que je comprends pas c'est que ça ait fonctionné au départ alors que tu n'avais même pas le meme nombre de colonnes dans les 2 SQL (ou alors j'ai mal pigé un truc)

au final pour que ton rowscopy fonctionne il faut que tes DW aient le même nombre de colonnes et, pour faire simple, qu'elles soient dans le même ordre au niveau du type

(ex si 1ere colonne de DW 1 est de type Number alors 1ere colonne de DW 2 doit aussi être numérique)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#10 06-04-2009 16:22:44

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Probleme avec RowsCopy()

rincevent a écrit:

moi ce que je comprends pas c'est que ça ait fonctionné au départ alors que tu n'avais même pas le meme nombre de colonnes dans les 2 SQL (ou alors j'ai mal pigé un truc)

au final pour que ton rowscopy fonctionne il faut que tes DW aient le même nombre de colonnes et, pour faire simple, qu'elles soient dans le même ordre au niveau du type

(ex si 1ere colonne de DW 1 est de type Number alors 1ere colonne de DW 2 doit aussi être numérique)

Tout à fait d'accord avec toi Rincevent. Ce code me semble aussi trouble que les eaux de l'Ank...
Personnellement je pencherais plus pour un dérapage au niveau de li_index...


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#11 07-04-2009 07:30:03

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

Chrnico a écrit:

Ce code me semble aussi trouble que les eaux de l'Ank...

un connaisseur... :-)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#12 07-04-2009 16:02:52

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme avec RowsCopy()

Bonjour,

Après avoir passé quelques jours à me battre contre le code, j'ai finalement vaincu, perçant ainsi le mystère derrière ce RowsCopy().

En fait, c'était tout bête (ou pas) : il y avait un code de ninja planqué dans un ancêtre de la DataWindow qui précisait sur quelle DataWindow effectuer la recherche et sur quelles colonnes effectuer la recherche, c'est pourquoi le RowsCopy() ne marchait pas. Une fois les nouvelles colonnes précisées, ça marchait comme sur des roulettes !

Tout ça pour ça vous me direz, n'empêche que ça m'aura bien pris la tête !

En tout cas, merci à vous tous pour votre aide


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22