J'utilise un formulaire pour ajouter ou supprimer des enregistrements dans
une table.
Je choisi l'enregitrement à supprimer dans une zone de liste : "Keyword".
et je supprime cet enregistrement avec un Bouton de commande dont le code
associé est le suivant:
Les enregistrements sont dans la table "Keyword Contact" et comprennent 4
champs: Réf Keyword Contact (auto num), RéfContact et Keyword (pour 1 réf
contact donné je ne veux pas avoir de doublons sur le champ Keyword)
Seul le champ Ref keyword Contact est indexé sans doublon.
Set dbs = CurrentDb
Set rst = dbs![Keyword Contact].OpenRecordset(dbOpenTable)
rst.MoveFirst
Do
If ((rst.Fields("Keyword").Value = Me.Keyword.Column(0)) And _
(rst.Fields("RéfContact").Value = Me.RéfContact)) Then
rst.Delete
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
rst.Close
Exit Sub
End If
rst.MoveNext
Loop Until rst.EOF = True
rst.Close
le problème c'est que je n'ai plus la main sur mon formulaire ou j'ai des
message du style "modifications
non effectuée risques de doublons ...
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
Damran
"Alain Teyssedre" a écrit dans le message de news:
Bonjour
J'utilise un formulaire pour ajouter ou supprimer des enregistrements dans une table. Je choisi l'enregitrement à supprimer dans une zone de liste : "Keyword". et je supprime cet enregistrement avec un Bouton de commande dont le code associé est le suivant: Les enregistrements sont dans la table "Keyword Contact" et comprennent 4 champs: Réf Keyword Contact (auto num), RéfContact et Keyword (pour 1 réf contact donné je ne veux pas avoir de doublons sur le champ Keyword) Seul le champ Ref keyword Contact est indexé sans doublon.
Set dbs = CurrentDb Set rst = dbs![Keyword Contact].OpenRecordset(dbOpenTable) rst.MoveFirst Do
If ((rst.Fields("Keyword").Value = Me.Keyword.Column(0)) And _ (rst.Fields("RéfContact").Value = Me.RéfContact)) Then rst.Delete DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
rst.Close Exit Sub End If rst.MoveNext Loop Until rst.EOF = True rst.Close
le problème c'est que je n'ai plus la main sur mon formulaire ou j'ai des message du style "modifications non effectuée risques de doublons ... Bonjour
Je voit pas trop l'interet d'ouvrir un recordset et de le parcourrir entièrement. Si tu a beaucoup d'enregistrement, ça risque de devenir très long. Le mieux serait d'éxecuter un requete de suppression : Docmd.SetWarning False 'Pour éviter d'avoir les messages "Voulez-vous supprimer x enregistrement" DoCmd.RunSQL "Delete From MaTableWhere Keyword = '" & Me.Keyword.Column(0) & "' AND RéfContact = '" & Me.RéfContact & "'" DoCmd.SetWarnig True 'Quand on enlève quelques chose, on le remet ensuite à ca place ;-)
Si le formulaire ne voit pas les mises à jours : Me.Requery ou Me.Refresh selon besoin (si tu a besoin ou non de rester positionné par exemple).
En ce qui concerne les doublons, c'est que ton formulaire avait des mise à jour en attente qui n'ont pas été traité. Donc avant tout ça tu peut ajouter DoCmd.Save
Voilà
Damran
"Alain Teyssedre" <alain.teyssedre@libertysurf.fr> a écrit dans le message
de news:OEovoyDhDHA.880@TK2MSFTNGP12.phx.gbl...
Bonjour
J'utilise un formulaire pour ajouter ou supprimer des enregistrements dans
une table.
Je choisi l'enregitrement à supprimer dans une zone de liste : "Keyword".
et je supprime cet enregistrement avec un Bouton de commande dont le code
associé est le suivant:
Les enregistrements sont dans la table "Keyword Contact" et comprennent 4
champs: Réf Keyword Contact (auto num), RéfContact et Keyword (pour 1 réf
contact donné je ne veux pas avoir de doublons sur le champ Keyword)
Seul le champ Ref keyword Contact est indexé sans doublon.
Set dbs = CurrentDb
Set rst = dbs![Keyword Contact].OpenRecordset(dbOpenTable)
rst.MoveFirst
Do
If ((rst.Fields("Keyword").Value = Me.Keyword.Column(0)) And _
(rst.Fields("RéfContact").Value = Me.RéfContact)) Then
rst.Delete
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, ,
acMenuVer70
rst.Close
Exit Sub
End If
rst.MoveNext
Loop Until rst.EOF = True
rst.Close
le problème c'est que je n'ai plus la main sur mon formulaire ou j'ai des
message du style "modifications
non effectuée risques de doublons ...
Bonjour
Je voit pas trop l'interet d'ouvrir un recordset et de le parcourrir
entièrement. Si tu a beaucoup d'enregistrement, ça risque de devenir très
long.
Le mieux serait d'éxecuter un requete de suppression :
Docmd.SetWarning False 'Pour éviter d'avoir les messages "Voulez-vous
supprimer x enregistrement"
DoCmd.RunSQL "Delete From MaTableWhere Keyword = '" & Me.Keyword.Column(0) &
"' AND RéfContact = '" & Me.RéfContact & "'"
DoCmd.SetWarnig True 'Quand on enlève quelques chose, on le remet ensuite à
ca place ;-)
Si le formulaire ne voit pas les mises à jours :
Me.Requery ou Me.Refresh selon besoin (si tu a besoin ou non de rester
positionné par exemple).
En ce qui concerne les doublons, c'est que ton formulaire avait des mise à
jour en attente qui n'ont pas été traité.
Donc avant tout ça tu peut ajouter
DoCmd.Save
"Alain Teyssedre" a écrit dans le message de news:
Bonjour
J'utilise un formulaire pour ajouter ou supprimer des enregistrements dans une table. Je choisi l'enregitrement à supprimer dans une zone de liste : "Keyword". et je supprime cet enregistrement avec un Bouton de commande dont le code associé est le suivant: Les enregistrements sont dans la table "Keyword Contact" et comprennent 4 champs: Réf Keyword Contact (auto num), RéfContact et Keyword (pour 1 réf contact donné je ne veux pas avoir de doublons sur le champ Keyword) Seul le champ Ref keyword Contact est indexé sans doublon.
Set dbs = CurrentDb Set rst = dbs![Keyword Contact].OpenRecordset(dbOpenTable) rst.MoveFirst Do
If ((rst.Fields("Keyword").Value = Me.Keyword.Column(0)) And _ (rst.Fields("RéfContact").Value = Me.RéfContact)) Then rst.Delete DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
rst.Close Exit Sub End If rst.MoveNext Loop Until rst.EOF = True rst.Close
le problème c'est que je n'ai plus la main sur mon formulaire ou j'ai des message du style "modifications non effectuée risques de doublons ... Bonjour
Je voit pas trop l'interet d'ouvrir un recordset et de le parcourrir entièrement. Si tu a beaucoup d'enregistrement, ça risque de devenir très long. Le mieux serait d'éxecuter un requete de suppression : Docmd.SetWarning False 'Pour éviter d'avoir les messages "Voulez-vous supprimer x enregistrement" DoCmd.RunSQL "Delete From MaTableWhere Keyword = '" & Me.Keyword.Column(0) & "' AND RéfContact = '" & Me.RéfContact & "'" DoCmd.SetWarnig True 'Quand on enlève quelques chose, on le remet ensuite à ca place ;-)
Si le formulaire ne voit pas les mises à jours : Me.Requery ou Me.Refresh selon besoin (si tu a besoin ou non de rester positionné par exemple).
En ce qui concerne les doublons, c'est que ton formulaire avait des mise à jour en attente qui n'ont pas été traité. Donc avant tout ça tu peut ajouter DoCmd.Save
Voilà
Damran
Damran
"Alain Teyssedre" a écrit dans le message de news:12e1901c38449$3dc0a420$
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta réponse les explications qui me permettent de mieux comprendre les commandes VBA. C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete qui ne passe pas : erreur 3464 : types de données imcompatibles dans l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE ((Keyword = '" & Me.Keyword.Column(0) & _ "') AND (RéfContact = '" & Me.RéfContact & "'))" Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des integer, alors il ne faut pas entourer de simple quote.
Damran
"Alain Teyssedre" <alain.teyssedre@libertysurf.fr> a écrit dans le message
de news:12e1901c38449$3dc0a420$a601280a@phx.gbl...
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta
réponse les explications qui me permettent de mieux
comprendre les commandes VBA.
C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete
qui ne passe pas :
erreur 3464 : types de données imcompatibles dans
l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE
((Keyword = '" & Me.Keyword.Column(0) & _
"') AND (RéfContact = '" & Me.RéfContact & "'))"
Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des
integer, alors il ne faut pas entourer de simple quote.
"Alain Teyssedre" a écrit dans le message de news:12e1901c38449$3dc0a420$
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta réponse les explications qui me permettent de mieux comprendre les commandes VBA. C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete qui ne passe pas : erreur 3464 : types de données imcompatibles dans l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE ((Keyword = '" & Me.Keyword.Column(0) & _ "') AND (RéfContact = '" & Me.RéfContact & "'))" Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des integer, alors il ne faut pas entourer de simple quote.
Damran
Alain Teyssedre
Bonjour Damran
Effectivement le champ RéfContact étant de type numérique il fallait en tenir compte dans la requete ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute la commande supprimer, c'est le 1er keyword de ma liste qui est supprimé ! Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai un message d'erreur :" erreur 3167 - l'enregistrement est supprimé" et si je resélectionne un keyword la j'ai carrément toute mon appli Access qui se ferme !!!
mon formulaire Keyword Contact comprend: - une zone de liste pour afficher tous les Keywords affectés à un contact (qui est sélectionné dans le formulaire Contacts) - 3 Boutons de commande "Ajouter", "Modifier", "Supprimer". - Une zone de texte "Expr1" qui affiche le nom complet du contact en cours de sélection.
Le formulaire Keyword Contact s'ouvre à partir du formulaire Contact (qui affiche les contacts) les 2 formulaires étant liés par
La requete source du formulaire keyword est : SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact AS Expr2, [Contacts].[Salutation] & " " & [Prénom] & " " & [Nom] & " " & [Titre] AS Expr1, Contacts.RéfContact FROM Contacts LEFT JOIN [Keyword Contact] ON Contacts.RéfContact = [Keyword Contact].RéfContact;
La requete source de ma zone de liste Keyword est : SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact FROM [Keyword Contact] WHERE ((([Keyword Contact].RéfContact)=[Contacts].[RéfContact])); (avec colonne liée 1)
Voila j'espère avoir été clair si tu as des questions n'hesites pas
@+ Alain
"Damran" a écrit dans le message de news:3f77fb18$0$2809$
"Alain Teyssedre" a écrit dans le message de news:12e1901c38449$3dc0a420$
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta réponse les explications qui me permettent de mieux comprendre les commandes VBA. C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete qui ne passe pas : erreur 3464 : types de données imcompatibles dans l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE ((Keyword = '" & Me.Keyword.Column(0) & _ "') AND (RéfContact = '" & Me.RéfContact & "'))" Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des integer, alors il ne faut pas entourer de simple quote.
Damran
Bonjour Damran
Effectivement le champ RéfContact étant de type numérique il fallait en
tenir compte dans la requete
ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à
résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute
la commande supprimer,
c'est le 1er keyword de ma liste qui est supprimé !
Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai
un message d'erreur :" erreur 3167 -
l'enregistrement est supprimé" et si je resélectionne un keyword la j'ai
carrément toute mon appli Access qui se ferme !!!
mon formulaire Keyword Contact comprend:
- une zone de liste pour afficher tous les Keywords affectés à un
contact (qui est sélectionné dans le formulaire Contacts)
- 3 Boutons de commande "Ajouter", "Modifier", "Supprimer".
- Une zone de texte "Expr1" qui affiche le nom complet du contact en
cours de sélection.
Le formulaire Keyword Contact s'ouvre à partir du formulaire Contact (qui
affiche les contacts) les 2 formulaires
étant liés par
La requete source du formulaire keyword est :
SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact AS Expr2,
[Contacts].[Salutation] & " " & [Prénom] & " " & [Nom] & " " & [Titre]
AS Expr1, Contacts.RéfContact
FROM Contacts LEFT JOIN [Keyword Contact] ON Contacts.RéfContact = [Keyword
Contact].RéfContact;
La requete source de ma zone de liste Keyword est :
SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact
FROM [Keyword Contact]
WHERE ((([Keyword Contact].RéfContact)=[Contacts].[RéfContact]));
(avec colonne liée 1)
Voila j'espère avoir été clair si tu as des questions n'hesites pas
@+
Alain
"Damran" <armands@NOSPAMfree.fr> a écrit dans le message de
news:3f77fb18$0$2809$626a54ce@news.free.fr...
"Alain Teyssedre" <alain.teyssedre@libertysurf.fr> a écrit dans le message
de news:12e1901c38449$3dc0a420$a601280a@phx.gbl...
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta
réponse les explications qui me permettent de mieux
comprendre les commandes VBA.
C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete
qui ne passe pas :
erreur 3464 : types de données imcompatibles dans
l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE
((Keyword = '" & Me.Keyword.Column(0) & _
"') AND (RéfContact = '" & Me.RéfContact & "'))"
Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des
integer, alors il ne faut pas entourer de simple quote.
Effectivement le champ RéfContact étant de type numérique il fallait en tenir compte dans la requete ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute la commande supprimer, c'est le 1er keyword de ma liste qui est supprimé ! Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai un message d'erreur :" erreur 3167 - l'enregistrement est supprimé" et si je resélectionne un keyword la j'ai carrément toute mon appli Access qui se ferme !!!
mon formulaire Keyword Contact comprend: - une zone de liste pour afficher tous les Keywords affectés à un contact (qui est sélectionné dans le formulaire Contacts) - 3 Boutons de commande "Ajouter", "Modifier", "Supprimer". - Une zone de texte "Expr1" qui affiche le nom complet du contact en cours de sélection.
Le formulaire Keyword Contact s'ouvre à partir du formulaire Contact (qui affiche les contacts) les 2 formulaires étant liés par
La requete source du formulaire keyword est : SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact AS Expr2, [Contacts].[Salutation] & " " & [Prénom] & " " & [Nom] & " " & [Titre] AS Expr1, Contacts.RéfContact FROM Contacts LEFT JOIN [Keyword Contact] ON Contacts.RéfContact = [Keyword Contact].RéfContact;
La requete source de ma zone de liste Keyword est : SELECT [Keyword Contact].Keyword, [Keyword Contact].RéfContact FROM [Keyword Contact] WHERE ((([Keyword Contact].RéfContact)=[Contacts].[RéfContact])); (avec colonne liée 1)
Voila j'espère avoir été clair si tu as des questions n'hesites pas
@+ Alain
"Damran" a écrit dans le message de news:3f77fb18$0$2809$
"Alain Teyssedre" a écrit dans le message de news:12e1901c38449$3dc0a420$
Bonjour DAMRAN
Un grand merci car j'ai particulièremet apprécié dans ta réponse les explications qui me permettent de mieux comprendre les commandes VBA. C'est pour mieux faire avancer le shmilblik ;-)
Je n'ai plus qu'a résoudre le pb de syntaxe dans ma requete qui ne passe pas : erreur 3464 : types de données imcompatibles dans l'expression du critère.
sur la commande:
DoCmd.RunSQL "DELETE FROM [Keyword Contact] WHERE ((Keyword = '" & Me.Keyword.Column(0) & _ "') AND (RéfContact = '" & Me.RéfContact & "'))" Ta chaine semble correct.
Vérifie si RéfContact et Keyword sont bien de type string. Si ce sont des integer, alors il ne faut pas entourer de simple quote.
Damran
Damran
"Alain Teyssedre" a écrit dans le message de news:
Bonjour Damran
Effectivement le champ RéfContact étant de type numérique il fallait en tenir compte dans la requete ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute la commande supprimer, c'est le 1er keyword de ma liste qui est supprimé ! Ca c'est bizzare. Vérifie bien l'index de la colonne pour ta liste
(keyword.Column(0)). Elle doit bien représenter l'élement à supprimer, c'est a dir le champs que utilise pour ta suppression. Si ta liste n'a qu'une colonne, ou si la colonne lié est bien le champs qui te sert de suppression, alors utilise : Me.Keyword.Value
Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai un message d'erreur :" erreur 3167 - l'enregistrement est supprimé" Normal, tu l'a supprimé mais ton controle ne l'a pas vue :
Me.Keyword.Refresh ou Me.Keyword.Requery
et si je resélectionne un keyword la j'ai carrément toute mon appli Access qui se ferme !!! Là je ne vois pas, mais sera surement résolut si tu supprime le bon et que
tu met à jour ta liste.
Essai déjà de supprimer le bon keyword, on verra après pour les problèmes. Et n'oublie pas de mettre à jour ta liste une fois la suppression effectué.
Damran
"Alain Teyssedre" <alain.teyssedre@libertysurf.fr> a écrit dans le message
de news:ui95HanhDHA.2436@tk2msftngp13.phx.gbl...
Bonjour Damran
Effectivement le champ RéfContact étant de type numérique il fallait en
tenir compte dans la requete
ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à
résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute
la commande supprimer,
c'est le 1er keyword de ma liste qui est supprimé !
Ca c'est bizzare. Vérifie bien l'index de la colonne pour ta liste
(keyword.Column(0)). Elle doit bien représenter l'élement à supprimer, c'est
a dir le champs que utilise pour ta suppression.
Si ta liste n'a qu'une colonne, ou si la colonne lié est bien le champs qui
te sert de suppression, alors utilise : Me.Keyword.Value
Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai
un message d'erreur :" erreur 3167 -
l'enregistrement est supprimé"
Normal, tu l'a supprimé mais ton controle ne l'a pas vue :
Me.Keyword.Refresh ou Me.Keyword.Requery
et si je resélectionne un keyword la j'ai
carrément toute mon appli Access qui se ferme !!!
Là je ne vois pas, mais sera surement résolut si tu supprime le bon et que
tu met à jour ta liste.
Essai déjà de supprimer le bon keyword, on verra après pour les problèmes.
Et n'oublie pas de mettre à jour ta liste une fois la suppression effectué.
"Alain Teyssedre" a écrit dans le message de news:
Bonjour Damran
Effectivement le champ RéfContact étant de type numérique il fallait en tenir compte dans la requete ta requete fonctionne mais j'ai toujours un problème que je n'arrive pas à résoudre.
Aprés avoir sélectionné un keyword dans ma zone de liste lorsque j'execute la commande supprimer, c'est le 1er keyword de ma liste qui est supprimé ! Ca c'est bizzare. Vérifie bien l'index de la colonne pour ta liste
(keyword.Column(0)). Elle doit bien représenter l'élement à supprimer, c'est a dir le champs que utilise pour ta suppression. Si ta liste n'a qu'une colonne, ou si la colonne lié est bien le champs qui te sert de suppression, alors utilise : Me.Keyword.Value
Si je re-sélectionne le même Key word et que j'essaye de le modifier, j'ai un message d'erreur :" erreur 3167 - l'enregistrement est supprimé" Normal, tu l'a supprimé mais ton controle ne l'a pas vue :
Me.Keyword.Refresh ou Me.Keyword.Requery
et si je resélectionne un keyword la j'ai carrément toute mon appli Access qui se ferme !!! Là je ne vois pas, mais sera surement résolut si tu supprime le bon et que
tu met à jour ta liste.
Essai déjà de supprimer le bon keyword, on verra après pour les problèmes. Et n'oublie pas de mettre à jour ta liste une fois la suppression effectué.