IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Utilisation du QBE


Sujet :

Bases de données Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut Utilisation du QBE
    Bonjour,
    Je sais que c'est vieux, j'ai retrouvé le programme "module de base de données" fourni jusqu'à je ne sais quelle version ⇽ une de mes questions
    Nom : CQBE_D7.PNG
Affichages : 218
Taille : 169,9 Ko
    et il me semble que cela ne concernait que les base de données Paradox ou DBase et en utilisant bien évidemment le BDE ⇽ autre question
    Certains de mes programmes D3 proposait un truc du genre (mais je ne sais plus lesquels), avez-vous utilisé QBE et auriez-vous d'autres exemples d'utilisations ? ⇽ autre question

    Il y avait quelques composants tiers qui proposaient ça, i.e RxQBEQuery et j'ai vu un TJVQBEQuery quelque part, d'autres pistes ?


    Tout cela pour rédiger un billet sur le nouveau composant D12 : TFDQBE que je découvre
    ici, une version VCL de mes tests
    Nom : Capture.PNG
Affichages : 209
Taille : 37,0 Ko

    Il me reste encore pas mal de boulot pour décrypter entièrement ce composant et la "syntaxe" de recherche. Je n'ai découvert qu'une petite partie des possibilités de cette syntaxe en fouillant dans les sources car, pour l'instant, la documentation est inexistante (ou alors bien cachée)
    Pourtant, à l'heure de mon départ vers une retraite méritée, des demandes d'extraction vers des CSV sont devenues une de mes monnaies courantes, un outil de ce genre m'aurait permis quelques raccourcis plus faciles que l'utilisation d'InputQuery ou de création de formes spécifiques
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut J'ai les outils
    Pour le QBE , j'ai les outils pour travailler avec depuis Delphi. Je le retrouve dans mes archives et la mets à ta disposition

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    J'ai eu plusieurs dbd32.exe sur mon poste, je n'en ai plus avec D10, voici les anciens chemins

    "...\Program Files\Fichiers communs\Borland Shared\Module base de données\dbd32.exe" - Celui de BCB 6
    "...\Program Files\Fichiers communs\CodeGear Shared\Database Desktop\dbd32.exe" - Celui de XE2, vu qu'il date de 2012 lorsque je l'ai installé (ça se mélange un peu avec BCB 2007)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Voici le fruit non exhaustif de mes recherches sur les termes du QBE de ce nouveau composant

    Un terme, entendez par là le contenu d'une cellule, permet d'indiquer la ou les valeurs recherchées pour une colonne.

    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
    Les champs annulables (pouvant avoir une absence de valeur) : pour obtenir une comparaison sur une valeur indéterminée(NULL).
    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 intervale de valeurs
    Exemple :
    Le terme 1~5 sera interprété en (A.nomcolonne BETWEEN 1 AND 6).

    Recherche partielle
    Une recherche partielle utilisera les caractères de substitution '_' ou '%' pour remplacer, respectivement, un ou plusieurs caractères.
    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', interpété par ({fn UCASE(A.nomcolonne)} LIKE '_O%').

    Quid de cette expression {fn UCASE(A.nomcolonne)} ? 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

    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.
    Qu'est-ce que vous pensez de ce texte ? Des suggestions de correction ?

    Addenda
    Colonnes de type chaîne de caractères
    Par défaut, une chaine de caractères sera faite comme une recherche partielle. 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 la comparaison non sensible à la casse mais ce comportement peut-être lui aussi modifié en retirant la valeur [qoNocase] de la propriété Options
    Le même terme Boissons ne fera plus d'appel à la fonction (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 = 9.20).
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Merci à vous deux, DBExplorer.exe et DBD32.exe sont en fait la même chose.
    Utilisant BDE et des tables Paradox ou DBase du moins pour une utilisation "basique".
    On peut effectivement faire des requêtes sur des alias et donc des SGBDRs (même si je ne me souviens plus de la syntaxe exacte en cas de SQL) utiliser le bouton permettant de changer d'alias le permet.
    Bref, BDE étant obsolète depuis le début du siècle, il était temps d'avoir une solution de remplacement !

    Je profite de cette réponse pour rajouter quelques nouveaux trucs expérimentés
    Enfin une dernière possiblité 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, [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
    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.
    me reste à découvrir
    • La possibilité d'utilisation de macro, indiqué par un @
    • La possibilité d'utiliser un QueryDialog

    et toutes les possibilités des options et évènements
    Nom : Capture.PNG
Affichages : 156
Taille : 21,2 Ko
    Une plongée plus en profondeur donc
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    J'ai essayé de synthétiser la syntaxe (reprise des commentaires trouvés dans les sources) ainsi

    Syntaxe

    Terme = Terme0 | '!' Terme0 | Terme0 '|' Terme0 | Terme0 '&' Terme0 <Tri>

    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
    Qu'en pensez-vous ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Espagne

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Salut,
    peux-tu m'envoyer le code source

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut


    euh si je peut me permettre mais la version sql est un poils compliqué
    il y a une simplification

    SELECT *
    FROM (SELECT CategoryID,CategoryName,DESCRIPTION from Categories) A
    WHERE ((((A.CategoryID BETWEEN 1 AND 5 )))
    devient tout simplement
    SELECT CategoryID,CategoryName,DESCRIPTION
    from Categories
    WHERE CategoryID BETWEEN 1 AND 5
    a savoir que si tu as une relation avec une autre table il te faudra utiliser les
    inner joint
    plutôt que d'indiquer celle-ci dans la partie where comme cela se faisait avant
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par anapurna Voir le message
    euh si je peux me permettre mais la version sql est un poils compliqué
    Le SQL affiché est celui créé par le FDQBE. Oui, il est "compliqué" mais c'est ainsi
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par rubenzancuda Voir le message
    peux-tu m'envoyer le code source
    je me dépêche de finir le billet pendant les fêtes, les sources y seront.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Billet publié https://www.developpez.net/forums/bl...hi-12-athenes/
    N'hésitez pas à mettre des commentaires.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [Base de donnée] Utilisation syntaxe qbe
    Par FDR2006 dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/12/2023, 14h52
  2. [SBI QBE] Utilisation de QBE de SpagoBI
    Par Benoit_Durand dans le forum SpagoBI
    Réponses: 25
    Dernier message: 12/07/2012, 11h00
  3. [SBI QBE] Utilisation template jrxml produit par QBE
    Par Nicolas281088 dans le forum SpagoBI
    Réponses: 6
    Dernier message: 06/03/2009, 10h13
  4. utiliser la propriété COLUMN dans QBE
    Par alassanediakite dans le forum Contribuez
    Réponses: 1
    Dernier message: 03/06/2008, 19h11
  5. Utiliser la propriété "colonne" avec le qbe
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/11/2007, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo