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

Langage Delphi Discussion :

Ajout d'onglet pour des valeurs de base de données déjà existantes


Sujet :

Langage Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Ajout d'onglet pour des valeurs de base de données déjà existantes
    Bonjour,

    Je suis débutant sur Delphi, je tente de réaliser un programme qui récupère des informations sur une base de données MySql. Je suis sous Delphi 2010.
    Dans le cadre du programme, je veux pouvoir entrer une valeur dans ma deuxième colonne que si une valeur est sélectionné dans la première.

    Ci dessous, ma procédure pour rentrer ma valeur de la première colonne, et je voudrais donc faire la même procédure pour ajouter une valeur a la deuxième colonne que si une valeur de la première colonne est sélectionné et rajouter cette valeur sur la même ligne.

    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
    procedure TMAIN.Menu_F2Click(Sender: TObject);
    var
       ReponseS1 : string;
    begin
    if (ZDBPGA.QRY_PGA_SEC.State <> dsInactive)
    then begin
      inputquery('Nouvelle section analytique','Entrez le code section S1', ReponseS1);
      if not ZDBPGA.QRY_PGA_SEC.Locate('S1', ReponseS1, [])
      then begin
           ZDBPGA.QRY_PGA_SEC.Append;
           ZDBPGA.QRY_PGA_SECS1.Value := ReponseS1;
           DBXSECQRYSECLIB.FocusWithSelection;
           ZDBPGA.QRY_PGA_SECSEC.Value := ReponseS1;
           end;
      end;
    end;
    Merci d'avance
    Dernière modification par E.Bzz ; 05/04/2012 à 14h59. Motif: Pour indiquer [Résolu], merci d'utiliser le bouton sous le dernier message

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    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 736
    Points : 25 645
    Points
    25 645
    Par défaut
    Citation Envoyé par benn13 Voir le message
    si une valeur de la première colonne est sélectionné
    Que signifie le terme sélectionné ?
    Est-ce tu évoques la ligne en cours ? (en bleu dans un DBGrid)
    Est-ce tu évoques une valeur non vide dans S1 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         if InputQuery('Colonne 2','Valeur ?', ReponseS2) then
         begin
           if not ZDBPGA.QRY_PGA_SECS1.IsNULL and Trim(ZDBPGA.QRY_PGA_SECS1.Value) <> '') then
           begin     
             ZDBPGA.QRY_PGA_SEC.Edit;
             ZDBPGA.QRY_PGA_SECS2.Value := ReponseS2;
             ZDBPGA.QRY_PGA_SEC.Post; // tu ne l'as pas mis avec Append ?
           end;
         end;

  3. #3
    Invité
    Invité(e)
    Par défaut
    Par sélectionné, je veux dire effectivement en bleu, la ligne en cours, afin que la valeur 2 se rajoute bien sur la même ligne.

    Au passage, merci pour le code, il fonctionne parfaitement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Une autre petit question j'ai une colonne qui se nomme code et je souhaiterais que ce soit la concaténation des contenus des colonnes, ce qui donne en terme de nom de colonne S1.S2.S3.S4.S5.

    J'ai bien tenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ZDBPGA.QRY_PGA_SEC := ZDBPGA.QRY_PGA_SECS1.Value + ZDBPGA.QRY_PGA_SECS2.Value + ZDBPGA.QRY_PGA_SECS3.Value +
     ZDBPGA.QRY_PGA_SECS4.Value + ZDBPGA.QRY_PGA_SECS5.Value;
    J'ai erreur avec des types incompatibles, j'ai conscience que la solution doit être facile mais en tant que débutant je découvre et mes recherches ne m'ont mené à rien.

    A moins que je ne passe directement par la base de données via une requête qui fasse cette concaténation.
    Dernière modification par Invité ; 04/04/2012 à 13h05.

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 306
    Points : 41 792
    Points
    41 792
    Billets dans le blog
    65
    Par défaut
    Prendre l'habitude d'indiquer le type de champ plutôt qu'utiliser le type variant serait déjà bien . Ensuite ZDBPGA.QRY_PGA_SEC est un champ , pas la valeur du champ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ZDBPGA.QRY_PGA_SEC.asString := ZDBPGA.QRY_PGA_SECS1.asString + ZDBPGA.QRY_PGA_SECS2.asString + ZDBPGA.QRY_PGA_SECS3.asString +
     ZDBPGA.QRY_PGA_SECS4.asString + ZDBPGA.QRY_PGA_SECS5.asString;
    enfin attention aux valeurs nulles pouvant retourner des choses étranges
    exemples
    //-------------------------------------------------
    S1 S2 S3 S4 S5 SEC
    01 02 03 04 05 -> 0102030405 ok
    mais
    01 02 03 -> 010203 ok
    01 02 03 -> 010203 ooops
    //---------------------------------------------------

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pour continuer dans mon besoin d'assistance, j'ai un petit problème à vous soumettre. Mon programme comporte deux parties, une sur la gauche qui est un txgrid est qui récupère deux colonnes dans ma base de données (S1 et le la Section) et une deuxième partie, sur la droite tcxDBTreeList qui récupère les colonnes Code, S2, S3... Et au dessus de ce cette partie de droite, j'ai un TcxTabControl pour mettre des onglets. Le but étant que chaque ligne sur la partie de gauche fasse un onglet à droite. Avec le code suivant cela fonctionne que quand je rajoute une ligne à droite, mais pas avec les lignes existantes déjà dans la base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TMAIN.DBXSECQRYSECLIBPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    begin
    ZDBPGA.QRY_PGA_SECSECLIB.Value := DisplayValue;
    tabControl.Tabs.Add(DisplayValue);
    end;
    Ce code me permet cela de rajouter les lignes que je créée pas celle qui viennent déjà de la base de données.

    Merci d'avance

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 306
    Points : 41 792
    Points
    41 792
    Billets dans le blog
    65
    Par défaut
    je n'ai pas tout compris , mais l'essentiel je pense . je ne connais pas les composants tcx.......

    à L'ouverture de la table (ou query) qui rempli le tcxDBTreeList on est positionné sur le premier enregistrement il faut a ce moment là (afterOpen) charger les 'différents onglets' , idem lorsque l'on change de 'Branche ?' du tcxDBTreeList (onSelect?)

    voila ce que je ferais avec un treeview 'ordinaire' et des ZeosDBO (j'aurais pu utiliser des uib mais j'y suis moins familiarisé et j'ecris sans Delphi sous la main et ADO n'est pas du tout mas tasse de thé)

    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
     
    procedure creeronglets(S1 : String)
    var ZRQ : TZReadonlyQuery;
    begin
     ZRQ:=TZReadOnlyQuery.Create(nil);
     try
      ZRQ.Connection:=Base.Connection;
      ZRQ.SQL.Text:='SELECT DISTINCT(S2) AS ONGLET FROM TABLE WHERE S1=:S1';
      ZRQ.ParamByName('S1').asString:=S1;
      ZRQ.Open;
      tabControl.tabs.Clear;
      while not ZRQ.eof do
        begin
          tabControl.tabs.Add(ZRQ.FieldByname('ONGLET').asString);
          ZRQ.Next;
        end;
     finally
     ZRQ.free;
     end;
    end;
    et ensuite dans le AfterOpen ainsi que dans l'événement du Treeview il suffit d'appeler la procédure


    PS.Merci de ne pas changer le titre du post et/ou de créer un nouveau poste si sujet différent . au départ c'etait une insertion dans un fichier , c'est passé a une concaténation de chaine et maintenant on parle d'onglets cela aurais mérité 3 posts dont 2

  8. #8
    Invité
    Invité(e)
    Par défaut
    Petite question, j'utilise pour la connexion avec la base TZConnection, TZquery, TZDataSource et TZUpdateSQl, donc j'aurais voulu savoir à quoi servait le TZReadOnlyQUery ?

    Je suis débutant donc je nage un peu ...

    PS : Désolé pour le changement de titre, je pensais que sa éviter de charger le forum alors que le thème reste le même, je le saurais à l'avenir.
    Dernière modification par Invité ; 05/04/2012 à 12h26.

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 306
    Points : 41 792
    Points
    41 792
    Billets dans le blog
    65
    Par défaut
    Comme son nom l'indique TZReadonlyQuery est une requête en lecture seule (pas de possibilité de lui lier un TZupdateSQL) .
    pour tout ce qui est juste lecture de données je le préfère a TZQuery .
    C'est avant tout pour des questions d'utilisation de mémoire etc... mais aussi pour des questions de logique "pourquoi ouvrir un truc en mode lecture/écriture alors que je ne veux que lire ?"

    Même pour lire une Table entière je préfère souvent passer par un TZQuery et , si c'est de la lecture seule un TZQuery . Peut être parce que j'ai utilisé des composants sans TxxxTable mais surtout pour pouvoir ne mettre que les champs voulus . Sauf rares exceptions (un programme rapide , un test etc ... ) je ne fais jamais un SELECT * FROM TABLE

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci pour cet éclaircissement, je vais essayer de mettre sa en place

  11. #11
    Invité
    Invité(e)
    Par défaut
    En fait j'ai rajouter un autre code pour mes onglets qui est beaucoup plus courts et que je comprend mieux, mais j'ai un problème au niveau des noms des onglets, car en fait, tous les onglets portent le nom de ma première valeur.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      I :=  DBXSECQRY.DataController.RecordCount;
      for I := 0 to I - 1 do
      tabControl.Tabs.Add(ZDBPGA.QRY_PGA_SECSECLIB.Value);
    Je vois le problème dans mon code mais je ne sais pas comment dire que pour chaque onglet il faut lui assigner la 1ère valeur puis pour un autre onglet la deuxième valeur et ainsi de suite...
    Dernière modification par Invité ; 06/04/2012 à 12h24.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    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 736
    Points : 25 645
    Points
    25 645
    Par défaut
    Faudrait peut-être que tu lises les réponses de SergioMaster mais surtout que tu cherches à les comprendre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DBXSECQRY.DataController.First();
    while not DBXSECQRY.DataController.EOF do
    begin
      tabControl.Tabs.Add(ZDBPGA.QRY_PGA_SECSECLIB.Value);
     
      DBXSECQRY.DataController.Next(); // ce que tu avais oublié !
    end;

  13. #13
    Invité
    Invité(e)
    Par défaut
    Merci pour la solution et je vous prie de m'excuser

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 736
    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 736
    Points : 25 645
    Points
    25 645
    Par défaut
    Tu es tout excusé !
    Comme tu débutes, tu dois te plonger dans la documentation comme celle du TDataSet
    le TZQuery et TZReadonlyQuery hérite du TDataSet !
    le mot "hérite" c'est pour la "Programmation Orientée Objet" (POO), j'ignore si tu connais, disons que tout ce qui existe dans le TDataSet (objet fourni par Delphi) sera présent dans TZQuery
    Il te faut bien connaître le TDataSet pour apprécier les particularités du TZQuery et du TZReadonlyQuery

    Je ne connais pas Zeos et la qualité de leur documentation, mais comme leurs objets héritent du TDataSet, ils ne vont pas tout ré-expliquer ce qui est standard comme First(), EOF, Next()...
    Il donc facile de passer à côté !

    Il en va de même pour le TForm, le TStrings ... et toute une ribambelle de classes très fréquemment utilisées !

  15. #15
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 306
    Points : 41 792
    Points
    41 792
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Je ne connais pas Zeos et la qualité de leur documentation
    La documentation est quasi nulle mais ZEOSDBO a été conçu pour être un BDELike ce qui veux dire que (quasi toute) la documentation sur les composants BDE peut s'appliquer aux composants zeos

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2013, 11h44
  2. Réponses: 3
    Dernier message: 18/02/2009, 11h00
  3. [JTable] afficher des Chekbox pour des valeurs booléennes
    Par grabriel dans le forum Composants
    Réponses: 11
    Dernier message: 21/02/2007, 11h37
  4. Recherche classe pour ajout/modif/suppression d'articles dans une base de donnée
    Par will89 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/02/2007, 12h59
  5. [MySQL] Ajouter des informations à notre base de données
    Par wild_seven dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 26/12/2005, 18h15

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