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 :

[D7]dbnavigator, dbgrid, et les vues


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut [D7]dbnavigator, dbgrid, et les vues
    bonjour,

    je sais comment gérer un dbnavgitaor avec un dbgrid ayant une table.
    Du coup, je me poses la question suivante : si à la place d'une table j'utilise une vue, est-ce que mes insertions et update se feront ?

    Si ce n'est pas le cas, j'ai du mal à comprendre comment faire fonctionner le dbnavigator avec une requête sur mon dbgrid ...

    merci pour vos lumières.

  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
    Ca depend du SGBD, du fait que ta vue/requete soit multitable ou non, des droits sur la vue, etc ....

    Pour ce que est de faire fonctionner DbGrid + DbNavigator + Requete, il n'y a aucun problème mais faut respecter au moins une contrainte :
    Tu ne peux travailler qu'avec une requete mono-table
    Modérateur Delphi

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

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par Malatar
    Tu ne peux travailler qu'avec une requete mono-table
    C'est pas vrai du tout, tout dépend du dataset que on utilise derrière. Par exemple, on peut faire une requête avec plusieurs joins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select 
      a.camp1, a.champ2, b.champ1, c.champ1
    from
      table1 a
      left outer join table2 b on b.champunion = a.champunion
      left outer join table3 c on c.champunion = b.champunion
    et on puet trabaillé avec un TQuery + TUpdateSQL ou un TIBDataSet ou un TClientDataSet + TDataSetProvider + Dataset,..... et pouvoir actualisé la table. C'est vrai que on pourra seulement actualisé 1 table, mais la requête SELECT peut avoir plusieurs tables

    C'est vrai aussi que pour pouvoir actualisé une vue dépendra du SGBD

    A+

  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
    Citation Envoyé par cadetill
    C'est vrai que on pourra seulement actualisé 1 table, mais la requête SELECT peut avoir plusieurs tables
    Donc ca sert à rien du tout et donc que DbGrid + DbNavigator + Requete ne peux se faire qu'avec une requete Mono-Table.
    Modérateur Delphi

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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par Malatar
    Donc ca sert à rien du tout et donc que DbGrid + DbNavigator + Requete ne peux se faire qu'avec une requete Mono-Table.
    Si je fais une requete avec 2 tables. La deuxième ne me sert qu'a un aspect graphique alors is good !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE piece
    (id_piece autoinc primary key,
    lib_piece varchar(30),
    id_matiere integer,
    CONSTRAINT fk_matiere FOREIGN KEY id_matiere REFERENCES matiere(id_matiere) )
     
    CREATE TABLE matiere
    (id_matiere autoinc primary key,
    lib_matiere varchar(30))
    donc si je veux faire quelque chose de sympa sur une dbgrid pour afficher la table piece je dois faire une jointure pour avoir le libellé des matières. Certes je ne modifies pas la table matière mais je m'en moques.

    a ++

    PS : SGBD : NexusDB 2.05

  6. #6
    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 Genestoux
    Merci pour vos réponses.


    Si je fais une requete avec 2 tables. La deuxième ne me sert qu'a un aspect graphique alors is good !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE piece
    (id_piece autoinc primary key,
    lib_piece varchar(30),
    id_matiere integer,
    CONSTRAINT fk_matiere FOREIGN KEY id_matiere REFERENCES matiere(id_matiere) )
     
    CREATE TABLE matiere
    (id_matiere autoinc primary key,
    lib_matiere varchar(30))
    donc si je veux faire quelque chose de sympa sur une dbgrid pour afficher la table piece je dois faire une jointure pour avoir le libellé des matières. Certes je ne modifies pas la table matière mais je m'en moques.

    a ++

    PS : SGBD : NexusDB 2.05

    Pas obligé de faire une jointure

    1- Tu crées une requete qui récupère l'ensemble des données de ta table "Matiere" (LaTableMatiere dans l'exemple)
    2- Tu renseignes le OnDrawColumCell de ton dbGrid de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    With Sender as TDbGrid do
      if Column.FieldName = 'id_matiere' then
      begin
        if LaTableMatiere.Locate('Id_matiere',Column.Field.asInteger,[]) then
          Canvas.TextOut(Rect.Left+2,Rect.Top+2,LaTableMatiere.FieldByName('lib_matiere').AsString);
      end;
    end;
    Modérateur Delphi

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

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Citation Envoyé par Malatar
    1- Tu crées une requete qui récupère l'ensemble des données de ta table "Matiere" (LaTableMatiere dans l'exemple)
    2- Tu renseignes le OnDrawColumCell de ton dbGrid de la manière suivante :
    [...]
    Pour faire ça, jo crois que c'est mieux utiliser les champs Calculated ou Lookup. Néanmoins, une seule requête ferait mois de trafique dans la réseau (s'il a un bonne where )

    A+

  8. #8
    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 cadetill
    Salut



    Pour faire ça, jo crois que c'est mieux utiliser les champs Calculated ou Lookup. Néanmoins, une seule requête ferait mois de trafique dans la réseau (s'il a un bonne where )

    A+
    Le champ calculé oblige à figer le dbgrid si je ne m'abuse ?
    Modérateur Delphi

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

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par Malatar
    Le champ calculé oblige à figer le dbgrid si je ne m'abuse ?
    Buff!! Je ne me rappele pas, peut être, el fait beaucoup de temps que je n'utilise pas des champs calcules (je fait des requêtes avec joins seulement)

    A+

  10. #10
    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 cadetill
    Buff!! Je ne me rappele pas, peut être, el fait beaucoup de temps que je n'utilise pas des champs calcules (je fait des requêtes avec joins seulement)

    A+
    Je n'ai jamais utilisé les champs calculés, je passe moi aussi uniquement par des requetes en tout genre.
    J'ai fouillé un peu le forum en quête de renseignement sur ces champs calculés et je trouve que c'est super lourd à mettre en place sur ce que j'ai pu appercevoir
    Modérateur Delphi

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

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci pour les infos

    Par contre, Pardon Malatar mais je ne suis pas sur de bien suivre vu que je n'arrive pas à faire fonctionner la procédure ....

    La procédure permet de redesciner la colonne 'id_matiere' avec les infos récupérer dans la table 'matiere' ?

    bon j'instancie 'LaTableMatiere' dans le create, jusque là je dois être bon (sinon j'ai de gros soucis ^^).

    Par contre j'ai un doute sur le remplissage du dbGrid ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Initialisation de la requête
    requetePiece.Active := False;
    requetePiece.SQL.Clear;
    // Création de la requête
     requetePiece.SQL.Add('SELECT id_piece, ref_piece, lib_piece, id_Matiere, commentaire_piece FROM piece');
     
    // Lancement de la requête
    requetePiece.open;
    // Remplissage de la grille de données
    gdPiece.Columns.Items[0].Field := dsPiece.DataSet.FieldByName('id_piece');
    gdPiece.Columns.Items[1].Field := dsPiece.DataSet.FieldByName('ref_piece');
    gdPiece.Columns.Items[2].Field := dsPiece.DataSet.FieldByName('lib_piece');
    gdPiece.Columns.Items[3].Field := dsPiece.DataSet.FieldByName('commentaire_piece');
    gdPiece.Columns.Items[4].Field := dsPiece.DataSet.FieldByName('id_Matiere');
    alors docteur ? .....

  12. #12
    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 la dbgrid normalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gdPiece.datasource := dsPiece;
    devrait suffir si tu n'as pas défini de champs par défaut dans le dbgrid.
    Modérateur Delphi

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

  13. #13
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    bon j'ai trouvé mon problème.

    primo les champs sont case sensitif apparement ....
    deuxio j'avais oublié d'activer la table ....

    j'ai quelques détails à corriger sur la présentation mais j'ai compris le fonctionnement.

    merci

  14. #14
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    re,

    je perd la tête à chercher comment enlever dans la colonne 'id_matiere' la valeur de l'identifiant ..... les valeurs entourées ...


    merci.

  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
    Rajoute ce que j'ai mis en rouge dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    With Sender as TDbGrid do
      if Column.FieldName = 'id_matiere' then
      begin
        if LaTableMatiere.Locate('Id_matiere',Column.Field.asInteger,[]) then
          Canvas.TextOut(Rect.Left+2,Rect.Top+2,LaTableMatiere.FieldByName('lib_matiere').AsString);
      end
      else
        TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    Et passe la propriété DefaultDrawing à false
    Modérateur Delphi

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

  16. #16
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci,

    pfff faut encore du boulot pour que je réfléchisse dans le bon ordre ... toujours commencer par l'aide puis les propriétés de l'inspecteur .... le code en dernier recours ....

    encore merci.

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

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  3. [DB2] Question sur les index et les vues
    Par ahoyeau dans le forum DB2
    Réponses: 1
    Dernier message: 14/03/2005, 08h30
  4. Lien entre les vues 'Structure' et l'éditeur
    Par Tifauv' dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/05/2004, 16h06
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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