Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
LE CODE SQL DE LA DATAWINDOW
Le SQL est la puissance qui se trouve derrière la plupart des Datawindows, parfois il est nécessaire d'extraire le SQL de la DataWindow et de le modifier.
Pour extraire la syntaxe du SQL de la DataWindow, il y a la fonction Describe().
La DataWindow stocke le SQL dans un format spécial appelé PBSELECT.
Si l'application n'est pas connectée à la base et que Describe() est appelée c'est le PBSELECT qui est retourné et non le vrai SQL.
Il y a plusieurs façons d'extraire le SQL de la DataWindow:
sSelect = dw_1.Desccribe("DataWindow.Table.Select") // tildes ~" sSelect = dw_1.Desccribe("DataWindow.Table.SQLSelect") // tildes ~" sSelect = dw_1.Desccribe("DataWindow.Table.Select.Attribute") // PBSELECT sSelect = dw_1.GetSQLSelect() // tildes ~" sSelect = dw_1.Object.DataWindow.Table.Select // tildes ~" sSelect = dw_1.Object.DataWindow.Table.SQLSelect // tildes ~" sSelect = dw_1.Object.DataWindow.Table.Select.Attribute // PBSELECT[/quote] Le SQL obtenu peut être modifié et réappliqué à la DataWindow. [quote]dw_1.Modify(ClauseSQL) dw_1.Object.DataWindow.Table.Select = ClauseSQL dw_1.Object.DataWindow.Table.SQLSelect = ClauseSQL dw_1.Object.DataWindow.Table.Select.Attribute = ClauseSQL dw_1.SetSQLSelect(ClauseSQL)
La contrainte de la ClauseSQL, c'est qu'elle doit retourner le même nombre de colonnes, avec les mêmes types de données, dans le même ordre et il faut que la DataWindow soit Updateable.
Si la DataWindow est Updateable et qu'une autre table est spécifié dans le FROM, PB tente de modifier les propriétés de mise à jour. PB suppose que la clé primaire se trouve à la même place que le SELECT original.
PB rend la DataWindow non updateable si l'une de ces deux conditions est vérifiée:
1. Plus d'une table se trouve dans le FROM
2. Une colonne updateable est une valeur calculée.
Après avoir appelé SetSQLSelect(), ne pas oublier d'appeler dw_1.SetTransObject(sqlca)
La fonction SetSQLSelect() ne peut s'appliquer à un DataWindow qui possède des Retrieval Arguments.
L'accès direct et Modify() ne permet pas de valider la clause SQL et ne modifie pas les propriétés de mise à jour. Ils permettent à ce que la DataWindow ait des Retrieval Arguments.
Il y a des propriétés SQL associées à la DataWindow et ses colonnes :
dw_1.Object.DataWindow.Retrieve.AsNeeded = 'Yes' | 'No'
Détermine si les lignes sont lues dans le Buffer chaque fois que l'utilisateur fait défiler la partie visible vers le bas. Ce qui permet d'accéder à la première ligne avant que PB ne finisse le lecture de la totalité des lignes.
dw_1.Object.DataWindow.Storage
Cette propriété contient la quantité de stockage virtuel en octets utilisé par la DataWindow.
RetrieveRow event long lStorage lStorage = Long(dw_1.Object.DataWindow.Storage) IF lStorage > 50000 THEN dw_1.DBCancel() END IF
dw_1.Object.DataWindow.Table.CrosstabData
Spécifie une liste d'expressions séparées par des tabulations utilisée pour calculer des valeurs de colonnes dans une DataWindow Crosstab.
dw_1.Object.DataWindow.Table.Filter
Spécifie la condition de sélection utilisée par la DataWindow pour les lignes lues avant qu'elles ne rejoignent le buffer. Si la condition est changée il faut relire les lignes de la base.
dw_1.Object.DataWindow.Table.Procedure
Permet de changer la procédure stockée ou de changer la source de données utilisée par la DataWindow.
dw_1.Object.DataWindow.Table.Procedure = "EXECUTE sp_customer;0"
dw_1.Object.DataWindow.Table.Select
Récupère le SQL utilisé comme source de données de la DataWindow.
dw_1.Object.DataWindow.Table.Select.Attribute
Récupère une version à lecture seule du SQL.
dw_1.Object.DataWindow.Table.Sort
Spécifie l'ordre de tri des lignes avant qu'elles ne soient chargées dans le buffer de la DataWindow.
dw_1.Object.DataWindow.Table.SQLSelect
Spécifie une version à lecture seule de la dernière requête SQL exécutée de la DataWindow.
dw_1.Object.DataWindow.Table.UpdateKeyInPlace = 'Yes' | 'No'
Spécifie quel type de mise à jour à générer si une colonne clé est modifiée.
Si 'Yes' alors UPDATE de la clé, Si 'No' DELETE puis INSERT de la clé.
dw_1.Object.DataWindow.Table.UpdateTable
Spécifie le nom de la table dans la clause FROM lors de la génération de la mise à jour.
A utiliser conjointement à colonne.Update lors de la mise à jour de plusieurs tables à partir d'une DataWindow.
dw_1.Object.DataWindow.Table.UpdateWhere
Spécifie quelles colonnes se trouvent dans la clause WHERE pour la génération des clauses de mise à jour. Les valeurs prises sont: 0 Key Columns, 1 Key and Updateable Columns, 2 Key and Modified Columns.
dw_1.Object.Colonne.Criteria.Dialog = 'Yes' | 'No'
Détermine si PB ouvre la fenêtre Specify Retrieval Criteria lorsque la fonction retrieve() est appelée.
dw_1.Object.Colonne.Criteria.Override_Edit = 'Yes' | 'No'
Spécifie si le style d'édition de la colonne est utilisé dans la fenêtre Specify Retrieval Criteria.
Si 'Yes' le style d'édition n'est pas utilisé, Si 'No' le style d'édition est utilisé.
dw_1.Object.Colonne.Criteria.Required = 'Yes' | 'No'
Si 'Yes' seulement = et <>, Si 'No' tous les opérateurs relationnels sont permis.
dw_1.Object.Colonne.Update = 'Yes' | 'No'
Spécifie si la colonne se trouve dans la clause de mise à jour générée.
Si 'Yes' la colonne est incluse, Si 'No' la colonne n'est pas incluse.
Le style de présentation CrossTab d'une DataWindow possède des propriétés modifiables:
dw_1.Object.DataWindow.CrossTab.Columns
Spécifie une expression comportant une liste de noms de colonnes de type chaîne séparées par des tabulations ou par virgule correspondant aux colonnes du Crosstab.
dw_1.Object.DataWindow.CrossTab.Rows
Spécifie une expression comportant une liste de noms de colonnes de type chaîne séparées par des tabulations ou par virgule correspondant aux lignes du Crosstab.
dw_1.Object.DataWindow.CrossTab.SourceNames
Spécifie une expression comportant une liste de noms de colonnes de type chaîne séparées par des tabulations ou par virgule correspondant aux colonnes affichées dans la fenêtre Crosstab Definition.
dw_1.Object.DataWindow.CrossTab.Values
Spécifie une expression comportant une liste de noms de colonnes de type chaîne séparées par des tabulations ou par virgule correspondant aux expression utilisées pour calculer les valeurs du Crosstab.
Les DataWindows peuvent être en mode Query By Exemple (QBE) qui permet à l'utilisateur de spécifier une condition de sélection ou des valeurs de colonnes comme dans un Quick Select.
dw_1.Object.DataWindow.QueryMode = 'Yes' | 'No'
Permet de basculer du mode QBE vers le mode Normal. Durant le mode QBE, l'utilisateur spécifie une condition qui sera utilisé dans les prochaines lectures de la base en mode Normal. La condition est sauvegardée en mode Normal pour une éventuelle modification lors du prochain rebasculement vers le mode QBE.
dw_1.Object.DataWindow.QuerySort = 'Yes' | 'No'
Permet de rendre la première ligne sous forme de spécification de tri si la valeur est 'Yes'. Le fait de mettre le QuerySort à 'Yes' fait basculer le QueryMode à 'Yes', mais le fait de mettre le QuerySort à 'No' ne fait pas basculer le QueryMode à 'No'.
Hors ligne