IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Serge Girard (aka SergioMaster)

[Actualité] Le composant TFDQBE de la version Delphi 12 (Athènes)

Noter ce billet
par , 22/12/2023 à 14h45 (1270 Affichages)
La requête par l'exemple (QBE), à l'origine fournie avec BDE est encore actuelle même si obsolète.

Ci-dessous l'utilisation du programme dbd32.exe qui était fourni avec BDE sous d'anciennes versions.
Nom : Capture.PNG
Affichages : 3284
Taille : 169,9 Ko

Firedac qui, sur certains aspects, est proche des composants BDE, remet cette possibilité intéressante en selle grâce au nouveau composant FDQBE.

Ci-dessous mon programme d'essais
Nom : Capture_1.PNG
Affichages : 2822
Taille : 37,0 Ko

En pièce jointe, au bas du billet, vous trouverez les sources de la version FMX.

Reste à parler de la syntaxe utilisée par le composant, j'ai essayé d'en faire une synthèse, déduite de l'unité du composant et de mes essais.

Terme
Un terme permet d'indiquer la ou les valeurs recherchées pour une colonne ainsi que les conditions à appliquer.
Syntaxe d'un terme
NOT
OR
AND
Terme0 '!' Terme0 Terme0 '|' Terme0 Terme0 '&' Terme0

Terme0 = valeur | EQ valeur | direct | macro | masque | valeur '~' valeur | '(' valeur ')'
valeur = nombre | chaine de caractères
EQ = '=' | '>' | '<' | '>=' | '<=' | '<>'
masque = chaine de caractères pouvant contenir les charactères de substitution '%' ou '_'
direct = '[' instruction ']' *si [qoNoDirect] est exclu des Options
macro = '@' nom *nom = nom de la macro
Tri = '#' ('+'|'-') numéro *numéro = ordre de tri


Un terme commencera, la plupart du temps, par un comparateur '=','>','<','>=','<=' ou '<>' ou par une négation '!', généralement suivi d'une valeur.
Exemples :
Le terme =1 (le signe '=' est optionnel, le terme 1 est équivalent à =1) sera interprété en (A.nomcolonne = 1).
<>1 peut s'écrire !1. Ces deux termes seront interprétés de la même manière par (NOT A.nomcolonne = 1).

Il est possible de combiner plusieurs termes pour une même colonne par les opérateurs ('&' pour AND et '|' pour OR).
Exemples :
Le terme 1&>4 sera interprété en (A.nomcolonne = 1 AND A.nomcolonne > 4).
Le terme 1|4 sera interprété en (A.nomcolonne = 1 OR A.nomcolonne = 4).

Cas particuliers :

NULL
Pour obtenir une comparaison sur une valeur indéterminée (NULL) d'un champ annulable (pouvant avoir une absence de valeur), le terme ne contiendra que l'opérande '=','!=' ou '<>' permettant ainsi d'obtenir IS NULL dans le premier cas ou IS NOT NULL pour les deux autres

Intervalle de valeurs
Il est possible d'utiliser l'opérateur '~' pour obtenir un intervalle de valeurs
Exemple :
Le terme 1~5 sera interprété en (A.nomcolonne BETWEEN 1 AND 6).

Colonnes Chaîne de caractères

Par défaut, une valeur contenant une chaîne de caractères sera interprétée comme une recherche partielle.

Une recherche partielle utilisera les caractères de substitution '_' ou '%' pour remplacer, respectivement, un ou plusieurs caractères.
Par défaut, cette recherche ne sera pas sensible à la casse.
Exemples :
Le terme %o% recherchera toutes les valeurs (chaine de caractères) contenant 'o', interpété par ({fn UCASE(A.nomcolonne)} LIKE '%O%').
Le terme Co% recherchera toutes les valeurs (chaine de caractères) commençant par 'Co', interpété par ({fn UCASE(A.nomcolonne)} LIKE 'CO%').
Le terme _o% recherchera toutes les valeurs (chaine de caractères) dont la seconde lettre est 'o' ou 'O' , interpété par ({fn UCASE(A.nomcolonne)} LIKE '_O%').

