OVH Cloud OVH Cloud

Empêcher l'enregistrement

3 réponses
Avatar
Jacques
Bonjour,

Pas habitué avec VBA Access, j'ai un formulaire lié à une table(deux champs
texte : Type et Description). Le premier champ est indexé (sans doublon) ce
qui m'empêche d'entrer deux fois le même nombre. Je dois vérifier ,avant
d'enregistrer, si la description n'existe pas déjà.
Je fais une recherche dans la table, sur la description mais comment faire
pour empêcher la mise à jour de la table si je trouve une même description
??

Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
With rs
.MoveLast
.FindFirst strRech
If .NoMatch Then
MsgBox "Pas trouvé"
Else
MsgBox "La description existe déjà" 'COMMENT empêcher le update
??
End If
End With


Merci de vos réponses

3 réponses

Avatar
argyronet
Bonjour,

Comme ceci par exemple:
Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
Dim RS As Recordset
Dim varCurrentValue As Variant
Dim SQL As String

On Error GoTo Erreur
varCurrentValue = Me!DE_PCM.Text
SQL = "SELECT ChampDEPCM FROM LaTable WHERE ChampDEPCM = " & Chr(34) &
varCurrentValue & Chr(34)
Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
If RS.EOF = False Then
MsgBox "La description existe déjà ! ", 48
Cancel = True
End If
RS.Close
Sortie:
Set RS = Nothing
Exit Sub
Erreur:
Resume Sortie
End Sub

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,

Pas habitué avec VBA Access, j'ai un formulaire lié à une table(deux champs
texte : Type et Description). Le premier champ est indexé (sans doublon) ce
qui m'empêche d'entrer deux fois le même nombre. Je dois vérifier ,avant
d'enregistrer, si la description n'existe pas déjà.
Je fais une recherche dans la table, sur la description mais comment faire
pour empêcher la mise à jour de la table si je trouve une même description
??

Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
With rs
.MoveLast
.FindFirst strRech
If .NoMatch Then
MsgBox "Pas trouvé"
Else
MsgBox "La description existe déjà" 'COMMENT empêcher le update
??
End If
End With


Merci de vos réponses





Avatar
Jacques
Merci pour votre réponse.

J'ai continué à chercher et j'ai trouvé ceci :
Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)

If (Not IsNull(DLookup("[DE_PCM]", _
"HLW03T10_PCM", "[DE_PCM] ='" _
& Me!DE_PCM & "'"))) Then
MsgBox "Cette description existe déjà."
Cancel = True
Me!DE_PCM.Undo
End If
End Sub

Je ne sais pas quelle est la meilleur façon de faire :-(
Un avis sera le bienvenu.

Jacques


"argyronet" a écrit dans le message de
news:
Bonjour,

Comme ceci par exemple:
Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
Dim RS As Recordset
Dim varCurrentValue As Variant
Dim SQL As String

On Error GoTo Erreur
varCurrentValue = Me!DE_PCM.Text
SQL = "SELECT ChampDEPCM FROM LaTable WHERE ChampDEPCM = " & Chr(34) &
varCurrentValue & Chr(34)
Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
If RS.EOF = False Then
MsgBox "La description existe déjà ! ", 48
Cancel = True
End If
RS.Close
Sortie:
Set RS = Nothing
Exit Sub
Erreur:
Resume Sortie
End Sub

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on
obtient.

Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,

Pas habitué avec VBA Access, j'ai un formulaire lié à une table(deux
champs


texte : Type et Description). Le premier champ est indexé (sans doublon)
ce


qui m'empêche d'entrer deux fois le même nombre. Je dois vérifier ,avant
d'enregistrer, si la description n'existe pas déjà.
Je fais une recherche dans la table, sur la description mais comment
faire


pour empêcher la mise à jour de la table si je trouve une même
description


??

Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
With rs
.MoveLast
.FindFirst strRech
If .NoMatch Then
MsgBox "Pas trouvé"
Else
MsgBox "La description existe déjà" 'COMMENT empêcher le
update


??
End If
End With


Merci de vos réponses







Avatar
argyronet
Re,

Evitez les fonctions de recherche comme les DLookup et autres...
Bien que dans votre cas, la notion de consommation de ressources sera
transparente, ces fonctions sont très gourmandes en cas de sollicitations
multiples.
Le principal étant pour votre cas précis, d'affecter True à Cancel, il vaut
mieux comme je vous l'ai proposé, passer par DAO.

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Merci pour votre réponse.

J'ai continué à chercher et j'ai trouvé ceci :
Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)

If (Not IsNull(DLookup("[DE_PCM]", _
"HLW03T10_PCM", "[DE_PCM] ='" _
& Me!DE_PCM & "'"))) Then
MsgBox "Cette description existe déjà."
Cancel = True
Me!DE_PCM.Undo
End If
End Sub

Je ne sais pas quelle est la meilleur façon de faire :-(
Un avis sera le bienvenu.

Jacques


"argyronet" a écrit dans le message de
news:
Bonjour,

Comme ceci par exemple:
Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
Dim RS As Recordset
Dim varCurrentValue As Variant
Dim SQL As String

On Error GoTo Erreur
varCurrentValue = Me!DE_PCM.Text
SQL = "SELECT ChampDEPCM FROM LaTable WHERE ChampDEPCM = " & Chr(34) &
varCurrentValue & Chr(34)
Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
If RS.EOF = False Then
MsgBox "La description existe déjà ! ", 48
Cancel = True
End If
RS.Close
Sortie:
Set RS = Nothing
Exit Sub
Erreur:
Resume Sortie
End Sub

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on
obtient.

Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonjour,

Pas habitué avec VBA Access, j'ai un formulaire lié à une table(deux
champs


texte : Type et Description). Le premier champ est indexé (sans doublon)
ce


qui m'empêche d'entrer deux fois le même nombre. Je dois vérifier ,avant
d'enregistrer, si la description n'existe pas déjà.
Je fais une recherche dans la table, sur la description mais comment
faire


pour empêcher la mise à jour de la table si je trouve une même
description


??

Private Sub DE_PCM_BeforeUpdate(Cancel As Integer)
With rs
.MoveLast
.FindFirst strRech
If .NoMatch Then
MsgBox "Pas trouvé"
Else
MsgBox "La description existe déjà" 'COMMENT empêcher le
update


??
End If
End With


Merci de vos réponses