Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment interdire la manipulation d'enregistrements dans un formulaire dépendant ?
auteurs : Demco, Tofalu
Comment interdire les :

Modifications :
Me.AllowEdits = False 
Ajouts :
Me.AllowAdditions = False
Suppressions :
Me.AllowDeletions = False
Une autre possibilité est définir la propriété du Recordset du formulaire à Instantané.


Comment empêcher Access d'enregistrer de lui-même les modifications/ajouts d'enregistrements du formulaire ?
auteur : Team Access
Il 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, ...). A chaque bouton correspond bien sûr une action (Requête de suppression, d'ajout ...).

lien : Créer un jeu de données (recordset)

Comment empêcher la mise à jour/l'ajout des données d'un formulaire dépendant ?
auteur : Team Access
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 = True

Comment fait-on pour un avoir un message de confirmation avant sauvegarder un enregistrement modifié ?
auteur : BrunoM45
Il 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 Sub

Comment supprimer l'enregistrement en cours dans un formulaire dépendant ?
auteur : Demco
Voici 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 Sub
Vous devinerez donc que ce sont les lignes suivantes qui suppriment l'enregistrement :

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Sauvegarde de l'enregistrement en cours par le code, après modification/ajout d'un enregistrement.
auteur : Arkham46
Access 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 acCmdSaveRecord

Comment mettre à jour des données calculée d'une table depuis un formulaire ?
auteur : Tofalu
Pour 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.

Etape 1 : vérifier l'erreur qui est levée. Celle qui nous concerne est 3022, risque de doublons. Etape 2 : on récupère le jeu de données du formulaire (puisque c'est ici que figure la quantité déjà validée). Etape 3 : on se positionne sur le bon enregistrement (en fonction de numCommande et NumProduit). Etape 4 : si l'enregistrement existe (normalement il existe sinon l'erreur n'aurait pas eu lieu, mais on est jamais assez prudent), dans ce cas on met à jour sa quantité. C'est à dire : quantité avant + nouvelle quantité. Etape 5 : on annule la saisie de l'utilisateur, on recharge le formulaire et enfin, on dit à VBA que l'erreur a été corrigé (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 formulaires étaient nommés pareil.

lien : fr Définition et manipulation de données avec DAO par Tofalu
lien : faq Comment déclarer une référence dans MS-Access ?

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com