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

Access Discussion :

Comment Supprimer en VBA le champ clé primaire d'une table ?


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Comment Supprimer en VBA le champ clé primaire d'une table ?
    Bonjour,

    Voilà, je sais comment trouver en VBA le/les champ(s) clé primaire d'une table, mais je ne sait pas comment le/les supprimer :
    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
    Dim bds As Database, dft As TableDef, chp As Field
    Dim idx As Index
     
        ' base de données en cours.
        Set bds = CurrentDb
     
        ' Retourne un objet Tabledef pointant sur une table.
        Set dft = bds.TableDefs("Z_TMP_table")
     
        ' Parcourt la collection Indexes de l'objet TableDef.
        For Each idx In dft.Indexes
     
            ' Vérifie la propriété Primary de l'index de l'objet Recordset.
            If idx.Primary Then
                 For Each chp In idx.Fields
                     Debug.Print chp.Name   'clef primaire trouvé
                Next chp
            End If
        Next idx
     
        Set bds = Nothing
    Pourriez vous me tuyauter ?
    D'avance merci

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER MATABLE DROP COLUMN MACOLONNE
    :

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Salut,
    A la lumière de ce que tu m'as proposé, j'ai essayé les instructions suivantes mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        strSQL = "ALTER Z_TMP_table.* DROP PRIMARY KEY;"
        DoCmd.RunSQL strSQL
     
        strSQL = "ALTER Z_TMP_table DROP PRIMARY KEY;"
        DoCmd.RunSQL strSQL
    Je dois oublier Kekchose ou bien, mal m'y prendre...

  4. #4
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Dans ton code tu trouve le nom du champ grace à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print chp.Name   'clef primaire trouvé
    A partir de ce nom, il faut que tu construise une requête basée sur ce nom de champ, en suivant le modèle de Frank :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER MATABLE DROP COLUMN MACOLONNE
    MACOLONNE ici en locurence est ce que renvoie chp.Name.

    Cette Q/R t'aidera:
    http://access.developpez.com/faq/?pa...riteres#txtQry
    Le principe étant le même pour les variables et les contrôles de formulaire.
    J'aime les gâteaux.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Salut,
    Attention les copains, je ne veux pas Supprimer (DROP COLUMN MACOLONNE) la colonne de ma table Temporaire hein, je veux juste supprimer les clés de cette table Temporaire
    Celle-ci a d'ailleur été créée via l'instruction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DoCmd.CopyObject , "Z_TMP_table", acTable, "PERSONNE"
    (peut être n'est ce pas la bonne méthode ?)
    Et puis, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug.Print "==> "; chp.Name    '''clef primaire trouvé
    strSQL = "ALTER TABLE Z_TMP_table DROP COLUMN " & chp.Name & ";"
    DoCmd.RunSQL strSQL
    j'ai l'erreur suivante:
    Erreur d'exécution '3280':
    Impossible de supprimer un champ qui fait partie d'un index ou est nécessaire au système.


    Mais peut-être que mon problème est mal posé:
    En fait, ce que je voudrais à la base, c'est avoir une copie d'une de mes tables, mais sans les contraintes de clé que j'ai dans ma table source

  6. #6
    Membre actif Avatar de ActionAccess
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 213
    Points
    213
    Par défaut
    Bonjour,

    Ci-dessous, ton bout de code aménagé pour supprimer toutes les clés primaires d'une table.

    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
    Private Sub SupprimerLesIndex_Click()
    Dim bds As Database, dft As TableDef, chp As Field
    Dim idx As Index
        ' base de données en cours.
        Set bds = CurrentDb
     
        ' Retourne un objet Tabledef pointant sur une table.
        Set dft = bds.TableDefs("NomDelaTable")
     
        ' Parcourt la collection Indexes de l'objet TableDef.
        For Each idx In dft.Indexes
     
            ' Vérifie la propriété Primary de l'index de l'objet Recordset.
            If idx.Primary = True Then
                dft.Indexes.Delete idx.Name
            End If
        Next idx
        Set bds = Nothing
     
    End Sub
    J'espère que cette fois-ci cela répond à ta question.

    Bon courage
    ActionAccess

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    YESSSSSSSS
    Puré, exactement ce que je voulais !
    Quand je vois la solution, je me dit "Que je suis C.. !" j'aurai dût le trouver tout seul
    En tous K, encore mille merci
    @+

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

Discussions similaires

  1. Comment utiliser en VBA le champ paramétré d'une requête ?
    Par fredpeca dans le forum Requêtes et SQL.
    Réponses: 26
    Dernier message: 23/01/2007, 15h40
  2. comment supprimer une clé primaire d'une table ?
    Par polianita dans le forum Access
    Réponses: 10
    Dernier message: 03/08/2006, 15h34
  3. Réponses: 2
    Dernier message: 24/04/2006, 11h27
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  5. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 08h29

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