Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

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 31-10-2008 13:46:21

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

[RESOLU] Récupérer la requete executée par la datawindow ...

Bonjour,

Je bute un petit peu sur le résultat affiché par une datawindow.

Quand j'exécute ma requête sous SQL Advantage j'obtiens 6 lignes (3arguments en entrée : une date et deux string)

Quand j'exécute ma requête sous l'exécutable PB la datawindow m'affiche 3 lignes.

J'ai vérifié que les arguments soient bien les mêmes, j'ai vérifié que j'exécutais la même procédure stockée sur le même serveur (ça m'est déjà arrivé de ne pas exécuter la mémé procédure), bref je vois rien en ce moment.

Y a t'il un moyen de voir la requête qu'exécute la datawindow?

PS : J'ai aussi regardé si il a des filter et non il n'y en a pas

Dernière modification par Nephtis (03-11-2008 09:48:24)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#2 31-10-2008 14:06:23

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Salut,

Oui il y a un moyen. Après avoir fait le Retrieve () de ta datawindow, fais donc un GetSQLSelect ()
que tu peux affecter à une variable:

Code: pb

...
dw.Retrieve ()
ls_GetSQLSelect = dw.GetSQLSelect ()


Dans ta variable ls_GetSQLSelect tu auras la requête exécutée par ta datawindow.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#3 31-10-2008 14:18:26

mattdamon  
Le Tuniso-Parisien
Lieu: Livry-Gargan 93190
Date d'inscription: 29-12-2007
Messages: 569
Pépites: 89
Banque: 77,512,666,613,392,940

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Tu peux aussi voir le résultat de retrieve de ta datawindow en faisant : saveas de la datawindow:

Code: pb

dw_datawindow.SaveAs("c:\Fichier.xls", Excel!, true)

Hors ligne

 

#4 31-10-2008 14:23:13

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Ce que voulais Nephtis, c'était de visualiser la requête exécutée par la datawindow.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#5 31-10-2008 14:54:13

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

J'y ai cru a fond à ta solution Doctor Z mais le résultat renvoyé par la fonction GetSQLSelect() est une chaine vide


J'ai cherché a voir si je ne faisait pas de select pour récupérer un quelconque code retour qui fausserais le vrai select qui est lancé mais non il n'y en a pas

En renseignant certains champs autrement (date ayant une valeur différente de 1900-01-01 par exemple) j'obtiens le même résultat que sous SQL Advantage.


Avoir des erreurs comme celles là a débugguer un vendredi ça me tue

Dernière modification par Nephtis (03-11-2008 14:30:39)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#6 31-10-2008 15:02:13

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Ta datawindow est renseigné par une procédure stockée ? Si c'est le cas, le GetSQLSelect () ne
fonctionne pas.

Cependant, essayes avec la propriété Table.Select :

Select    A string containing the SQL SELECT statement that is the data source for the DataWindow.Use this property to specify a new SELECT statement or change the data source from a stored procedure or Script to a SELECT statement.Table.Select has several advantages over the SetSQLSelect function:·    It is faster. PowerBuilder does not validate the statement until retrieval.·    You can change data source for the DataWindow. For example, you can change from a SELECT to a Stored Procedure.·    You can use none or any of the arguments defined for the DataWindow object in the SELECT. You cannot use arguments that were not previously defined for the DataWindow object.Describe always tries to return a SQL SELECT statement. If the database is not connected and the property's value is a PBSELECT statement, Describe will convert it to a SQL SELECT statement if a SetTransObject function has been executed for the DataWindow object.

Syntaxe :

PowerBuilder dot notation:

dw_control.Object.DataWindow.Table.property

Describe and Modify argument:

"DataWindow.Table.property { = value }"

Essayes alors un dw_control.Object.DataWindow.Table.Select, d'après ce qui est écrit au dessus, ça
devrais pouvoir fonctionner.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#7 31-10-2008 15:38:56

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

J'ai bien peur que si tu recupères tes données via une procédure stockée que tu sois bloqué ...

Describe always tries to return a SQL SELECT statement. If the database is not connected and the property's value is a PBSELECT statement, Describe will convert it to a SQL SELECT statement if a SetTransObject function has been executed for the DataWindow object.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#8 31-10-2008 15:41:59

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Affichage d'un point d'exclamation

Code: pb

ls_test = dw_1.Object.DataWindow.Table.Select
//ls_test = dw_1.GetSQLSelect()
MessageBox("DEBUG REQUETE SQL", ls_test)


Je verrais ça une autre fois je pense (lundi par exemple )


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#9 03-11-2008 08:54:11

cposervices  
Membre completement Geek
Date d'inscription: 02-07-2008
Messages: 106
Pépites: 1,000,382
Banque: 0

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Mets toi un messagebox dans l'event sqlpreview de ta datawindow.

Cet event est triggé au retrieve, et tu as un string qui te donne la syntaxe SQL.

Hors ligne

 

#10 03-11-2008 09:48:08

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

cposervices a écrit:

Mets toi un messagebox dans l'event sqlpreview de ta datawindow.

Cet event est triggé au retrieve, et tu as un string qui te donne la syntaxe SQL.

Je l'ai testé et le résultat est la chaine d'appel à ma procédure stockée, exactement la même que je lance sous SQL Advantage avec un résultat différent



Comme j'avais déjà eu des problèmes avec une datawindow quand j'avais modifié la procédure stockée qui lui était rattachée j'ai créé ce matin une datawindow test.
Et comme je le craignais cette fois ci j'ai le bon nombre de lignes


En tout cas merci pour vos réponses, c'est toujours utile de pouvoir tracer l'exécution d'une datawindow


1M Pépites


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#11 03-11-2008 10:44:42

cposervices  
Membre completement Geek
Date d'inscription: 02-07-2008
Messages: 106
Pépites: 1,000,382
Banque: 0

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Grand merci à toi pour le pépites.

Mais juste pour le fun, peux-tu mettre l'export de ta datawindow d'origine, et celle de test, juste pour y jetter un coup d'oeil.

Danke

Hors ligne

 

#12 03-11-2008 15:04:13

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Si tu veux t'amuser avec les datawindows, voila :

- La version qui ne me renvoi pas le bon nombre de lignes

- La nouvelle version qui me renvoi les bonnes lignes

Du point de vue visuel ces deux datawindow object sont identiques.


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#13 03-11-2008 15:10:01

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

mes 2 cents au passage, hors sujet complet

tu devrais remplacer :

Code: pb

  if( stade = 20,rgb(255,211,191),
    if( stade = 30, rgb(191,255,191),
      if( stade = 90, rgb(191,255,239), rgb(255,255,255) )
    ) 
  )


par un truc du genre :

Code: pb

// en pté couleur de la colonne
f_color_dw_stade( stade )


// en fonction globale
global function long f_color_dw_stade(long al_stade);
Long ll_color

Choose Case al_stade

   Case 20
  
      ll_color = rgb(255,211,191)
  
...
  
End Choose


Return ll_color

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#14 04-11-2008 15:50:58

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

Par curiosité, quelle est l'avantage de la solution que tu propose?


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#15 04-11-2008 15:59:53

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Récupérer la requete executée par la datawindow ...

ça allège le code de la DW, c'est réutilisable, plus facile à maintenir

du même acabit : déclarer des constantes pour les couleurs, p.ex : CONST_BLUE=RGB(100,100,255)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22