FAQ MS-Access

FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
Sommaire→Formulaires→Données→Modification et ajout de données- Comment interdire la manipulation d'enregistrements dans un formulaire dépendant ?
- Comment interdir les modifications des données d'un sous-formulaire ?
- Comment empêcher Access d'enregistrer de lui-même les modifications/ajouts d'enregistrements du formulaire ?
- Comment empêcher la mise à jour/l'ajout des données d'un formulaire dépendant ?
- Comment fait-on pour un avoir un message de confirmation avant sauvegarder un enregistrement modifié ?
- Comment supprimer l'enregistrement en cours dans un formulaire dépendant ?
- Sauvegarde de l'enregistrement en cours par le code, après modification/ajout d'un enregistrement.
- Comment mettre à jour des données calculées d'une table depuis un formulaire ?
Comment interdire les :
Modifications :
Me.AllowEdits = FalseAjouts :
Me.AllowAdditions = FalseSuppressions :
Me.AllowDeletions = FalseUne autre possibilité est définir la propriété du Recordset du formulaire à Instantané.
Me.sF_SousForm.Form.AllowEdits = FalseIl ne faut pas faire un formulaire lié.
Méthode
- Créer formulaire déconnecté
- Créer un Recordset
- Afficher les données du Recordset dans le formulaire
- Faire autant de boutons que d'actions dans votre formulaire (Validation, Suppression, Suivant, Précédent...). À chaque bouton correspond bien sûr une action (Requête de suppression, d'ajout...).
Pour qu'Access n'enregistre pas les modifications faites dans un formulaire, il faut utiliser l'événement BeforeUpdate et y placer la ligne suivante :
Cancel = TrueIl faut mettre le message de confirmation sur l'événement "BeforeUpdate" du formulaire :
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("Voulez-vous confirmer la modification", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
Me.undo
Cancel = true
End if
End SubVoici le code généré par Access à l'aide de l'assistant de création de bouton.
Private Sub btnSuppr_Click()
On Error GoTo Err_btnSuppr_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Exit_btnSuppr_Click:
Exit Sub
Err_btnSuppr_Click:
MsgBox Err.Description
Resume Exit_btnSuppr_Click
End SubVous devinerez donc que ce sont les lignes suivantes qui suppriment l'enregistrement :
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70Access n'enregistre les modifications ou les nouvelles données qu'après changement d'enregistrement.
Voici le code permettant d'obliger Access à sauvegarder les modifications portées à l'enregistrement actuel :
DoCmd.RunCommand acCmdSaveRecordPour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.
L'événement Form_Error (Sur erreur) est levé à chaque erreur du formulaire. C'est donc dans cet événement que va se dérouler le traitement de correction.
Étape 1 : vérifier l'erreur qui est levée. Celle qui nous concerne est 3022, risque de doublons. Étape 2 : on récupère le jeu de données du formulaire (puisque c'est ici que figure la quantité déjà validée). Étape 3 : on se positionne sur le bon enregistrement (en fonction de numCommande et NumProduit). Étape 4 : si l'enregistrement existe (normalement il existe sinon l'erreur n'aurait pas eu lieu, mais on n'est jamais assez prudent), dans ce cas on met à jour sa quantité. C'est à dire : quantité avant + nouvelle quantité. Étape 5 : on annule la saisie de l'utilisateur, on recharge le formulaire et enfin, on dit à VBA que l'erreur a été corrigée (acDataErrContinue).
Private Sub Form_Error(DataErr As Integer, Response As Integer)
Dim oRst As DAO.Recordset
If DataErr = 3022 Then
Set oRst = Me.RecordsetClone
With oRst
.FindFirst "NumProduit=" & Me.NumProduit & " AND NumCommande=" & Me.NumCommande
If Not .NoMatch Then
.Edit
.Fields("Qte").Value = .Fields("Qte") + Me.Qte
.Update
Me.Undo
Me.Requery
Response = acDataErrContinue
End If
End With
Set oRst = Nothing
End If
End Sub
Ici la structure de ma table était : NumCommande,NumProduit,Qte.
Les champs du formulaire étaient nommés pareil.
Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?