Quid de cette expression {fn UCASE(A.CategoryName)} ? Ici, vous voyez en œuvre une des fonctionnalités de Firedac, le prétraitement de commandes.
Plus d'informations sur le prétraitement de Firedac ici

Il est possible de changer ce comportement en modifiant la propriété Options du composant FDQBE en retirant [qoPartial].
Exemples :
[qoPartial] inclus dans Options
Le terme Boissons sera interprété en ({fn UCASE(A.nomcolonne)} LIKE '%BOISSONS%').
Un moyen d'éviter le LIKE sans passer par la modification de la propriété Options est d'écrire le terme ainsi (Boissons) pour obtenir {fn UCASE(A.CategoryName)} = 'BOISSONS').
[qoPartial] non inclus
Le terme Boissons sera interprété en ({fn UCASE(A.nomcolonne)} = 'BOISSONS') à l'identique du terme (Boissons).

De même que pour la sensibilité à la casse, le comportement peut en être modifié en retirant la valeur [qoNocase] de la propriété Options.
Ainsi :
  • Le même terme Boissons ne fera plus d'appel à la fonction UCASE (A.nomcolonne LIKE '%Boissons%').
  • Le terme (Boissons) étant interprété en (A.nomcolonne='Boissons').


Colonnes de type numériques
le point décimal (si besoin) doit être utilisé dans le terme.
Exemple : <=19.75 sera interprété ainsi (A.ColonneNumerique <= 19.75).

Tri
Un tri peut être indiqué pour une colonne, soit seul, soit à la fin d'un terme ou d'une combinaison de terme.
Un tri s'exprime en ajoutant un '#' suivi du type '+' (optionnel) pour ASCendant ou '-' DESCendant et obligatoirement d'un numéro d'ordre.
Exemples :
Le terme #1 sera interprété par la clause ORDER BY A.nomcolonne.
Le terme #-1 sera interprété par la clause ORDER BY A.nomcolonne DESC.
Dans ce tableau
Colonne1 Colonne2
#-2 #1
[#-2][#1] sera interprété par la clause ORDER BY A.Colonne2,A.Colonne1 DESC.
Vous comprendrez donc qu'il est important de bien indiquer un numéro d'ordre unique pour chaque colonne.

Utilisation de fonctions
Une dernière possibilité s'offre à nous. Lors de mon paragraphe sur les recherches partielles, nous avons vu une utilisation du prétraitement des commandes.
Pour peu que, dans la propriété Options du composant FDQBE, la directive [qoNoDirect] ne soit pas incluse, nous pourrons utiliser cette fonctionnalité.
Le terme devra alors être entre crochets [ ]
Exemple : Le terme [{year(colonnedate)} = 1997] permettra une sélection sur la partie année d'une date et sera interprété ainsi (year(colonnedate)=1996).

Cette nouvelle syntaxe augmente considérablement les possibilités (même si toutes les fonctions ne sont peut-être pas valides).
Rubrique Description
Fonctions macro caractères Liste des fonctions utilisant des chaînes de caractères.
Fonctions macro numériques Liste des fonctions utilisant des nombres.
Fonctions macro date et heure Liste des fonctions utilisant la date et l'heure.
Fonctions macro système Liste des fonctions externes.
Fonction macro CONVERT Décrit la fonction CONVERT.

J'ai retrouvé dans mes archives MKQueryBuilder (D3-D6) que vous pouvez retrouver ici

Nom : Capture.PNG
Affichages : 312
Taille : 30,2 Ko

Voilà le challenge posé, reste à savoir comment ce nouveau composant pourrait y répondre au sein d'une application proposant ce design.
Miniatures attachées Fichiers attachés

Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Viadeo Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Twitter Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Google Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Facebook Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Digg Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Delicious Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog MySpace Envoyer le billet « Le composant TFDQBE de la version Delphi 12 (Athènes) » dans le blog Yahoo

Mis à jour 18/01/2024 à 06h33 par SergioMaster

Catégories
Programmation , Delphi

Commentaires

  1. Avatar de SergioMaster
    • |
    • permalink
    Quelques petites coquilles s'étaient glissées dans mes explications sur la syntaxe.
    Merci à navyg de me les avoir signalées.
    Elles sont désormais corrigées, mais, nul n'étant parfait, signalez-moi les restantes par MP