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 :

Sql..Probléme..Delphi


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Sql..Probléme..Delphi
    Salut

    Voila j'ai deux tables la 1ere TABLE AUTEUR et la 2ème TABLE ECRIRE. j'ai deux clefs primaire dans AUTEUR qui sont NOM_AUTEUR et PRENOM_AUTEUR et dans la TABLE ECRIRE ce sont des clefs externe (NOM_AUTEUR et PRENOM_AUTEUR) ce que j'aimerai savoir faire c'est lorsque je modifie mes champs NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Auteur que celle ci change NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Ecrire également. J'ai deja un code pour modifier NOM_AUTEUR et PRENOM_AUTEUR dans la gestion Auteur elle fonctionne mais elle modifie pas les champs NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Ecrire.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    var
      OldType,OldType1,OldType2,OldType3 :string; // Déclaration de variable
      OldType4,OldType5 :string;
     
    procedure TGes_Auteur.Modifier_AuteurClick(Sender: TObject);
    begin
      if  (edit1.Text = '')or (edit2.Text = '')or (edit3.Text = '')or (edit4.Text='') then
          begin
             messagedlg('Veuillez sélectionner le champs à supprimer', mtWarning,[mbok],0);
          end
      else
          with DataModule2.IBQuery_Auteur do
            begin           // Ici on modifie les champs sélectionner
              SQL.Clear;
              SQL.Add('Update AUTEUR set NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur, PSEUDONYME=:Pseudonyme, NATIONALITE=:Nationalite');
              SQL.Add('WHERE NOM_AUTEUR = :OldType and PRENOM_AUTEUR = :OldType1 and PSEUDONYME = :OldType2 and NATIONALITE=:OldType3 ');
              DataModule2.IBQuery_Auteur.ParamByName('Nom_Auteur').AsString:=edit1.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType').AsString:=OldType;
              DataModule2.IBQuery_Auteur.ParamByName('Prenom_Auteur').AsString:=edit2.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType1').AsString:=OldType1;
              DataModule2.IBQuery_Auteur.ParamByName('Pseudonyme').AsString:=edit3.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType2').AsString:=OldType2;
              DataModule2.IBQuery_Auteur.ParamByName('Nationalite').AsString:=edit4.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType3').AsString:=OldType3;
              ExecSQL;
            end;
          with DataModule2.IBQuery_Ecrire do
            begin
              SQL.Add('Update ECRIRE set NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur');
              SQL.Add('WHERE NOM_AUTEUR = :OldType4 and PRENOM_AUTEUR = :OldType5 ');
              DataModule2.IBQuery_Ecrire.ParamByName('Nom_Auteur').AsString:=Ges_Auteur.edit1.text;
              DataModule2.IBQuery_Ecrire.ParamByName('OldType4').AsString:=OldType4;
              DataModule2.IBQuery_Ecrire.ParamByName('Prenom_Auteur').AsString:=Ges_Auteur.edit2.text;
              DataModule2.IBQuery_Ecrire.ParamByName('OldType5').AsString:=OldType5;
            end;
              Refresh_Auteur.Click; //Bouton qui rafraichi la table AUTEUR
              edit1.Text:='';
              edit2.text:='';
              edit3.Text:='';
              Ajouter_Auteur.Enabled:=true;
              Modifier_Auteur.Enabled :=false;
              Supprimer_Auteur.Enabled :=false;
              Ges_Ecrire.Refresh_Ecrire.click;
    end;
    P.S: La requête fonctionne mais elle modifie pas les champs NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Ecrire

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Salut,
    je pense que tu as oublié la ligne Execsql avant le "end" du
    "with DataModule2.IBQuery_Ecrire do"


    De plus avant de faire le update dans ta deuxième requête, tu peux rajouter un "sql.clear"

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 28
    Points
    28
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    procedure TGes_Auteur.Modifier_AuteurClick(Sender: TObject);
    begin
      if  (edit1.Text = '')or (edit2.Text = '')or (edit3.Text = '')or (edit4.Text='') then
          begin
             messagedlg('Veuillez sélectionner le champs à supprimer', mtWarning,[mbok],0);
          end
      else
          with DataModule2.IBQuery_Auteur do
            begin           // Ici on modifie les champs sélectionner
              SQL.Clear;
              SQL.Add('Update AUTEUR set NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur, PSEUDONYME=:Pseudonyme, NATIONALITE=:Nationalite');
              SQL.Add('WHERE NOM_AUTEUR = :OldType and PRENOM_AUTEUR = :OldType1 and PSEUDONYME = :OldType2 and NATIONALITE=:OldType3 ');
              DataModule2.IBQuery_Auteur.ParamByName('Nom_Auteur').AsString:=edit1.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType').AsString:=OldType;
              DataModule2.IBQuery_Auteur.ParamByName('Prenom_Auteur').AsString:=edit2.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType1').AsString:=OldType1;
              DataModule2.IBQuery_Auteur.ParamByName('Pseudonyme').AsString:=edit3.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType2').AsString:=OldType2;
              DataModule2.IBQuery_Auteur.ParamByName('Nationalite').AsString:=edit4.text;
              DataModule2.IBQuery_Auteur.ParamByName('OldType3').AsString:=OldType3;
              ExecSQL;
            end;
          with DataModule2.IBQuery_Ecrire do
            begin
              SQL.Clear;
              SQL.Add('Update ECRIRE set NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur');
              SQL.Add('WHERE NOM_AUTEUR = :OldType4 and PRENOM_AUTEUR = :OldType5 ');
              DataModule2.IBQuery_Ecrire.ParamByName('Nom_Auteur').AsString:=Ges_Auteur.edit1.text;
              DataModule2.IBQuery_Ecrire.ParamByName('OldType4').AsString:=OldType4;
              DataModule2.IBQuery_Ecrire.ParamByName('Prenom_Auteur').AsString:=Ges_Auteur.edit2.text;
              DataModule2.IBQuery_Ecrire.ParamByName('OldType5').AsString:=OldType5;
              ExecSQL;
            end;
              Refresh_Auteur.Click; //Bouton qui rafraichi la table AUTEUR
              edit1.Text:='';
              edit2.text:='';
              edit3.Text:='';
              Ajouter_Auteur.Enabled:=true;
              Modifier_Auteur.Enabled :=false;
              Supprimer_Auteur.Enabled :=false;
              Ges_Ecrire.Refresh_Ecrire.click;
    end;
    Comme ca oui c'est vrai j'avais oublié de changer mon code mais cela fonctionne toujours pas

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Re
    Personne à la réponse???

  5. #5
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Bon j'ai lu un peu en diagonale ...

    Si tu es certain que le problème se situe au niveau du SQL, pourrais tu poster uniquement la requête que tu souhaites exécuter (pas de code Delphi) ? L'exécution de cette requête directement dans ton SGBD (c'est quel SGBD au juste ?) avec des valeurs données aux paramètres fonctionne ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Cela fonctionne par interbase composant IBX. Delphi 6

  7. #7
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    C'est dans le script de création de la table, plus exactement de la clé externe dans ECRIRE qu'il faut spécifier ON UPDATE CASCADE.
    Roland

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Voici comment j'ai creé ma table AUTEUR sous interbase:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    /* Table: AUTEUR, Owner: SYSDBA */
     
    CREATE TABLE "AUTEUR" 
    (
      "NOM_AUTEUR"	VARCHAR(25) NOT NULL,
      "PRENOM_AUTEUR"	VARCHAR(25) NOT NULL,
      "PSEUDONYME"	VARCHAR(20),
      "NATIONALITE"	VARCHAR(20),
     PRIMARY KEY ("NOM_AUTEUR", "PRENOM_AUTEUR")
    );
    et ca c'est ma table ECRIRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* Table: ECRIRE, Owner: SYSDBA */
     
    CREATE TABLE "ECRIRE" 
    (
      "NOM_AUTEUR"	VARCHAR(25) NOT NULL,
      "PRENOM_AUTEUR"	VARCHAR(25) NOT NULL,
      "NUMERO_ISBN"	VARCHAR(20) NOT NULL,
     PRIMARY KEY ("NOM_AUTEUR", "PRENOM_AUTEUR", "NUMERO_ISBN")
    );
    Comment dois je l'éditer?

  9. #9
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Voici la réponse techniquement correcte à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE ECRIRE ADD CONSTRAINT FK_NomAuteur
    FOREIGN KEY (Nom_Auteur, Prenom_Auteur)
    REFERENCES AUTEUR (Nom_Auteur, Prenom_Auteur)
    ON UPDATE CASCADE ON  DELETE NO ACTION
    Maintenant, établir des clés externes sur des champs VARCHAR est rarement optimal, que ce soit au niveau performances, ou à cause des pb d'orthographe.
    il serait beaucoup plus judicieux d'ajouter à ta table AUTEUR un champ Id_Auteur entier, par ex. autoincrémenté, et d'utiliser cette Id pour référencer ton auteur dans ta table ECRIRE, en créant une clé externe sur Id_Auteur.
    Ensuite, si tu veux afficher les données de l'auteur d'un livre, tu fais une jointure sur AUTEUR. De cette manière, les modifications apportées à AUTEUR sont automatiquement prises en compte, sans même que les tables dépendantes aient à être mises à jour.
    Roland

Discussions similaires

  1. Problème de requète SQL dans Delphi
    Par julesclaude dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/08/2011, 18h02
  2. Problème performance SQL Server Delphi
    Par burkan dans le forum Bases de données
    Réponses: 15
    Dernier message: 20/08/2010, 01h41
  3. Problème performance SQL Server Delphi
    Par burkan dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/08/2010, 10h38
  4. Pbl sql et delphi
    Par rippoz dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/04/2004, 17h02
  5. probleme sql avec delphi
    Par lil_jam63 dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/02/2004, 04h32

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