Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

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 05-06-2006 20:28:50

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

LE CODE SQL DE LA DATAWINDOW

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:

Code: pb

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.

Code: pb

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'.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22