Publié le : 28/06/2025
Récupérer la requête SQL définie dans un DataWindow à l’exécution dans PowerBuilder
Principe
Toutes les propriétés internes d’un DataWindow sont accessibles via la fonctionDescribe()
.
La clauseSELECT
est stockée dans la propriétéDataWindow.Table.Select
.
// Contrôle DataWindow (ou DataStore) déjà instancié
string ls_sql
ls_sql = dw_1.Describe("DataWindow.Table.Select")
IF Left(ls_sql,1) = "!" THEN
// En cas d’erreur, Describe renvoie “!…” suivi du message
MessageBox("Erreur Describe", ls_sql)
ELSE
MessageBox("SQL du DW", ls_sql)
END IF
- Résultat :
ls_sql
contient leSELECT …
exactement tel qu’il a été saisi dans le painter, avec les arguments (ex.:as_id
) s’il y en a. - Pour un DataStore, même syntaxe :
ids_1.Describe("DataWindow.Table.Select")
.
Cas particuliers
Type de source | Propriété à interroger | Exemple |
---|---|---|
Vue/Jointure SQL standard | DataWindow.Table.Select | (code ci-dessus) |
Procédure stockée | DataWindow.Table.StoredProc | ls_sql = dw_1.Describe("DataWindow.Table.StoredProc") |
Pipeline | DataWindow.Table.WorkSpace | … |
Syntaxe complète DW | DataWindow.Syntax | Renvoie le bloc syntaxe complet (utile pour clonage dynamique). |
Obtenir la requête exécutée avec les valeurs réelles
Si vous avez des variables liées et que vous voulez voir le SQL final envoyé au SGBD :
- Activez l’événement
SQLPreview
sur la transaction (ex.SQLCA
). - Dans cet événement, récupérez le paramètre
string sqlsyntax
:
// Sur l’objet transaction (typ. SQLCA)
event sqlpreview (string sqlsyntax, ref any parms)
TraceWrite('SQL envoyé : ' + sqlsyntax)
end event
Le moteur DataWindow remplace alors les arguments par leurs valeurs, vous donnant la requête exactement telle qu’elle part vers la base.
Points de vigilance
Describe()
retourne"!"
suivi du message d’erreur si la propriété n’existe pas ou est mal orthographiée.- Dans les DataWindow générés dynamiquement (
SyntaxFromSQL
), la requête peut être reconstruite à partir de la variable qui a servi à la créer ou de nouveau viaDescribe()
. - Sur les versions Unicode (PB 2019 R3+), préférez le type
string
(UTF-16) et vérifiez l’encodage si vous écrivez la requête dans un fichier.
Ainsi, une simple ligne — dw_1.Describe("DataWindow.Table.Select")
— suffit pour récupérer, afficher ou enregistrer la requête SQL d’un DataWindow directement depuis votre code PowerScript.