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 fonction Describe().
La clause SELECT 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 le SELECT … 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 sourcePropriété à interrogerExemple
Vue/Jointure SQL standardDataWindow.Table.Select(code ci-dessus)
Procédure stockéeDataWindow.Table.StoredProcls_sql = dw_1.Describe("DataWindow.Table.StoredProc")
PipelineDataWindow.Table.WorkSpace
Syntaxe complète DWDataWindow.SyntaxRenvoie 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 :

  1. Activez l’événement SQLPreview sur la transaction (ex. SQLCA).
  2. 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 via Describe().
  • 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.

Les mots clés rattachés à cet article : DataWindow  -  PowerBuilder  -  Sql

Nos clients

Une vingtaine de clients nationaux et internationaux