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

VBA Access Discussion :

créer une relation en vba/sql [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut créer une relation en vba/sql
    Bonjour,

    je souhaite créer une relation avec intégrité référentielle entre deux tables dans ma base Access:
    entre le champ "Numéro Client" de la table "sheet1" et le champ "Numéro CL" de la table liée "dates_contact"

    Pour cela, j'utilise du code VBA et du SQL dans un module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub LierTable()
     
    Dim db As Database
    Set db = CurrentDb
     
    db.Execute "ALTER TABLE dates_contact ADD CONSTRAINT abc FOREIGN KEY (""Numéro CL"") REFERENCES sheet1 (""numéro client"");"
     
    db.Close
    Set db = Nothing
     
    End Sub
    Mais j'ai un message d'erreur au lancement du module
    "erreur d'exécution 3409" "Définition du champ "Numéro CL" non valide dans la définition de l'index ou de la relation.

    Pouvez-vous m'aider?

    Je précise que mes deux champs sont de type numérique entier long.
    "Numéro client" est indexé sans doublons
    "Numéro CL" est indexé avec doublons.

    Je vous remercie d'avance pour vos réponses.

  2. #2
    jojo5650
    Invité(e)
    Par défaut
    change le code ci après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.Execute "ALTER TABLE dates_contact ADD CONSTRAINT abc FOREIGN KEY (""Numéro CL"") REFERENCES sheet1 (""numéro client"");"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.Execute "ALTER TABLE dates_contact ADD CONSTRAINT abc FOREIGN KEY (""[Numéro CL]"") REFERENCES sheet1 (""[numéro client]"");"
    De primes abord, les espaces sont à proscrire, c'est littérature ou informatique

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    J'ai toujours le même message d'erreur avec les [...] cette fois.

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Je n'ai pas l'impression que toutes les conditions suivantes soient respectées :

    Extrait de l'aide d'Access
    Si vous n'arrivez pas à appliquer l'intégrité référentielle, retenez que les conditions suivantes sont obligatoires pour y aboutir :

    • Le champ commun de la table primaire doit être une clé primaire ou posséder un index unique.
    • Les champs communs ont le même type de données, à l'exception du champ NuméroAuto que vous pouvez lier à un champ numérique dont le paramétrage de la propriété TailleChamp est Entier long.
    • Les deux tables existent dans la même base de données Access. Vous ne pouvez pas appliquer l'intégrité référentielle sur des tables attachées.
      Cependant, si le format des tables source est Access, vous pouvez ouvrir la base de données, où ces tables sont stockées, et y appliquer l'intégrité référentielle.
    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    J'ai trouvé la solution les noms de champs doivent être entre parenthèses et crochets, mais pas guillemets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim db As ADODB.Connection
    Dim strsql As String
    Set db = CurrentProject.Connection
    strsql = "ALTER TABLE dates_contact ADD CONSTRAINT sheet1dates_contact FOREIGN KEY ([Numéro CL]) REFERENCES sheet1 ([numéro client]) ON UPDATE CASCADE;"
    db.Execute strsql
    End Sub
    De plus, pour activer la mise à jour en cascade des champs, j'utilise une connection ActiveX Data Objects (en DAO, ça ne marche pas) et rajoute ON UPDATECASCADE.

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

Discussions similaires

  1. Créer une relation entre une base SQL-SERVER et MySQL
    Par JacNar6 dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 19/09/2012, 14h09
  2. Créer une relation entre deux tables en liste de choix via SQL
    Par myrddin99 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 07/05/2012, 22h44
  3. Créer une vue avec du SQl dynamique
    Par gghonang2 dans le forum Oracle
    Réponses: 15
    Dernier message: 06/09/2006, 22h03
  4. [ACCESS] - créer une relation *.n / *.n
    Par guiguikawa dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2006, 10h08
  5. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 15h15

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