Suppression de données (Access)

Résolu/Fermé
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 - 28 janv. 2010 à 16:43
 Utilisateur anonyme - 8 févr. 2010 à 16:28
Bonjour,

J'ai un probléme pour supprimer les données sur une ligne d'une table via un formulaire.

J'ai 3 tables (Enchérisseurs, Produits et Contrats_de_vente_annulé) qui sont utilisé dans mon formulaire "annulation de contrat de vente".

T_Enchérisseur = NoEnchérisseur, Nom, Prénom,...
T_Produits = NoProduits, decription, marque, modèle,... ,NoLot
T_Contrats_de_vente_annulés = NoAnnulation, DateAnnulation, NoLot, NoEnchérisseur, RaisonAnnulation

Les relations de ma requête liée à mon formulaire sont:
T_Contrats_de_vente_annulés et T_Enchérisseur sur NoEnchérisseur
T_Contrats_de_vente_annulés et T_Produits sur NoLot

J'ai créer un bouton "Supprimer enregistrement" dans mon formulaire à l'aide de l'assitant d'Access.

Le bouton en question doit supprimer les informations de la table "T_Contrats_de_vente_annulés" uniquement. Lorsque je l'utilise, il supprime les informations dans ma table "T_Produits" et ceux de la table "T_Contrats_de_vente_annulés" demeure présente. Pour la table "T_Enchérisseur" tout reste OK.

Un peu d'aide ne serait pas de refus.

Merci à l'avance

Un Non-Érudit

20 réponses

Utilisateur anonyme
8 févr. 2010 à 15:13
Bonjour,
je ne sais pas si le post est toujours d'actualité, mais suite à ton dernier message, voici quelques pistes :

D'abord, je te conseille vivement de ne pas inclure de parenthèses dans tes noms de table, de champs, ou de n'importe quel objet que tu peux créer. Si vraiment tu y tiens, alors chaque fois que tu devras utiliser ce nom, il te faudra lencadrer de crochets.
Dans ton cas, lorsque tu fais référence à ta table T_Contrat(s)_de_vente_annulés, il faut que tu écrives [T_Contrat(s)_de_vente_annulés]. Sans cela, c'est le bazar...

De même pour tes champs appelés No Acheteur et No Lot. L'espace n'est jamais le bienvenu dans le nommage des objets. De même que pour la table avec des parenthèses, cela t'oblige à faire référence à ton objet avec des crochets [No acheteur] et [No Lot].

Attention aussi à ne pas confondre l'espace et _. Il s'agît de deux caractères différents et non interchangeables.

Ensuite, dans l'instruction SQL, l'utilisation de me.No_Acheteur et me.No_Lot indiquent d'aller lire la valeur de ces deux champs dans ton formulaire. Précisons donc que ton formulaire doit effectivement contenir ces champs, nommés No_Lot et No_acheteur. Ces champs doivent afficher respectivement les données [No acheteur] et [No Lot] de ta table.
Si, après avoir vérifié et corrigé tout cela, ça ne fonctionne pas, tu rajoutes, juste avant le DoCmd.RunSQL StrSQL une ligne Debug.Print StrSQL, puis tu fais Ctrl+G pour afficher la fenêtre de débogage. Ainsi, lorsque cette ligne s'exécutera, l'instruction SQL sera écrite dans la fenêtre de débogage, et tu pourra faire un copier/coller afin que je vois ce qui cloche.

Bon courage.
1
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
8 févr. 2010 à 16:25
Résultat final :

Dim StrSQL As String
StrSQL = "DELETE [T_Contrat(s) de vente annulés].* FROM [T_Contrat(s) de vente annulés] WHERE "
StrSQL = StrSQL & "((( [T_Contrat(s) de vente annulés].[No Acheteur])=" & Me.[No Acheteur]
StrSQL = StrSQL & ") AND (([T_Contrat(s) de vente annulés].[No Lot])=" & Me.[No Lot] & ")); "
DoCmd.RunSQL StrSQL
Me.Requery

Tout fonctionne à merveille !

Merci énormément pour l'aide et les explications que tu m'as apporté.
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
28 janv. 2010 à 16:50
Salut,

il faut sans doute que tu actives l'intégrité référentielle au niveau de tes relations et cocher les suppressions en cascade.
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
28 janv. 2010 à 19:04
Message d'access: "Impossible de créer cette relation et d'assurer l'intégrité reférentielle."

