Je débute avec access, j'ai créé des formulaires pour permettre
d'enregistrer des données dans des tables et j'aimerais pour chacun d'eux
créer un bouton "annuler" qui permettent de fermer le formulaire sans
enregistrer les modifications dans la table. Je n'ai pas trouvé cela ni dans
l'assistant du bouton ni dans les macros. Si je fais "fermer" sans
enregistrer ça enregistre quand même les modifications dans la table et dans
l'assistant des boutons il n'y a pas "fermer sans enregistrer".
Quelqu'un aurait-il une idée qui puisse m'éclairer.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Anor
Bonjour,
| Bonjour, | | Je débute avec access, j'ai créé des formulaires pour permettre | d'enregistrer des données dans des tables et j'aimerais pour chacun | d'eux créer un bouton "annuler" qui permettent de fermer le | formulaire sans enregistrer les modifications dans la table. Je n'ai | pas trouvé cela ni dans l'assistant du bouton ni dans les macros. Si | je fais "fermer" sans enregistrer ça enregistre quand même les | modifications dans la table et dans l'assistant des boutons il n'y a | pas "fermer sans enregistrer". | | Quelqu'un aurait-il une idée qui puisse m'éclairer. | | Merci | | Romain
Ce comportement est normal, quand on saisit dans un contrôle dont la source est un champ d'une requête lui même ayant pour source un champ d'une table, on saisit en fait directement la valeur dans le champ de l'enregistrement de la table.
Je procèderais donc ainsi :
Saisie dans une table tampon qui contient les mêmes champs que la table principale.
Gestion des événements : clic sur bouton valider clic sur bouton annuler msgbox à la fermeture du formulaire qui demande si on veut valider ou annuler la saisie
si valider => requête ajout table tampon > table principale puis requete suppression table tampon si annuler => requête suppression table tampon (currentdb.execute "delete * from tblTampon ;")
-- à+ Arnaud ------------------------------------------- Conseils d'utilisation, sites recommandés : http://users.skynet.be/mpfa/ petit à petit, www.anor.fr.st fait son nid -------------------------------------------
Bonjour,
| Bonjour,
|
| Je débute avec access, j'ai créé des formulaires pour permettre
| d'enregistrer des données dans des tables et j'aimerais pour chacun
| d'eux créer un bouton "annuler" qui permettent de fermer le
| formulaire sans enregistrer les modifications dans la table. Je n'ai
| pas trouvé cela ni dans l'assistant du bouton ni dans les macros. Si
| je fais "fermer" sans enregistrer ça enregistre quand même les
| modifications dans la table et dans l'assistant des boutons il n'y a
| pas "fermer sans enregistrer".
|
| Quelqu'un aurait-il une idée qui puisse m'éclairer.
|
| Merci
|
| Romain
Ce comportement est normal, quand on saisit dans un contrôle dont la source est un champ d'une
requête lui même ayant pour source un champ d'une table,
on saisit en fait directement la valeur dans le champ de l'enregistrement de la table.
Je procèderais donc ainsi :
Saisie dans une table tampon qui contient les mêmes champs que la table principale.
Gestion des événements :
clic sur bouton valider
clic sur bouton annuler
msgbox à la fermeture du formulaire qui demande si on veut valider ou annuler la saisie
si valider => requête ajout table tampon > table principale puis requete suppression table
tampon
si annuler => requête suppression table tampon (currentdb.execute "delete * from tblTampon ;")
--
à+
Arnaud
-------------------------------------------
Conseils d'utilisation, sites recommandés :
http://users.skynet.be/mpfa/
petit à petit, www.anor.fr.st fait son nid
-------------------------------------------
| Bonjour, | | Je débute avec access, j'ai créé des formulaires pour permettre | d'enregistrer des données dans des tables et j'aimerais pour chacun | d'eux créer un bouton "annuler" qui permettent de fermer le | formulaire sans enregistrer les modifications dans la table. Je n'ai | pas trouvé cela ni dans l'assistant du bouton ni dans les macros. Si | je fais "fermer" sans enregistrer ça enregistre quand même les | modifications dans la table et dans l'assistant des boutons il n'y a | pas "fermer sans enregistrer". | | Quelqu'un aurait-il une idée qui puisse m'éclairer. | | Merci | | Romain
Ce comportement est normal, quand on saisit dans un contrôle dont la source est un champ d'une requête lui même ayant pour source un champ d'une table, on saisit en fait directement la valeur dans le champ de l'enregistrement de la table.
Je procèderais donc ainsi :
Saisie dans une table tampon qui contient les mêmes champs que la table principale.
Gestion des événements : clic sur bouton valider clic sur bouton annuler msgbox à la fermeture du formulaire qui demande si on veut valider ou annuler la saisie
si valider => requête ajout table tampon > table principale puis requete suppression table tampon si annuler => requête suppression table tampon (currentdb.execute "delete * from tblTampon ;")
-- à+ Arnaud ------------------------------------------- Conseils d'utilisation, sites recommandés : http://users.skynet.be/mpfa/ petit à petit, www.anor.fr.st fait son nid -------------------------------------------
Rom1
Ce comportement est normal, quand on saisit dans un contrôle dont la source est un champ d'une requête lui même ayant pour source un champ d'une table, on saisit en fait directement la valeur dans le champ de l'enregistrement de la table.
Merci de ta réponse, mais je n'ai pas tout saisi.
Le truc c'est que la source du formulaire n'est pas une requête mais une table.
Saisie dans une table tampon qui contient les mêmes champs que la table principale.
Comment tu fais ça ? C'est quoi une table tampon ?
si valider => requête ajout table tampon > table principale puis requete suppression table tampon si annuler => requête suppression table tampon (currentdb.execute "delete * from tblTampon ;")
Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas grand chose ! ;o)
Merci encore,
Romain
Ce comportement est normal, quand on saisit dans un contrôle dont la
source est un champ d'une requête lui même ayant pour source un champ
d'une table,
on saisit en fait directement la valeur dans le champ de
l'enregistrement de la table.
Merci de ta réponse, mais je n'ai pas tout saisi.
Le truc c'est que la source du formulaire n'est pas une requête mais une
table.
Saisie dans une table tampon qui contient les mêmes champs que la
table principale.
Comment tu fais ça ? C'est quoi une table tampon ?
si valider => requête ajout table tampon > table principale puis
requete suppression table tampon
si annuler => requête suppression table tampon (currentdb.execute
"delete * from tblTampon ;")
Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas grand
chose ! ;o)
Ce comportement est normal, quand on saisit dans un contrôle dont la source est un champ d'une requête lui même ayant pour source un champ d'une table, on saisit en fait directement la valeur dans le champ de l'enregistrement de la table.
Merci de ta réponse, mais je n'ai pas tout saisi.
Le truc c'est que la source du formulaire n'est pas une requête mais une table.
Saisie dans une table tampon qui contient les mêmes champs que la table principale.
Comment tu fais ça ? C'est quoi une table tampon ?
si valider => requête ajout table tampon > table principale puis requete suppression table tampon si annuler => requête suppression table tampon (currentdb.execute "delete * from tblTampon ;")
Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas grand chose ! ;o)
Merci encore,
Romain
Anor
Bonjour,
| Merci de ta réponse, mais je n'ai pas tout saisi.
La seule chose à retenir, c'est que la valeur que tu inscris dans un contrôle d'un formulaire, tu l'inscrits en fait dans la table liée.
| Comment tu fais ça ? C'est quoi une table tampon ?
C'est un terme peut être impropre (table de transit est plus explicit ?) C'est une table qui a la même structure que la table actuelle (mêmes noms de champs) mais sans numéro auto qui ne servirait à rien.
|| si valider => requête ajout table tampon > table principale puis || requete suppression table tampon || si annuler => requête suppression table tampon (currentdb.execute || "delete * from tblTampon ;") | | Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas | grand chose ! ;o)
Une fois que tu as tes 2 tables LaTable et tblTampon , tu crées 2 requêtes avec l'assistant :
La requête suppression QryVideTblTampon qui donnera : DELETE * FROM tblTampon;
La requête ajout QryAjoutLaTable : Tu fais glisser tous les champs sauf le numéro auto dans l'éditeur graphique Puis menu "requête" > "ajouter une requête" (le terme n'est pas vraiment explicite en Access97) Tu choisis la table dans laquelle les données issues de cette requête seront ajoutées. Voila si tu interroges le code SQL de la requête ainsi générée, ça donnera un truc du genre :
INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong ) SELECT tblTampon.LeNombre, tblTampon.LeTexte, tblTampon.LaDate, tblTampon.LeTelephone, tblTampon.EntierLong FROM tblTampon;
Qu'on peut simplifier : INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong ) SELECT LeNombre, LeTexte, LaDate, LeTelephone, EntierLong FROM tblTampon;
Tu enregistres cette requête QryAjoutLaTable
Ensuite, depuis le formulaire, il ne te reste plus qu'à : 1 - prendre comme source la table tblTampon au lieu de LaTable 2 - mettre 2 boutons
Sur l'événement "sur clic" du bouton valider, tu cliques sur les 3 petits points Et entre les 2 lignes Private Sub BoutonValider_Click() --- End Sub tu incorpores les 2 lignes suivantes :
Entre les 2 lignes de l'événement clic du bouton "Annuler", tu mets
DoCmd.OpenQuery "QryVideTblTampon "
autre solution directement sans passer par la requête : Docmd.runsql "delete * from tblTampon ;"
Voilà. Il ne reste plus qu'à gérer en plus la fermeture du form pour demander à l'utilisateur ce qu'il souhaite faire des données qui se trouvent peut-être dans la table tampon :
Private Sub Form_Close() If DCount("*", "tbltampon") > 0 Then If msgbox("Voulez-vous Valider la saisie en cours ?", vbYesNo + vbInformation) = vbYes Then DoCmd.SetWarnings False DoCmd.OpenQuery "qryAjoutLaTable" DoCmd.RunSQL "delete * from tbltampon ;" DoCmd.SetWarnings True Else CurrentDb.Execute "delete * from tbltampon ;" End If End If End Sub
Voilà désolé, mais pour faire ce que tu souhaites, il va falloir te mettre à VBA. On peut bien sûr faire ça par macros, mais ce n'est pas beaucoup plus simple.
-- à+ Arnaud ------------------------------------------- Conseils d'utilisation, sites recommandés : http://users.skynet.be/mpfa/ petit à petit, www.anor.fr.st fait son nid -------------------------------------------
Bonjour,
| Merci de ta réponse, mais je n'ai pas tout saisi.
La seule chose à retenir, c'est que la valeur que tu inscris dans un contrôle
d'un formulaire, tu l'inscrits en fait dans la table liée.
| Comment tu fais ça ? C'est quoi une table tampon ?
C'est un terme peut être impropre (table de transit est plus explicit ?)
C'est une table qui a la même structure que la table actuelle
(mêmes noms de champs) mais sans numéro auto qui ne servirait à rien.
|| si valider => requête ajout table tampon > table principale puis
|| requete suppression table tampon
|| si annuler => requête suppression table tampon (currentdb.execute
|| "delete * from tblTampon ;")
|
| Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas
| grand chose ! ;o)
Une fois que tu as tes 2 tables LaTable et tblTampon , tu crées 2 requêtes avec l'assistant :
La requête suppression QryVideTblTampon qui donnera : DELETE * FROM tblTampon;
La requête ajout QryAjoutLaTable :
Tu fais glisser tous les champs sauf le numéro auto dans l'éditeur graphique
Puis menu "requête" > "ajouter une requête" (le terme n'est pas vraiment explicite en Access97)
Tu choisis la table dans laquelle les données issues de cette requête seront ajoutées.
Voila si tu interroges le code SQL de la requête ainsi générée, ça donnera un truc du genre :
INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong )
SELECT tblTampon.LeNombre, tblTampon.LeTexte, tblTampon.LaDate, tblTampon.LeTelephone,
tblTampon.EntierLong
FROM tblTampon;
Qu'on peut simplifier :
INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong )
SELECT LeNombre, LeTexte, LaDate, LeTelephone, EntierLong
FROM tblTampon;
Tu enregistres cette requête QryAjoutLaTable
Ensuite, depuis le formulaire, il ne te reste plus qu'à :
1 - prendre comme source la table tblTampon au lieu de LaTable
2 - mettre 2 boutons
Sur l'événement "sur clic" du bouton valider, tu cliques sur les 3 petits points
Et entre les 2 lignes
Private Sub BoutonValider_Click()
---
End Sub
tu incorpores les 2 lignes suivantes :
Entre les 2 lignes de l'événement clic du bouton "Annuler", tu mets
DoCmd.OpenQuery "QryVideTblTampon "
autre solution directement sans passer par la requête :
Docmd.runsql "delete * from tblTampon ;"
Voilà.
Il ne reste plus qu'à gérer en plus la fermeture du form pour demander à l'utilisateur ce qu'il
souhaite
faire des données qui se trouvent peut-être dans la table tampon :
Private Sub Form_Close()
If DCount("*", "tbltampon") > 0 Then
If msgbox("Voulez-vous Valider la saisie en cours ?", vbYesNo + vbInformation) = vbYes Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryAjoutLaTable"
DoCmd.RunSQL "delete * from tbltampon ;"
DoCmd.SetWarnings True
Else
CurrentDb.Execute "delete * from tbltampon ;"
End If
End If
End Sub
Voilà désolé, mais pour faire ce que tu souhaites, il va falloir te mettre à VBA.
On peut bien sûr faire ça par macros, mais ce n'est pas beaucoup plus simple.
--
à+
Arnaud
-------------------------------------------
Conseils d'utilisation, sites recommandés :
http://users.skynet.be/mpfa/
petit à petit, www.anor.fr.st fait son nid
-------------------------------------------
| Merci de ta réponse, mais je n'ai pas tout saisi.
La seule chose à retenir, c'est que la valeur que tu inscris dans un contrôle d'un formulaire, tu l'inscrits en fait dans la table liée.
| Comment tu fais ça ? C'est quoi une table tampon ?
C'est un terme peut être impropre (table de transit est plus explicit ?) C'est une table qui a la même structure que la table actuelle (mêmes noms de champs) mais sans numéro auto qui ne servirait à rien.
|| si valider => requête ajout table tampon > table principale puis || requete suppression table tampon || si annuler => requête suppression table tampon (currentdb.execute || "delete * from tblTampon ;") | | Tu fais ça avec du VBA ? Parce que si c'est le cas je n'y connais pas | grand chose ! ;o)
Une fois que tu as tes 2 tables LaTable et tblTampon , tu crées 2 requêtes avec l'assistant :
La requête suppression QryVideTblTampon qui donnera : DELETE * FROM tblTampon;
La requête ajout QryAjoutLaTable : Tu fais glisser tous les champs sauf le numéro auto dans l'éditeur graphique Puis menu "requête" > "ajouter une requête" (le terme n'est pas vraiment explicite en Access97) Tu choisis la table dans laquelle les données issues de cette requête seront ajoutées. Voila si tu interroges le code SQL de la requête ainsi générée, ça donnera un truc du genre :
INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong ) SELECT tblTampon.LeNombre, tblTampon.LeTexte, tblTampon.LaDate, tblTampon.LeTelephone, tblTampon.EntierLong FROM tblTampon;
Qu'on peut simplifier : INSERT INTO LaTable ( LeNombre, LeTexte, LaDate, LeTelephone, EntierLong ) SELECT LeNombre, LeTexte, LaDate, LeTelephone, EntierLong FROM tblTampon;
Tu enregistres cette requête QryAjoutLaTable
Ensuite, depuis le formulaire, il ne te reste plus qu'à : 1 - prendre comme source la table tblTampon au lieu de LaTable 2 - mettre 2 boutons
Sur l'événement "sur clic" du bouton valider, tu cliques sur les 3 petits points Et entre les 2 lignes Private Sub BoutonValider_Click() --- End Sub tu incorpores les 2 lignes suivantes :
Entre les 2 lignes de l'événement clic du bouton "Annuler", tu mets
DoCmd.OpenQuery "QryVideTblTampon "
autre solution directement sans passer par la requête : Docmd.runsql "delete * from tblTampon ;"
Voilà. Il ne reste plus qu'à gérer en plus la fermeture du form pour demander à l'utilisateur ce qu'il souhaite faire des données qui se trouvent peut-être dans la table tampon :
Private Sub Form_Close() If DCount("*", "tbltampon") > 0 Then If msgbox("Voulez-vous Valider la saisie en cours ?", vbYesNo + vbInformation) = vbYes Then DoCmd.SetWarnings False DoCmd.OpenQuery "qryAjoutLaTable" DoCmd.RunSQL "delete * from tbltampon ;" DoCmd.SetWarnings True Else CurrentDb.Execute "delete * from tbltampon ;" End If End If End Sub
Voilà désolé, mais pour faire ce que tu souhaites, il va falloir te mettre à VBA. On peut bien sûr faire ça par macros, mais ce n'est pas beaucoup plus simple.
-- à+ Arnaud ------------------------------------------- Conseils d'utilisation, sites recommandés : http://users.skynet.be/mpfa/ petit à petit, www.anor.fr.st fait son nid -------------------------------------------