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

Composants FMX Delphi Discussion :

Pointer sur plusieurs sources de données


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Fxg
    Fxg est déconnecté
    Membre émérite
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 513
    Par défaut Pointer sur plusieurs sources de données
    Bonjour,

    Je suis en train de porter mon appli VCL vers FMX.
    Pour choisir les critères de recherches sur le base de données j'utilisais un TCombobox et un fois la sélection faite je remplissais un DBGrid dans lequel l'utilisateur choisissais la valeur voulue .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      begin // Recherche sur la Collection
            with DM2.FDQRecherche.SQL do
            begin
              Clear;
              Add('SELECT C.num_collection, ');
              Add('C.Collection AS collection_i ');
              Add('FROM collections C ');
              Add('ORDER BY collection_i ');
            end;
            DBChoix.DataSource := DM2.DSRecherche;
    Comme cela je n'utilisais qu'une seul DBGrid que je remplissais avec la bonne requête. Un double clic sur la valeur choisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    procedure TForm1.RechercheListe(IdRecherche: Integer; IdIndice: Integer);
    var // IdRecherche : champ de recherche case..of
      SQLCode: TStringList; // IdIndice : Identifiant à rechercher
    begin
      SQLCode := TStringList.create;
      SQLCode.Clear;
      SQLCode.assign(DM2.SQLLivres);
      DM2.FDQLivres.active := False;
      DM2.FDQLivres.SQL.Clear;
      case IdRecherche of
    .....
     
        12:
          begin // Recherche sur la collection
            SQLCode.Add(DM2.SQLChoix + 'L.num_collection=:saisie');
            SQLCode.Add(DM2.SQLTri + 'L.Titre');
            compteId1 := 'num_collection';
          end;
      end;
      compteId2 := IdIndice;
      DM2.FDQLivres.SQL := SQLCode;
      DM2.FDQLivres.ParamByName('saisie').Value := IdIndice;
      DM2.FDQLivres.open;
      SQLCode.Free;
    Est-il possible de garder cette même façon de faire en FMX ? Sous réserve qu'elle ne soit pas non plus absurde.
    Cela je pense pourrait se traduire par la création d'une liaison par programmation sans bien sûr utiliser le concepteur même en mode expert.

    Au passage merci à Serge pour sa doc sur les LiveBindings, il est indiqué d'ailleurs que pour le Tgrid
    Cette partie est si complexe que je préfère en limiter les explications...
    J'ai bien peur effectivement que cela le soit trop pour mon niveau.

    PS : version 10.3 community + Firebird

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    pour répondre, je ne comprends pas trop cette histoire de grille ou serait-ce grilles. Mat ça sur le compte de l'heure matinale ou ...

    Comme cela je n'utilisais qu'une seul DBGrid que je remplissais avec la bonne requête.
    Oui, bon c'est toujours possible, même avec LiveBindings, mais un LiveBindings "de base" créera des colonnes automatiquement, libellé = nom colonne. Moi j'aime bien avoir des grilles (quand j'en utilise) avec des noms de colonnes et des comportements de saisie plus "personnalisés". J'imagine qu'il est possible de le faire après coup


    Une remarque, je vois qu'il y a FDQuery donc une utilisation des macros serait pas mal surtout quand je lis quelque chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     begin // Recherche sur la collection
            SQLCode.Add(DM2.SQLChoix + 'L.num_collection=:saisie');
            SQLCode.Add(DM2.SQLTri + 'L.Titre');
            compteId1 := 'num_collection';
    dans le cas d'un SQL "général" j'ai tendance à écrire comme ceci
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT &colonnes FROM &table &where &tri
    ce qui permet de faire pas mal de choses (paramètres inclus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    With FDQuery do
    begin
    MacroByName('Colonne').asRaw:='*'; // :vomi:
    MacrobyName('table').asRaw:='Matable' // on peut même mettre des jointures 
    MacroBYName('Where').asRaw:='WHERE L.num_collection=:saisie'; 
    MacrobyName('Order').Clear;  // pour montrer un RAZ d'une clause
    ParamByName('Saisie').asInteger:=idINdice;
    ....
    end;
    Cette partie est si complexe que je préfère en limiter les explications...
    Je ne me souvenais plus de cette petite phrase, il faudrait m'en indiquer le lieu une recherche rapide ne m'a pas permis de mettre le doigt dessus, depuis j'ai certainement pas mal "évolué" même si j'évite de plus en plus les grilles et préfère les ListView
    Dans le cas d'une "grille" aux sources multiples j'aurai certainement choisi un TListBox, avec un style par source de données (tiens, cela me rappelle une idée à tester pour "simuler" un TreeView en Livebindings ) ou un TScrollBox avec des frames (préférence au premier, mais première préférence au TListview avec sa recherche intégrée)

    Au passage merci à Serge pour sa doc sur les LiveBindings,
    Merci de cet encouragement, j'ai toujours l'impression de prêcher dans une chapelle vide quand je sors un tutoriel ou écrit des billets. Même si je vois le nombre de "lus" il y a si peu de retour que j'ai des doutes. Ce n'est pas que j'en ai pas sous le coude (des tutoriels) ni des idées sur divers sujets mais cela demande beaucoup de temps (écriture et corrections).
    sous le coude :
    Les Styles (en plusieurs parties)
    L'utilisation des SVG
    Firebird SQL sur un NAS SYNOLOGY (un petit OVNI dans ce forum , utilisation de Docker en prime)
    Utilisation de WSL pour tester un programme LINUX
    Utilisation de TMS Cryptography pour signer un PDF
    des idées :
    TreeView et Livebindings
    TListView et IInflatableContent (oui encore du TListView)
    Grid, TColumn Helpers (ajout de bouton etc...)
    TlistView, Regroupement des billets dans un tutoriel, presque un livre
    Livre sur les LiveBindings (on m'y encourage mais j'ai encore 982 jours pour y réfléchir)

  3. #3
    Fxg
    Fxg est déconnecté
    Membre émérite
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 513
    Par défaut
    Quand on écrit le dimanche soir, on n'est pas forcément clair dans ses explications

    Je vais essayer de préciser les différents points
    Nom : image_2020-10-20_133707.png
Affichages : 171
Taille : 6,5 Ko

    Le combobox permet de choisir le champs sur lequel va porter la recherche et va déclencher le remplissage du DbGrid situé dessous qui est rempli avec le résultat de FDQRecherche. Le SQL de FDQRecherche est alimenté en fonction du choix du combobox.

    Je vais me pencher sur l'utilisation des Macros que je ne connais pas

    Dans le cas d'une "grille" aux sources multiples j'aurai certainement choisi un TListBox, avec un style par source de données (tiens, cela me rappelle une idée à tester pour "simuler" un TreeView en Livebindings ) ou un TScrollBox avec des frames (préférence au premier, mais première préférence au TListview avec sa recherche intégrée
    Je vais regarder la mise en place de plusieurs styles et un TListBox..... Mais dans ce cas comment lui indiquer le "branchement" sur la bonne source de données.
    Dans mon approche VCL, mon DBGrid était lié à FDQRecherche, et je n'avais qu'à modifier son SQL pour avoir la liste des collections ou des séries, ou etc....Je faisais une économie de composants (selon moi).
    L'approche FMX demande vraiment de faire une vidange des réflexes (bons ou mauvais ) acquis.

    Sinon ta citation se trouve dans le doc FMX et les composants d'accès aux base de données, partie II-A-3-c juste au-dessus du II-B
    Et encore merci pour cette bible, qui est une des rares en français (et merci aussi à Patrick Prémartin pour ses vidéos et son blog)

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Re,
    Citation Envoyé par Fxg Voir le message
    Quand on écrit le dimanche soir, on n'est pas forcément clair dans ses explications
    Je confirme , moi c'est les matins avant mon café et le soir après bof 7h00 du matin

    Je vais essayer de préciser les différents points
    Que cette image me plait, typiquement ce qu'un TlistView pourrait régler recherche incluse, cf mon dernier tutoriel Recherche dans un TListView

    Le combobox permet de choisir le champs sur lequel va porter la recherche et va déclencher le remplissage du DbGrid situé dessous qui est rempli avec le résultat de FDQRecherche. Le SQL de FDQRecherche est alimenté en fonction du choix du combobox.
    Il s'agirait alors d'une seule et même requête sur une table ? Si je déduis correctement une sorte de bibliothèque.
    La question que je me pose est : pourquoi un DBGrid s'il n'y a qu'une colonne affichée

    Je vais me pencher sur l'utilisation des Macros que je ne connais pas
    ça change la vie au revoir les SQL "en tiroir" avec des SQL.Add


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je vais regarder la mise en place de plusieurs styles et un TListBox..... Mais dans ce cas comment lui indiquer le "branchement" sur la bonne source de données.
    J'avoue n'avoir jamais testé l'approche diverses sources de données, une bonne idée de billet ou même tuto.
    S'il s'agissait d'une seule table, et d'une seule colonne je partirai sur TListView et un SQL qui renverrai toujours le même nom de colonne
    genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT &colonne AS texte FROM &tables &where &groupe &order
    ainsi mes LiveBindings resteraient toujours les mêmes (je te cite "économie de composants")

    tu remarqueras que j'ai ajouté une macro groupe
    si je reprend l'exemple d'une bibliothèque (idlivre,titre,idauteur,idcollection, ....)
    ce SQL pourrait remplir à peu pres tout
    ie. pour lister les collections avec des livres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    macrobyName('colonne').asRaw:='C.NOM_COLLECTION';
    macrobyName('tables').asRaw:='Livres l join collections c on l.id_collection=c.collection_id';
    macrobyname('where').Clear;
    macrobyname('groupe').aRaw:='GROUP BY C.NOM_COLLECTION';
    MacroByname('order').clear;
    idem pour auteurs
    pour livre ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    macrobyName('colonne').asRaw:='TITRE';
    macrobyName('tables').asRaw:='Livres';
    macrobyname('where').Clear;
    macrobyname('groupe').Clear;
    MacroByname('order').asRaw:='ORDER BY TITRE'
    Mais un TLitstView, groupé et d'apparence dynamique (titre auteur collection) serait encore plus facile cela écrit c'est ma marotte le TListView surtout pour les mobiles


    L'approche FMX demande vraiment de faire une vidange des réflexes (bons ou mauvais ) acquis.
    je confirme

    Sinon ta citation se trouve dans le doc FMX et les composants d'accès aux base de données, partie II-A-3-c juste au-dessus du II-B
    Je vois, je cherchais dans mon tutoriel explicitement sur les Grilles et non dans le tutoriel plus "général"
    J'aurais du écrire "fera l'objet d'un tutoriel spécifique" sauf que je ne savais pas encore que je l'écrirai

  5. #5
    Fxg
    Fxg est déconnecté
    Membre émérite
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 513
    Par défaut
    Que cette image me plait, typiquement ce qu'un TlistView pourrait régler recherche incluse, cf mon dernier tutoriel Recherche dans un TListView
    j'avais bien lu ton tutoriel (comme tous les autres aussi qui sont d'ailleurs imprimés et reliés) et j'avais compris (mais c'est peut être erroné) que cela permettait de faire des recherches à l'intérieur de la-dite liste.

    si je reprend l'exemple d'une bibliothèque (idlivre,titre,idauteur,idcollection, ....)
    On est bien sur ce type de schéma, rien de très fou ;-)

    Je souhaite simplement pouvoir sélectionner par exemple une collection parmi toutes les collections disponibles et afficher DANS une AUTRE grilles tous les ouvrages dans cette collection : un truc basic en VCL.
    En FMX aussi si ce n'est que je ne sais pas faire autre chose que : une liste (ou une grille) branchée à une source de données, et pas une liste et je choisis la source de données qui va l'alimenter.

    La question que je me pose est : pourquoi un DBGrid s'il n'y a qu'une colonne affichée
    parce que dans mon petit esprit Base de données ---> requête ---> DBGrid. Un réflexe pavlovien en quelque sorte.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    parce que dans mon petit esprit Base de données ---> requête ---> DBGrid. Un réflexe pavlovien en quelque sorte.
    On ne peut plus pavlovien que celui-là . A chaque fois que je lis Grid ou StringGrid (FMX) j'ai cette réaction : "comment cela se passerait sur un mobile !" exemple encore ici

    En FMX aussi si ce n'est que je ne sais pas faire autre chose que : une liste (ou une grille) branchée à une source de données, et pas une liste et je choisis la source de données qui va l'alimenter.
    Ben, bêtement sans tester j'écrirais qu'il suffit de modifier le BindSourceDB (équivalent du Datasource pour les composants)
    exemple : deux requêtes dm.Query1, dm.Query2 une forme avec une grille et un BindSourceDB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case btn.Tag of    
       1 :  BindSourceDB.Dataset:=dm.Query1;
       2 : BindSourceDB.Dataset:=dm.Query2;
       else ....
    end;
    Je rappelle : NON TESTE (et pas très joli, pourquoi pas une seule requête et des changements de SQL ?)

    comme tous les autres aussi qui sont d'ailleurs imprimés et reliés
    le début d'un livre , même les billets blog ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] Etat sur plusieurs Sources de Données
    Par b_reda31 dans le forum WinDev
    Réponses: 5
    Dernier message: 21/08/2011, 01h25
  2. [C# 1.1] Graphe avec plusieurs sources de données
    Par doudoustephane dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/01/2007, 11h48
  3. Requête sur plusieurs bases de données
    Par Oluha dans le forum ASP
    Réponses: 8
    Dernier message: 14/10/2005, 14h57
  4. Réponses: 2
    Dernier message: 24/05/2005, 16h35
  5. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 10h02

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