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 :

[VBA-A]impossible de supp car tables comprends enr. connexes


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut [Résolu][VBA-A]impossible de supp car tables comprends enr. connexes
    Bonjour tout le monde!
    Bah j'ai à peu près tout dit. En fait j'ai un formulaire et je ne peux pa supprimer des enregistrements car il y a l'intégrité référentielle. Et donc quand je veux supprimer un enregistrement, le message d'erreur apparaît (et c'est normal) mais j'aimerais savoir si au lieu d'avoir un message comme ça (accompagné d'un plantage en plus!) on pourrait pas informer l'utilisateur par un Msgbox lui informant que cet enregistrement est requis dans une autre table.
    Je vous remercie d'avances
    Bonne après midi

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    en fait quand je veux supprimer l'enregistrement dans ma table, il y a le message d'erreur "impossible de supprimer ou de modifier l'enregistrement car la table 'Assemblage' comprend des enregistrements connexes (erreur d'éxécution 3200" + plantage
    J'aimerais juste savoir si on peut juste afficher un message perso à la place

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Points : 45
    Points
    45
    Par défaut
    Salut,

    En effectuant un test de présence dans la table connexe, tu peux être en mesure de savoir s'il faut exécuter la requete de suppression ou emettre une message d'avertissement.

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ou gérer les erreurs !

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Daccord merci beaucoup!
    Mais comment effectuer un test de présence dans la table connexe (en ouvrant un autre RecordSet?)
    Merci

    J'ai regardé dans la FAQ et j'ai trouvé ça:

    select case err.number
    case 3200
    msgbox....

    Mais justement pour tester le numéro d'erreur d'Access, il faut que l'erreur se produise et donc je l'aurai toujours automatiquement avec un plantage? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Rs.Delete
              Select Case Error(errornumber)
                        Case 3200
                        MsgBox "erreur"
    Ici l'erreur se produit au Delete et me renvoie donc direct le message d'erreur d'Access...Quelqu'un pourrait m'expliquer?
    Merci

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Juste avant ton Rs.Delete
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Daccord, merci pour vos réponses mais je ne vois pas à quoi sert le résume next car il saute juste l'instruction et l'utilisateur ne sait donc pas si l'enregistrement a été effacé ou pas...(puisqu'il n'y a pas de 'GoTo')

    Voici le code de mon bouton 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub btnSupprimer_Click()
      If Rs.RecordCount <> 0 Then
        On Error GoTo Erreur
        Dim intReponse As Integer
        intReponse = MsgBox("Voulez-vous vraiment effacer l'enregistrement?", _
                 vbYesNo, "Suppression")
        ' Si l'utilisateur confirme la suppression
        If intReponse = vbYes Then
          Select Case Rs.AbsolutePosition + 1
            Case Is < Rs.RecordCount
              Rs.Delete
              Rs.MoveNext
              Call P_Liaison(Rs)
            Case Rs.RecordCount
              If Rs.RecordCount = 1 Then
                Rs.Delete
                compRef.Value = ""
                compNom.Value = ""
                compPrixAchatHT.Value = ""
                compPrixVenteHT.Value = ""
                categNum.Value = ""
                fourNum.Value = ""
                MsgBox "Il n'y a plus d'enregistrement dans cette table"
              Else
                Rs.Delete
                Rs.MovePrevious
                Call P_Liaison(Rs)
              End If
          End Select
          txtCourant.Value = Rs.AbsolutePosition + 1 & " sur " & Rs.RecordCount
        End If
    Erreur: MsgBox "Cet enregistrement ne peut pas être supprimé" & _
              vbNewLine & "car il est utilisé dans la table 'Assemblage'"
      Else
        MsgBox ("Il n'y a pas d'enregistrement à supprimer")
      End If
    End Sub
    J'ai mis GoTo au début mais le problème c'est que MÊME si l'enregistrement est supprimé il me met le message d'erreur que j'ai mis dans 'Erreur'

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Evidemment, si tu changes ton code en cours de route, on n'en sortira pas.

    Soit tu gères ton erreur dans la ligne qui suit ton Delete, soit tu mets ta gestion d'erreur à la fin de ton code.
    Mais pas un mix des 2!

    Je te propose:
    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
    Private Sub btnSupprimer_Click()
      Dim intReponse As Integer
      On Error GoTo Erreur
      If Rs.RecordCount <> 0 Then
        intReponse = MsgBox("Voulez-vous vraiment effacer l'enregistrement?", _
                 vbYesNo, "Suppression")
        ' Si l'utilisateur confirme la suppression
        If intReponse = vbYes Then
          Select Case Rs.AbsolutePosition + 1
            Case Is < Rs.RecordCount
              Rs.Delete
              Rs.MoveNext
              Call P_Liaison(Rs)
            Case Rs.RecordCount
              If Rs.RecordCount = 1 Then
                Rs.Delete
                compRef.Value = ""
                compNom.Value = ""
                compPrixAchatHT.Value = ""
                compPrixVenteHT.Value = ""
                categNum.Value = ""
                fourNum.Value = ""
                MsgBox "Il n'y a plus d'enregistrement dans cette table"
              Else
                Rs.Delete
                Rs.MovePrevious
                Call P_Liaison(Rs)
              End If
          End Select
          txtCourant.Value = Rs.AbsolutePosition + 1 & " sur " & Rs.RecordCount
        End If
      Else
        MsgBox ("Il n'y a pas d'enregistrement à supprimer")
      End If
      Exit Sub ' <-- IMPORTANT
    Erreur: MsgBox "Cet enregistrement ne peut pas être supprimé" & _
              vbNewLine & "car il est utilisé dans la table 'Assemblage'"
    End Sub
    Ou alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    On Error Resume Next
    Rs.Delete
    Select Case Error(errornumber)
      Case 3200
        MsgBox "erreur"
    Err.Clear
    On Error GoTo 0
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup ça marche très bien! J'ai pris la première solution car elle me parait plus simple. Encore merci et bonne soirée

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

Discussions similaires

  1. Impossible de renommer une table dans FireBird
    Par WebPac dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/05/2006, 12h12
  2. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01
  3. erreur Impossible de tronquer la table
    Par cyberia dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/02/2005, 20h59
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Impossible de manipuler une table.
    Par ma2th dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 22/08/2004, 21h02

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