J'avais déjà essayer.

Je ne suis pas un crac en Access, mais j'ai l'impression que ma table T_Produits est "primaire" dans ma DB et que la table T_Contrats_de_vente_annulés est "secondaire" (Que la table T_Contrats_de_vente_annulés est liée à la table T_Produits).

Ce que j'ai de besoin c'est que la table T_Produits soit liée à la table T_Contrats_de_vente_annulés.

Toutes les autres tables de ma DB sont liées à la table T_Produits (elle est centrale si je eut dire)
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
28 janv. 2010 à 20:12
Il serait intéressant de nous dire le type des relations entre les tables : 1 à plusieurs, 1 à 1 et sur quels champs (pour savoir s'ils sont des clés primaires)...

Tu pourrais faire une impression écran de tes relations et coller le document sur cjoint ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
1 févr. 2010 à 19:45
Désolé du délai, je n'ai pas eu le temps de répondre vendredi dernier et la FDS, je suis à OFF.

Où je joint mon fichier ?

0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
1 févr. 2010 à 20:38
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
1 févr. 2010 à 22:04
Merci

Et voilà

http://cjoint.com/data/cbwbbLpGZA.htm

J'ai créer une requete "info produits" que j'ai liée dans ma requête et ça fait le même problème

J'ai mis la table T_PRODUITS pour que tu puisse voir la clé primaire de cette table.

Il n'y a pas de relation entre ces tables dans la fenêtre "relation"
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
2 févr. 2010 à 09:58
En principe : relation 1-n entre enchérisseurs et contrats de ventes annulés.

Quelle est la différence entre N°dossier de contrat de ventes annulés et N°dossier de R_info_produits ?

R_info_produits est une table ou une requête ?

Je pense malgré tout que ton modèle de données est erroné, c'est sans doute pour cela que tu ne peux pas faire ce que tu souhaites.
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
4 févr. 2010 à 20:31
NoDossier est égal entre Contrat de vente annulé et R_Info Produits

R_Info Produits est une requête que j'ai fait pour faire afficher les informations sur les produits dans plusieurs formulaire.

Que veux-tu dire par mon modèle de données est erroné. De quel façon je peux corriger ?

Merci pour le temps que tu accorde à mon problème.
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
4 févr. 2010 à 20:44
Il me faudrait les tables et non des requêtes...

Peux-tu faire un affichage des relations, mais en mettant toutes les tables (et que les tables) ?
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
4 févr. 2010 à 21:24
Je n'ai pas de relations "générale" entre les tables en questions.

Les relations n'était que dans ma requête.

https://www.cjoint.com/?cevwMjiNGh
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
5 févr. 2010 à 09:52
Tu devrais en principe avoir une relation de 1-n entre T-informations-générales sur l'ecan et T_produits. Idem pour T_type exigence, T_catégories de produits, T_carburants...

C'est le principe : une table avec une clé primaire qui se retrouve comme nom de champ dans une autre table doit avoir une relation 1-n.

Mais aussi intégrer la table T_no_dossier_encan dans la table t_informations générales sur l'ecan, puisqu'elles ont la même clé primaire
0
Utilisateur anonyme
5 févr. 2010 à 11:39
Bonjour tous,
Sans vouloir faire mon malin, à mon avis on se fourvoie :
Ton formulaire est basé sur une requête mettant en relation tes trois tables. Si tu as créé le bouton de suppression à l'aide de l'assistant de Access, il tente tout bêtement de supprimer la ligne de ta requête, et donc des tables qui la constituent. Or, il semblerait que la relation créée dans ta requête empêche cette suppression.

Si tu ne veux supprimer que la ligne de la table T_contrats_de_vente_annulés, je te conseille de le faire par une commande SQL en VBA qui pourrait ressembler à :

dim StrSQL as String
StrSQL = "DELETE T_Contrats_de_vente_annulés.* FROM T_Contrats_de_vente_annulés WHERE "
StrSQL = StrSQL & "((( T_Contrats_de_vente_annulés.NoEnchérisseur)=" & Me.NoEnchérisseur
StrSQL = StrSQL & ") AND ((T_Contrats_de_vente_annulés.NoLot)=" & Me.NoLot & "));
DoCmd.RunSQL StrSQL
Me.Requery

J'espère que ça répond à ton besoin
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 17:58
Bonjour Manugeo

Message d'erreur de compilation:
Membre de méthode ou de données introuvable

Merci quand même...
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 18:00
Bonjour Blux

J'ai apporté les correctifs que tu m'as suggéré dans mes relations.

https://www.cjoint.com/?cfr5F0sLHq

J'ai ton approbation ?

Cependant, mon problème persiste...
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
5 févr. 2010 à 18:10
Déjà, ça me semble plus joli :-)
Mais je ne vois pas la table T_contrat de vente annulés...

