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

Modélisation Discussion :

modification clé primaire


Sujet :

Modélisation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut modification clé primaire
    Bonjour à tous,

    je désire modifier une clé primaire dans une table qui n'était composée que d'un champ,
    maintenant je désire rajouter un deuxième champ...

    access ne veut pas le faire sans que je supprime la relation existante, mais mon problème c'est que j'ai aussi cette table qui est utilisée
    dans des requêtes avec jointure,

    comment peux-t'on faire pour modifier une relation sans ouvrir toute les requêtes, supprimer la relation, enregistrer
    (env 20 requêtes) et ensuite recréer ma nouvelle clef primaire et refaire toutes les jointures...c'est laborieux à faire.

    Merci et salutations à tous
    Pascal

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Voici une marche à suivre pour sauvegarder tes relations.

    Entre l'étape 2 et 3, opère la modif de ta table.

    ... et vérifie après l'étape 3 que tout est OK.

    Prends une copie de ta db avant de commencer, on ne sait jamais : le remède est parfois pire que le mal.




    Assigner la référence : Microsoft DAO 3.6 object library
    Il faut d'abord définir une table "Relations" avec les champs suivants :
    - Nom,Table1,Table2,ChampTable1,ChampTable2 (texte)
    - Attributs (Entier long)

    Procédure de sauvetage, suppression et restauration
    1er temps : Sauver les relations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub SauverRelations()
    Dim rel As DAO.relation
    DoCmd.SetWarnings False
    'purge de la table
    DoCmd.RunSQL ("DELETE Relations.Nom FROM Relations;")
    'alimentation de la table
    For Each rel In CurrentDb.Relations
       DoCmd.RunSQL ("INSERT INTO Relations ( Nom, Table1, Table2, ChampTable1, ChampTable2, Attributs )  SELECT """ & rel.Name & """ AS Expr1, """ & rel.Table & """ AS Expr2, """ & rel.ForeignTable & """ AS Expr3, """ & rel.Fields(0).Name & """ AS Expr4, """ & rel.Fields(0).ForeignName & """ AS Expr5, " & rel.Attributes & " AS Expr6;")
    Next rel
    DoCmd.SetWarnings True
    End Sub
    2e temps : Supprimer les relations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function SupprimerRelations()
    Dim rel As relation
    For Each rel In CurrentDb.Relations
       CurrentDb.Relations.Delete rel.Name
    Next rel
    End Function
    3e temps : Restaurer les relations
    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
    Public Sub RestaurerRelations()
    Dim rec As DAO.Recordset
    Dim rel As DAO.relation
    Dim chp As Field
    Set rec = CurrentDb.OpenRecordset("Relations")
    Do Until rec.EOF
      Set rel = CurrentDb.CreateRelation(rec("nom"), rec("table1"), rec("table2"))
      rel.Attributes = rec("Attributs")
      Set chp = rel.CreateField(rec("ChampTable1"))
      chp.ForeignName = rec("ChampTable2")
      rel.Fields.Append chp
      CurrentDb.Relations.Append rel
      rec.MoveNext
    Loop
    End Sub
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Claude

    j'ai appeler la function avec une sub public, je ne savais pas comment exécuter la function depuis vba, il ne me la proposait pas,
    apparement les étapes 1 et 2 se passe correctement.
    mais quand j'exécute la procédure 3, cela me vide la table "Relations" et ne me remets pas les relations...

    J'ai fait un essai en faisant les 3 procédures sans modifier la clef primaire (qui ne contient qu'un champ)dans la table que je désire modifier,cela fonctionne
    par contre dès que je modifie ma clef primaire (avec deux champs)

    cela ne fonctionne plus


    merci pour ton aide

    Pascal

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Récapitulons :

    - tu as copié les 3 sub dans un module

    - pour exécuter, tu ouvres la fenêtre d'exécution <CTRL+G> et tu saisis une à une les étapes et <ENTER>




    Je viens de retester, chez moi ça marche.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    si je les fais sans rien modifier cela fonctionne, mais c'est quand je modifie la clef primaire et que j'en fait une composée que cela ne va plus

    je vais encore faire de essais

    mais en tout cas merci pour ton aide précieuse
    je te redonne des news

    Pascal

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Pour ta modif de table, ajoute d'abord une nouvelle colonne avec les composantes de ta nouvelle clé et avec un nom différent de la colonne de l'ancienne clé.
    Avec une requête de modification, complète cette nouvelle colonne.
    Dans un premier temps, garde les 2 colonnes et vois ensuite ce que tu peux faire sans tout casser
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

Discussions similaires

  1. modification clé primaire
    Par chekkal dans le forum Débuter
    Réponses: 4
    Dernier message: 28/11/2013, 13h05
  2. Problème modification clé primaire/étrangère (En cascade)
    Par nico.mathiss dans le forum Hibernate
    Réponses: 0
    Dernier message: 01/06/2013, 12h52
  3. Modification clé primaire
    Par Ordonnateur dans le forum Oracle
    Réponses: 2
    Dernier message: 18/04/2012, 15h13
  4. [MySQL] modification clé primaire d'une table, qui est aussi clé etrangère
    Par Invité dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/11/2008, 08h49
  5. modification clé primaire
    Par Dalmito64 dans le forum Modélisation
    Réponses: 5
    Dernier message: 10/11/2007, 18h23

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