Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
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)
Hors ligne
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:
... dw.Retrieve () ls_GetSQLSelect = dw.GetSQLSelect ()
Dans ta variable ls_GetSQLSelect tu auras la requête exécutée par ta datawindow.
Hors ligne
Tu peux aussi voir le résultat de retrieve de ta datawindow en faisant : saveas de la datawindow:
dw_datawindow.SaveAs("c:\Fichier.xls", Excel!, true)
Hors ligne
Ce que voulais Nephtis, c'était de visualiser la requête exécutée par la datawindow.
Hors ligne
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)
Hors ligne
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.
Hors ligne
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.
Hors ligne
Affichage d'un point d'exclamation
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 )
Hors ligne
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
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
Hors ligne
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
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.
Hors ligne
mes 2 cents au passage, hors sujet complet
tu devrais remplacer :
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 :
// 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
Hors ligne
Par curiosité, quelle est l'avantage de la solution que tu propose?
Hors ligne
ç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)
Hors ligne
Pages: 1