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 :

Mettre a jour l'index FK.. lors d'un enregistrement


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Mettre a jour l'index FK.. lors d'un enregistrement
    Bonjour,

    J'ai créé une procédure stockée sur une table pour ajouter un enregistrement dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      //== Procédure stockée pour ecrire un Opérateur
      req:= 'CREATE PROC procOperatorAddItem(OperNo COUNTER,OperName VARCHAR(32), '+
      'UserNo INTEGER, OperPass INTEGER, OPerRights INTEGER )'+
      'AS INSERT INTO OPERATOR (OPERATOR_NO, OPERATOR_NAME, OPERATOR_USER_NO, '+
      'OPERATOR_PASS, OPERATOR_RIGHTS ) '+
      'Values (OperNo, OperName,UserNo,OperPass,OperRights);';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
    Je souhaite l'utiliser avec le code suivant :
    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
    procedure TScreenForm.CreateOperator( const OperName: String;
                                        const UserNo,OperPass,OPerRights: Integer);
    var
      k,OperNo: integer;
      Params: TCollection;
    begin
      OperNo:= Succ(CountFromTable('OPERATOR'));
      ADOStoredProc1.ConnectionString:= Format(_ConnString,[_UserName,_PassWord,MDBFile]);
      ADOStoredProc1.ProcedureName:= 'procOperatorAddItem';
      ADOStoredProc1.Parameters.Clear;
      for k:=0 to 4 do
      begin
        ADOStoredProc1.Parameters.AddParameter;
        ADOStoredProc1.Parameters[k].DataType:= ftString;
        ADOStoredProc1.Parameters[k].Direction:= pdInput;
        case k of
          0: begin
            ADOStoredProc1.Parameters[k].Name:= 'OperNo';
            ADOStoredProc1.Parameters[k].Value:= OperNo;
          end;
          1: begin
            ADOStoredProc1.Parameters[k].Name:= 'OperName';
            ADOStoredProc1.Parameters[k].Value:= OperName;
          end;
          2: begin
            ADOStoredProc1.Parameters[k].Name:= 'UserNo';
            ADOStoredProc1.Parameters[k].Value:= UserNo;
          end;
          3: begin
            ADOStoredProc1.Parameters[k].Name:= 'OperPass';
            ADOStoredProc1.Parameters[k].Value:= OperPass;
          end;
          4: begin
            ADOStoredProc1.Parameters[k].Name:= 'OperRights';
            ADOStoredProc1.Parameters[k].Value:= OperRights;
          end;
        end;
      end;
      ADOStoredProc1.ExecProc;
    Tout fonctionne jusqu'à ExecProc et j'obtiens le message "EoleException Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table DBUSER"

    Comment procéder à la mise à jour de la relation correspondante à l'index FK_...

    Merci d'avoir pris le temps de lire et de comprendre la question

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    il ne s'agit pas d'un "probleme" dans la mise a jour des cles etrangeres, mais comme indique dans le message d'erreur

    Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table DBUSER"
    Il manque la reference a la cle etrangere dans la table principale "DBUSER"

    en d'autres termes, vous essayez d'enregistrer dans la table "operateur" une ligne dont une des colonnes fait reference dans la table DBUSER a quelqu'un qui n'existe pas !
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Eh bien j'ai pu quand même !
    Bonjour,

    Après recherche sur le Net j'ai trouvé ! Il suffit lors de la déclaration de la clé secondaire d'ajouter "ON UPDATE CASCADE ON DELETE CASCADE". Je l'ai fait et l'addition d'un enregistrement fonctionne sans problème.

    Voici le code de création de la table avec la modification sur la déclaration de la clé secondaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      //*************** table Operator
      req:= 'CREATE TABLE OPERATOR (' +
      ' OPERATOR_NO COUNTER, ' +
      ' PRIMARY KEY (OPERATOR_NO), '+
      ' OPERATOR_USER_NO INTEGER NOT NULL, ' +
      ' CONSTRAINT FK_Operator2User FOREIGN KEY (OPERATOR_USER_NO) '+
      ' REFERENCES DBUSER(USER_NO) ON UPDATE CASCADE ON DELETE CASCADE, '+
      ' OPERATOR_NAME VARCHAR(32) NOT NULL, ' +
      ' OPERATOR_PASS INTEGER NOT NULL, ' +
      ' OPERATOR_RIGHTS INTEGER NOT NULL, ' +
      ' OPERATOR_USED BIT DEFAULT -1 '+
      ')';
      ADOCommand1.CommandText := req;
      ADOCommand1.Execute;
    Merci tout de même d'avoir pris le temps de lire, de comprendre, et de répondre à ma question.

    Je coche résolu

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

Discussions similaires

  1. [OpenOffice][Texte] mettre à jour l'index des tableaux
    Par Invité dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 05/10/2009, 13h32
  2. Mettre à un jour une donnée lors d'un clic
    Par alexbts dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 21/04/2009, 23h21
  3. Mise à jour des index lors d'un delete
    Par justine2401 dans le forum MySQL
    Réponses: 2
    Dernier message: 28/10/2008, 15h43
  4. [Conception] Mettre a jour tout les champs d'un table lors d'un update
    Par metatron dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/09/2006, 15h29
  5. Réponses: 2
    Dernier message: 31/08/2006, 09h56

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