Dans tous les cas, lorsque tu as une base avec un modèle de données 'académique', il faut savoir que tu ne peux pas supprimer n'importe quoi n'importe quand, c'est ce qu'on appelle l'intégrité référentielle (par exemple on ne peut pas supprimer un client de la table client si des factures sont en relation avec ce client dans la table facture).
0
Utilisateur anonyme
5 févr. 2010 à 18:06
Je pense que c'est la ligne SQL qui a été coupée au moment du Copier Coller.

La clause WHERE doit se trouver en fin de première ligne :
...FROM T_Contrats_de_vente_annulés WHERE "

Essaye comme ça.
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 18:28
Manugeo

Voir ci-joint l'erreur de compilation

https://www.cjoint.com/?cfsAXkT5we

Merci
0
blux Messages postés 25999 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
5 févr. 2010 à 18:33
C'est normal, la zone surlignée doit correspondre à un contrôle à partir duquel on récupère le n° enchérisseur...

Existe-t'il une telle zone ?
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 18:37
Blux

Je ne peux pas créer de relation entre la table T_PRODUITS et la table T_Contrat de vente annulés en appliquant l'intégrité référentielle

https://www.cjoint.com/?cfsLflqy67
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 18:39
Pour les lignes de code vous me perdez complètement.

Je me débrouille dans access de façon autodidacte mais la prog, je suis un gros 0
0
Utilisateur anonyme
5 févr. 2010 à 18:42
Ben oui, je te donne du code, mais c'est toi qui a créé ton formulaire, tes tables, et qui connaît le nom des tables et des champs de formulaire; je suis pas mme Soleil...

Pour que ça marche, il faut que ton formulaire ait un champ stockant ton n° d'enchérisseur (qui s'appelle NoEnchérisseur) et un autre qui affiche le n° de lot (NoLot)
Les noms sont ceux que tu as donné lorsque tu as expliqué le lien entre tes table.

Sur ce, je termine ma journée.
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
5 févr. 2010 à 19:28
J'apprécie énormément le temps que vous m'accordez pour résoudre mon problème.

Vous serait-il possible d'expliquer comme si vous vous adressiez à quelqu'un qui a des connaissance limité dans le domaine. Je suis assez brillant pour comprendre, cependant si vous êtes trop technique, je vous perds.

Je ne suis pas programmeur, je me suis créer un outil pour m'aider dans mon travail.

Recevez, Interlocuteurs, mes salutations distinguées.
0
gumbi machine Messages postés 57 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 4 avril 2016 5
6 févr. 2010 à 05:08
Bonjour Manugeo

Au post no6 j'ai joint une image des trois tables avec le nom des champs des tables.

Les lignes de codes ajusté devrait donner ceci:

Dim StrSQL As String
StrSQL = "DELETE T_Contrat(s)_de_vente_annulés.* FROM T_Contrat(s)_de_vente_annulés WHERE "
StrSQL = StrSQL & "((( T_Contrat(s)_de_vente_annulés.No_Acheteur)=" & Me.No_Acheteur
StrSQL = StrSQL & ") AND ((T_Contrat(s)_de_vente_annulés.No_Lot)=" & Me.No_Lot & ")); "
DoCmd.RunSQL StrSQL
Me.Requery

Cependant, à l'execution j'ai un message d'erreur '3131' - Erreur de syntaxe dans la clause FROM

et le débogage surligne DoCmd.RunSQL StrSQL

Le nom des champs de mon formulaire sont "No Lot" et "No Acheteur"

Merci de m'expliquer ce qui ne va pas afin de me permettre de comprendre et d'améliorer mes connaissances.
0
Utilisateur anonyme
8 févr. 2010 à 16:28
Content que ça marche !
0