Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 15h58   #1
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 57
Points : 18
Points : 18
Envoyer un message via MSN à caro2552 Envoyer un message via Skype™ à caro2552
Par défaut evenement delete et beforedelconfirm

Bonjour, j'ai un probleme qui me rend chevre
Soit 2 tables liees par IdRepertoire
1 tRepertoire qui recoit des noms de lieux generaux (ex gare de clermont)
2 tLieux (idLieu, IdRepertoire, lieux dependants)
A chaque nouvel enregistrement ds repertoire, un ajout par le code se fait dans tlieux avec le lieu dependant vide
Je peux par un form ajouter des lignes dans cette table. J'ai un enrgt :gare de clermont,""
et des enrgts : ex gare de clermont,bar ou gare de clermont,quai n°1.

C'est la table tLieux qui est fait source de choix

Il faut que lorsqu'il y a un changement ou une suppression de lieu dans la table tRepertoire il faut qu'il soit repercute dans la table tLieux

Je dois donc stopper la suppression de l'enregistrement , recuperer l'idRepertoire qui va etre supprime pour faire une recherche des enregistrement qui lui sont lies dans tLieux , envoyer un message box pour avertir du nombre d'enrgt ds tLieux qui seront supprimer et selon la reponse : annuler ou prendre en charge moi meme la suppression par une requete DELETE

Ce code stoppe la suppression ou du moins retablit l'enregistrement supprime
Code vb :
1
2
3
4
5
 
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Cancel = True
Response = acDataErrContinue
End Sub

Par cotre des que j'entre la suite,la suppression se fait sans me demander mon avis
Code vb :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Dim n As Integer
Dim reponse As Integer
Dim sqllieulie As String
Dim rstlieulie As DAO.Recordset
sqllieulie = "SELECT tLieu.idRepertoire, tRepertoire.IdRepertoire FROM tLieu LEFT JOIN tRepertoire ON tLieu.idRepertoire = tRepertoire.IdRepertoire WHERE tRepertoire.IdRepertoire=" & idRepertoire
Set rstlieulie = CurrentDb.OpenRecordset(sqllieulie)
rstlieulie.MoveLast
n = rstlieulie.RecordCount
reponse = MsgBoxPerso("Vous allez l'enregistrement actuel ainsi que " & n & " lieux dependant. Voulez vous continuez ?", "SUPPRESSION")
Dim sqllieusupp As String
sqllieusupp = "DELETE tLieu.idRepertoire, tLieu.IdLieu, tLieu.Lieu"
sqllieusupp = sqllieusupp & " FROM tLieu"
sqllieusupp = sqllieusupp & " WHERE (((tLieu.idRepertoire) In (SELECT tLieu.idRepertoire, tRepertoire.IdRepertoire FROM tLieu LEFT JOIN tRepertoire ON tLieu.idRepertoire = tRepertoire.IdRepertoire WHERE (tRepertoire.IdRepertoire) Is Null)))"
If reponse = -1 Then
CurrentDb.Execute (sqllieusupp)
Else: Exit Sub
End If

:X:X:S
Une petit ou meme une grande idee serait la bien venue...Merci d'avance pour votre temps
caro2552 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h01   #2
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
Bonjour Caro.

Je te donne une possible piste: Pourquoi pas implémenter l’intégrité référentielle dans tes relations de tables, avec la mise à jour et la suppression en cascade?

Regarde sur l'aide access de microsoft: http://office.microsoft.com/fr-ch/ac...010072597.aspx ou une recherche sur developpez.com
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h11   #3
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 57
Points : 18
Points : 18
Envoyer un message via MSN à caro2552 Envoyer un message via Skype™ à caro2552
oui, mais je veux pouvoir utiliser ma messbox pour surtout inserer le nombre d'enrgt lies concerne par la suppression (histoire d'insister sur les consequences de la suppression)
caro2552 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h30   #4
Nouveau Membre du Club
 
Homme Alf Cedano
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Homme Alf Cedano
Localisation : France, Cher (Centre)

Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 30
Points : 30
Il faut modifier ton msgbox comme suit:
Code :
reponse = MsgBox("Vous allez supprimer l'enregistrement actuel ainsi que " & n & " lieux dépendant(s). Voulez vous continuer ?", vbYesNo, "SUPPRESSION")

c'est à dire, inclure vbYesNo
plus loin tu pourrais évaluer la reponse, au lieu de -1 on va mettre vbYes, pour signifier que l'utilisateur a repondu "Oui" à la question du msgbox:

Code :
1
2
3
4
If reponse = vbYes Then
CurrentDb.Execute (sqllieusupp)
Else: Exit Function
End If
Moi, j'ai écrit MsgBox au lieu de MsgBoxPerso et ça marche bien. Je ne sais pas si tu as une fonction qui s'appelle MsgBoxPerso, en tout cas elle n'est pas nécessaire dans ce cas.
Bonne chance!
alfhcg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 17h58   #5
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 57
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 57
Points : 18
Points : 18
Envoyer un message via MSN à caro2552 Envoyer un message via Skype™ à caro2552
Bon, en fait cela fonctionne si toute la procedure de msgbox et de suppression se fait dans l'evenement afterdelconfirm

C'est un peu alambique mais ça marche.
Code vb :
1
2
3
4
5
 
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Cancel = True
Response = acDataErrContinue
End Sub

Code vb :
1
2
3
4
 
Private Sub Form_AfterDelConfirm(Status As Integer)
suppression
End Sub

Code vb :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
Sub suppression()
Dim n As Integer
Dim reponse As Integer
Dim sqllieulie As String
Dim rstlieulie As DAO.Recordset
sqllieulie = "SELECT tLieu.idRepertoire, tRepertoire.IdRepertoire FROM tLieu LEFT JOIN tRepertoire ON tLieu.idRepertoire = tRepertoire.IdRepertoire WHERE tRepertoire.IdRepertoire=" & idRepertoire
Set rstlieulie = CurrentDb.OpenRecordset(sqllieulie)
rstlieulie.MoveLast
n = rstlieulie.RecordCount
reponse = MsgBoxPerso("Vous allez l'enregistrement actuel ainsi que " & n & " lieux dependant. Voulez vous continuez ?", "SUPPRESSION")
If reponse = -1 Then
Dim sqllieusupp As String
sqllieusupp = "DELETE tLieu.idRepertoire, tLieu.IdLieu, tLieu.Lieu"
sqllieusupp = sqllieusupp & " FROM tLieu"
sqllieusupp = sqllieusupp & " WHERE (((tLieu.idRepertoire) In (SELECT tLieu.idRepertoire, tRepertoire.IdRepertoire FROM tLieu LEFT JOIN tRepertoire ON tLieu.idRepertoire = tRepertoire.IdRepertoire WHERE (tRepertoire.IdRepertoire) Is Null)))"
CurrentDb.Execute (sqllieusupp)
Else: Exit Sub
End If
End Sub


un grand merci pour avoir aiguiser ma canine
caro2552 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h38.


 
 
 
 
Partenaires

Hébergement Web