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

Requêtes et SQL. Discussion :

DROP TABLE et suppression des contraintes


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 262
    Points : 100
    Points
    100
    Par défaut DROP TABLE et suppression des contraintes
    Bonjour,

    J'ai besoin d'exécuter dans un programme des requêtes DROP TABLE.
    Mais l'une des tables a une relation avec une autre et à l'exécution du DROP TABLE, j'obtiens :
    Impossible de supprimer cet index ou cette table. Il s'agit de l'index en cours ou d'un index utilisé dans une relation
    J'ai bien essayé de supprimer la relation avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE T_DISCIPLINE DROP CONSTRAINT
    mais la syntaxe est incorrecte car il manque le nom de la relation.
    La relation a été créée à partir du menu Outils -> Relations. Je ne trouve nulle part de nom pour cette relation.

    Comment puis-je trouver ce nom ? Si ce n'est pas possible, comment forcer la suppression ?

    J'ai également essayé de supprimer le champ vers lequel pointait la relation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE MA_TABLE DROP COLUMN C1
    Mais j'obtiens l'erreur :
    Impossible de supprimer un champ qui fait partie d'un index ou est nécessaire au système.

    Avez-vous une idée pour me sortir de cette situation ?

    Merci d'avance.

  2. #2
    Expert éminent
    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
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    les relations se trouvent dans la table système MSysRelationships.
    Le nom de la table est dans la colonne szObject si elle a une clé extrangére ou dans szReferencedObject si une autre table a une clé étrangère dans la table.

    Voila un bout de code que j'ai essayé dans une copie de la base exemple COMPTOIRS.mdb
    Code vb : 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
    Sub TestDropContraints()
    Dim strTable As String
     
    strTable = "Produits"
    DropConstraints strTable
    'DoCmd.RunSQL "DROP TABLE [" & strTable & "]"
    End Sub
     
    Sub DropConstraints(strTable As String)
    Dim db As DAO.Database, rs As DAO.Recordset
    Dim strSQL As String, strDROP As String
     
    Set db = CurrentDb
    strSQL = "SELECT DISTINCT szObject, szReferencedObject, szRelationship" & _
    " FROM MSysRelationships" & _
    " WHERE (((szObject)='" & strTable & "')) OR (((szReferencedObject)='" & strTable & "'))"
     
    ' Selectionne les relations où le nom de la table apparaît
    Set rs = db.OpenRecordset(strSQL)
     
    Do While Not rs.EOF
       strDROP = ""
       ' Relation appartient à la table recherchée
       If rs("szObject") = strTable Then
          strDROP = "ALTER TABLE [" & strTable & "]"
       End If
       ' Relation appartient à une autre table mais fait référence à la table recherchée
       If rs("szReferencedObject") = strTable Then
          strDROP = "ALTER TABLE [" & rs("szObject") & "]"
       End If
       If strDROP <> "" Then
          strDROP = strDROP & " DROP CONSTRAINT [" & rs("szRelationship") & "]"
          DoCmd.RunSQL strDROP
       End If
       rs.MoveNext
    Loop
    End Sub
    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 262
    Points : 100
    Points
    100
    Par défaut
    Bonjour LedZeppII,

    C'est parfait, tu m'as donné tout ce dont j'avais besoin.
    Je ne connaissais pas les tables système dans access.

    Merci beaucoup !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour le code, ça m'a beaucoup aidé!!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/10/2014, 15h39
  2. Réponses: 3
    Dernier message: 17/10/2010, 18h10
  3. tables sys + stockage des contraintes
    Par XtofRoland dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/01/2006, 09h39
  4. Suppression des contraintes sous oracle
    Par delphyjp dans le forum Oracle
    Réponses: 5
    Dernier message: 18/01/2006, 12h12
  5. suppression des caratères spéciaux dans une table
    Par syl221 dans le forum Access
    Réponses: 6
    Dernier message: 31/08/2005, 09h20

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