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 :

Conserver un ligne dans un DBGrid.


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut Conserver un ligne dans un DBGrid.
    Bonjour !

    Desolé, je n'ai pas vraiment trouver de titre plus explicite


    J'ai donc une DBGrid relier a une base de donnees Access, l'utilisateur selectionne une ligne et une donnee propre a cette ligne remplie un DBEdit, invisible pour l'utilisateur, qui me sert par la suite a remplir le WHERE pour les requetes d'update (Merci Malatar).
    Par la suite l'utilisateur clique sur un bouton qui ouvre une nouvelle form qui offre plus de choix de modification de la ligne selectionner ulterieurement.

    C'est la que se trouve le probleme... comment faire pour que la ligne selectionner reste toujours la "cible" des DBEdit presents dans la nouvelle page ?

    J'ai creer une nouvelle DBGrid, invisible, dans la form2 qui ne doit contenir que la ligne selectionner dans la form1, mais des que je passe a la form2 la DBGrid2 "perd" la cible et ne selectionne que la ligne 1... Idem quand je "dedouble" le DBEdit qui me sert a faire les requetes, dans la form2, la cible devient aussi la ligne 1.

    Comment puis je conserver la bonne ligne ?

    Si vous pouviez m'aider, je bloque un peu
    Et sinon, y a un moyens pour vraiment rendre invisible une form avant que l'on ne l'affiche ? Form1.Visible:= false, n'a pas l'air de fonctionner...


    Merci d'avance !



    PS: Ca doit encore etre trop bete.... Malatar, viens a mon secours

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut


    Je pense que le dessin que je t'ai fait, est assez explicite en lui même
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Hmm, les fleches veulent dire "s'applique à" je suppose ?
    Parce que du coup je vois pas trop ou je mets la ADOTable et la Datasource
    Form1 ou Form2 ?

    Le bouton editer se rapporte a l'edition de la bdd avec les champs des 2 DBEdits, mais le probleme c'est que lorsque je fais un bouton, sur Form1, avec Form2.show; les champs de DBEdits (que je vois en arriere plan d'ailleurs...) se remplissent avec les donnees de la ligne 1 et non celles de la ligne selctionner en Form1...

    D'ailleurs le bouton Editer est sur la form1, comment je fais pour remplir la form2 puis revenir sur la form1 pour valider ?



    En tout cas merci de perdre du temps a m'aider

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    il faut que le datasource de ton DbGrid de la form1 et des DbEdit de la Form2 soit le même.

    (Bon mon dessin etait pas assez explicite )
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    si si, le dessin est on ne peut plus clair !
    mieux vaut 1 dessin qu'une longue explication

    Le but du jeu, est que les composants DB soit relié au même DataSource que la DBGrid.
    ainsi, lorsque la grille change de ligne, le DataSource aussi, et les DBEdit reliés au même datasource héritent des nouvelles données.

    Tes composants DBEdit et ta DBGrid doivent actuellement avoir 2 DataSources différents... même si ces 2 DataSources sont reliées à la même table, ca ne fait pas ce que tu souhaites.

    Ensuite, Peut importe ou tu met ton DataSource Unique, il faut juste qu'il soit Atteignable depuis Form1 ET Form2
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut



    Petit dessin moi aussi


    Le probleme c'est que quand je clique sur le bouton 3, je "perds" le lien, dans la DBEdit de la forme 2 il n'y a plus la donnee, alors que quand j'etais sur la form1 elle s'affichait ( je le voyais en arriere plan). C'est la premier ligne qui est selectionner, par defaut il me semble....

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Normalement dans Form2, pour avoir accès a form1 tu dois avoir

    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
    unit Form2;
    
    interface
    
    uses Classes,Dialogs,udefs,StdCtrls,SysUtils,Windows,ADODB, ...... ;
    
    type
      TForm2 = class(TForm)
    private
    ...
    public
    ...
    end;
    
    implementation
    
    uses Form1;
    
    ...
    Depuis Form2, en fesant Alt + F11, puis sélectionner Form1 te permet d'ajouter l'utilsation de la form1 à la form2 (et ca va mettre les uses comme indiqué en rouge).

    Après tes composants DbEdit pourront voir le datasource de la form1 qui est lui aussi lié à ta DbGrid.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Oui, mais non

    Je vais expliquer cela plus clairement, j'ai mal commencer.

    Tout est deja lier, il n'y a pas de problemes de ce cote la.

    En faite, j'explique, la DBGrid affiche des lignes correspondant chacunes a une personne. Quand l'utilisateur clique sur un ligne, le numero de telephone de la personne s'affiche dans un DBEdit. L'utilisateur appele cette personne, il a alors le choix (au dessus de la DBGrid) entre 2 boutons, bon numero et faux numero, lorsqu'il clique sur bon numero plusieurs operations se declenche :

    _ Un "V" se place sur la ligne de la personne appeler, remplissant le champ "Bon_numero" et colorant la ligne en vert.
    _ Une form2 remplace la form1, elle contient un ensemble de boutons qui permettent a l'utilisateur de mettre a jour la fiche de la personne appeler, au fur et a mesure de la conversation telephonique.

    De plus, la form1 propose de trier la DBGrid pour que n'apparaissent que les lignes des personnes dont le numero est "verts" (vrai) ou "rouges" (faux) afin de les traiter ulterieurement.


    Voila, j'avais reussi a tout faire tourner, SAUF que lorsque je passais a la seconde forme c'est la ligne 1 que updater et non la ligne selectionner


    J'avais 3 datasource, 2 ADOquery, 2 ADOTable... enfin, un code (tres) "sale".


    Comment puis je faire pour "nettoyer" ca, histoire que cela fonctionne en restant comprehensible ^^ ?

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    pour ce que tu veux faire et si tout ce passe sur une table.

    1 adoquery ou adoTable + 1 datasource suffiront.

    Sur la form1 :

    - Tu lies le DbGrid au datasource
    - Ton DbEdit ou DbLabel au DataSource
    - Tes boutons filtre la table avec la propriété Filter du composant

    Sur la Form2 :

    - Tu lies les composants DbEdit au Datasource.

    Après il te reste plus qu'à gérer les ajouts/mise à jours/suppressions directements avec le composant source(l'AdoQuery ou AdoTable)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Le truc c'est que pour faire des requetes je suis obliger de passer pas ADOquery, non ?
    Donc je ne mets qu'un ADOquery... il faut que je trouve aussi comme rafraichir, vu que j'utilisais ADOTable.close/open...



    Edit: J'ai teste ADOquery.refresh/requery... il me retourne une erreur "impossible d'effectuer cette operation sur un ensemble de donnees fermés". Un probleme de syntaxe ou d'operations a effectuer prealablement ?

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Est ce que tu travails avec 1 ou plusieurs tables ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Une seule table (Merise 2 c'est bien.... au debut), je vais avoir pas mal de champs, mais vu que je suis seul a y fouiller.... tant que l'interface reste claire ^^

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Soit tu fais un AdoQuery avec un requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from LaTable
    Et tu travails dessus ou tu utilises directement un composant TAdoTable.

    Pour ma part je serais plus pour un AdoQuery car plus simple pour faire des filtres et moins limités par rapport à l'AdoTable.

    Après, Tant que tu n'utilises qu'une table avec ton AdoQuery, tu peux faire des Append/Edit/Post/cancel comme si tu travaillais sur un AdoTable.

    Je te conseil de :

    1- Créer un DataModule
    2- Poser tes composants AdoConnection,AdoQuery et Datasource dans le DataModule
    3- Lier le Dataodule aux unités Form1 et Form2 (le mettre dans les uses des deux forms)

    Ca te permettra d'avoir un lieu commun pour la gestion des bases de données.

    4- Tu lies le DbGrid de la Form1 au datasource
    5- Tu lies les DbEdit de la Form2 au Datasource

    Après tu selectionnes une ligne dans le DbGrid de la Form1, puis tu affiche ta Form2 et tu verras que les données correspondent.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Va pour le datamodule alors, ca doit cela qui m'empechait d'avoir la bonne ligne dans la form2...

    Mais je fais comment pour rafraichir ma DBGrid apres avoir fait un update ?

    Sachant que ADOquery1.close/open et ADOquery1.refresh provoquent une erreur




    Merci pour ton aide ^^

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Chimere
    Va pour le datamodule alors, ca doit cela qui m'empechait d'avoir la bonne ligne dans la form2...

    Mais je fais comment pour rafraichir ma DBGrid apres avoir fait un update ?

    Sachant que ADOquery1.close/open et ADOquery1.refresh provoquent une erreur




    Merci pour ton aide ^^
    Attention, si tu utilises le même AdoQuery pour faire une requete Select et un update, c'est normal qu'après le update ton Close/open/Refresh plante vu que t'essai d'ouvrir une requete update

    Si tu fais comme expliquer plus haut, normalement, tu n'as pas besoin de faire de requete update et si tu modifies une valeur directement dans un DbEdit, ca se répercutera sur la table directement. il faudrat juste que tu valides/annules les modifications quand tu quittes la Form2.

    Exemple :

    Sur la Form1
    Sur la Form2 le bouton pour valider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With DataModule.AdoQuery do
      If State in [dsEdit,dsInsert] then
        Post;
    Sur la Form2 pur le bouton d'annulation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With DataModule.AdoQuery do
      If State in [dsEdit,dsInsert] then
        Cancel;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Je n'utilise pas de DBEdit pour updater, mais des boutons qui sont associes a des requetes dans ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.AfficheVClick(Sender: TObject);
    begin
    DataModule4.ADOquery1.SQL.Clear;
    DataModule4.ADOquery1.SQL.Add('UPDATE prospects') ;
    DataModule4.ADOquery1.SQL.Add('SET Bon_numero = "V"');
    DataModule4.ADOquery1.SQL.Add('WHERE  Adresse_Mail='+QuotedStr(DBEdit5.text));
    Form2.show;
     
    end;
    Donc forcement je suis obliger de faire des updates et des selects sur le meme ADOquery...


    PS: ...quand je clique sur AfficherV, la DBGrid se vide...

  17. #17
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Chimere
    Donc forcement je suis obliger de faire des updates et des selects sur le meme ADOquery...


    PS: ...quand je clique sur AfficherV, la DBGrid se vide...
    Depuis quand est on obligé d'utiliser le même AdoQuery pour faire des requete sur une table ? Qui t'as dit ça ?

    PS: C'est normal vu que tu fermes ton Adoquery et que tu vires la requete pour y mettre un Update.

    Suis Bien ce que je t'ai indiqué plus haut, avec cette solution tu n'as même plus besoin de faire d'update ou d'insert sur ta table, tous peut se faire en direct.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Tu me proposes de faire un "formulaire" avec un bouton "valider" ?
    Le probleme c'est que je ne veux pas de DBEdit, mais des boutons. Sinon oui, j'aurais mis plein de DBEdit et limite une barre navigator relier a la datasource.

    Donc je suis obliger de faire une requete sur chaque bouton, avec un update a chaque fois, non ? (je dis peut etre plein de betise, desolé )

  19. #19
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    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 TForm1.AfficheVClick(Sender: TObject);
    begin
    With Datamodule4.Adoquery1 do
    begin
      // Vérifie que le dataset n'est pas en mode insertion ou edition
      if not (State in [dsInsert,dsEdit]) then
       // Met en mode Edition
        Edit;
      // Assigne V aux champs 'Bon_numero' de l'enregistrement courant du dataset
      FieldByName('Bon_numero').asString := 'V';
      try
        // Valide la modification
        Post;
      Except on E:Exception do
        // en cas ou ca se passe mal , ca affiche un message d'erreur avec l'erreur  renvoyée
        Showmessage('Erreur lors de la validation : ' + E.MEssage);
      end;
    end;
    end;
    Pourquoi faire compliquer :p
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Malatar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Vérifie que le dataset n'est pas en mode insertion ou edition
    J'ignorais que le dataset restait en "mode" insertion.........


    Je vais tester ca, merci pour ton aide ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. insérer une ligne dans un dbgrid entre 2 enregistrements
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/09/2005, 09h15
  2. Comment donne une couleur a une ligne dans un DBGrid
    Par samy84s dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/09/2005, 23h22
  3. Comment faire pour modifier une ligne dans une DBGrid?
    Par Nico62 dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2005, 12h24
  4. Sélectionner une ligne dans une DBGrid
    Par RBIK dans le forum Bases de données
    Réponses: 13
    Dernier message: 01/07/2004, 17h13
  5. hauteur de ligne dans un DBGrid
    Par mustang-gx dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/03/2004, 20h27

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