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 :

Problème de table d'association dans un DBGrid


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Problème de table d'association dans un DBGrid
    Bonjour,

    J'ai un petit problème concernant le listing d'une table d'association dans un DBGrid.

    Si j'utilise un Query est un DataSource j'arrive parfaitement a afficher toutes les données dont j'ai besoin.

    Le problème et quand utilisant une Query, si j'utilise un enregistrement et que je fais .Delete il efface des données dans ma table d'asso et hélas aussi dans les table contenant mes liste...

    Y a-t-il un moyen pour ne pas toucher aux tables de liste et uniquement supprimer l'enregistrement dans ma table d'association?

    Je vous remercie d'avance pour votre aide.

    Bonne journée.

    Edit : Désolé, j'ai oublié de vous donnez des informations capitales : J'utilise delphi 7.0, et j'utilise le composant TAdoQuery.

  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
    Peux tu nous donner la requete que tu utilises pour récupérer la liste de ta table assos ?
    Modérateur Delphi

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

  3. #3
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Désolé pour cette oubli....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Donnees.Query.SQL.Clear;
      Donnees.Query.SQL.Add('SELECT H.*, S.* FROM horaires_examens AS H LEFT JOIN sections AS S ON H.fk_section = S.pk_section ORDER BY S.nom ASC;');
      Donnees.Query.Open;

  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
    Déjà qu'un delete passe sur une jointure c'est hallucinant car c'est normalement impossible.

    Et ton problème est donc normal si le composants fonctionne comme je le pense, quand tu fais ton delete dans ta requete avec jointure, il te supprime l'integralité des données communes avec l'enregistrement de la table horaires_examens et les autres de la table sections

    Normalement il n'est possible de travailler sur des requetes avec les delete/append/etc... que sur des requetes mono-table.
    Donc je te conseil de faire une requete delete et de rafraichir après ta requete de base.
    Modérateur Delphi

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

  5. #5
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    C'est ce que je pensé aussi, mais je suis venu sur le forum pour voir si une personne n'avais pas une astuce autre.

    Mais avec ta réponse, je ne pense pas qu'il y ait une meilleure solution...

    Si jamais je trouve une alternative, je la posterai.

    Grand merci pour ta rapidité !

  6. #6
    Membre à l'essai

    Inscrit en
    Mai 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Voici un exemple de solution d'après les informations reçue par Malatar, j'epsère que celà aidera des membres du forum.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    {===============================================================================
      Actualisation de l'affichage contenu dans la liste des données.
    ===============================================================================}
    Procedure ActualisationDbGrid;
    Begin
      Donnees.Query.Close;
      Donnees.Query.SQL.Clear;
      Donnees.Query.SQL.Add('SELECT H.*, S.* FROM horaires_examens AS H LEFT JOIN sections AS S ON H.fk_section = S.pk_section ORDER BY S.nom ASC;');
      Donnees.Query.Open;
    End;
    {===============================================================================
      Suppression d'un horaire dans la liste.
    ===============================================================================}
    Procedure TFrmHoraires.BtnSupprimerClick(Sender: TObject);
      Var
        FkSection : String[15];
    Begin
      // Si il y a des données dans les horaires
      If Donnees.Query.RecordCount <> 0 Then
        Begin
          If MessageDlg('Etes-vous certain de vouloir supprimer l''horaire : ' +
              Donnees.Query.FieldValues['nom'] + ' ?', mtConfirmation, [MbYes,MbNo], 0) = MrYes Then
            Begin
              // On sauvegarde l'identifiant avant de fermer le query
              FkSection := Donnees.Query.FieldValues['fk_section'];
              // On supprime la sélection
              Donnees.Query.Close;
              Donnees.Query.SQL.Clear;
              Donnees.Query.SQL.Add('DELETE FROM horaires_examens WHERE fk_section = ''' + FkSection + ''';');
              // On execute la requête sans demande de résultat.
              Donnees.Query.ExecSQL;
              // On actualise l'affichage de la liste des données
              ActualisationDbGrid;
            End;
        End;
    End;

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/07/2012, 15h55
  2. Réponses: 17
    Dernier message: 15/10/2011, 01h30
  3. [Lazarus] Problème en insérant une ligne dans un dbGrid
    Par tintinux dans le forum Lazarus
    Réponses: 0
    Dernier message: 03/03/2011, 16h24
  4. Problème de coloration de cellules dans un DBGrid
    Par amaurylerouxdelens dans le forum Delphi
    Réponses: 7
    Dernier message: 08/11/2006, 13h47
  5. [MySQL] Problème d'insertion de données dans table d'associations
    Par Yukhaa dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 07/02/2006, 17h10

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