OVH Cloud OVH Cloud

requête SQL

1 réponse
Avatar
Jean-Marc
Salut à tous,

Dans un bdd en Access 2000 j'ai 2 tables liées. L'une contient les Contacts
et l'autre les envois qui ont été effectués.
Les tables sont liées par le champs RéfContact.

Dans la table Contacts existe un champs ImprimerEtiquette qui est de type
Yes/No.

Dans l'état qui me sert à imprimer les étiquettes, j'ai créé une procédure
de fermeture qui devrait mettre le champs ImprimerEtiquette à No.
Dans la table Envois, je voudrais qu'un nouveau champs se crée pour chaque
record de l'état. Dans la procédure j'utilise des inputbox pour définir la
date de l'envoi et la personne qui a effectué l'envoi.
J'ai essayé une requête de mise à jour qui fonctionne bien quand il n'y a
encore aucun enregistrement relié à ce contact dans la table Envois. Par
contre si plusieurs envois pour ce contact existent déjà, tous ces champs
sont mis à jours, ce qui est logique mais évidemment pas ce que je
recherche.
J'ai essayé de créer une requête ajout mais là j'ai d'autres types de
problèmes : S'il n'y a aucun record lié à ce contact dans la table envoi, il
n'ajoute aucune ligne. Par contre si j'ai déjà 3 record d'envois pour ce
contact, il m'ajoutera 3 lignes avec les données que j'ai effectivement
introduites par les inputbox.

Quelle est mon erreur ?

Voici les SQL :

DoCmd.RunSQL "UPDATE DISTINCTROW (Etats RIGHT JOIN Contacts ON Etats.RefEtat
= Contacts.RefEtat) LEFT JOIN Envois ON Contacts.RéfContact =
Envois.RéfContact SET Envois.RéfContact = [contacts].[réfcontact],
Envois.DateEnvoi = #" & Format(DateEnvoye, "mm/dd/yyyy") & "#,
Envois.Description = 'Brochure Info', Envois.Personnel = '" & Personne & "',
Contacts.ImprimerEtiquette = 'No' WHERE
(((Contacts.ImprimerEtiquette)=Yes));"


DoCmd.RunSQL "INSERT INTO Envois ( RéfContact, DateEnvoi, Description,
Personnel ) SELECT DISTINCTROW Envois.RéfContact, '" & DateEnvoye & "' AS
Expr1, 'Brochure info' AS Expr2, '" & Personne & "' AS Expr3 FROM (Etats
RIGHT JOIN Contacts ON Etats.RefEtat = Contacts.RefEtat) LEFT JOIN Envois ON
Contacts.RéfContact = Envois.RéfContact WHERE
(((Contacts.ImprimerEtiquette)=Yes));"



Merci de vos z'avis z'avisés,

JM

1 réponse

Avatar
Jean-Marc
A force de chercher j'ai fini par trouver.
Pour ceux que cela intéresse, voici la solution.
C'était pourtant évident ...
Trop, peut-être ...
En fait je reprenais le RéfContact dans la table Envois, donc la requête
ajoutait une ligne à chaque fois qu'elle trouvait le RéfContact dans la
table Envois.
Il fallait définir d'introduire le RéfContact de la table Contacts dans la
nouvelle ligne a ouvrir.

La solution était donc :

INSERT INTO Envois ( DateEnvoi, Description, Personnel, RéfContact ) SELECT
DISTINCTROW '" & DateEnvoye & "', 'Brochure info', '" & Personne & "',
[Contacts].[RéfContact] FROM Contacts LEFT JOIN Envois ON
Contacts.RéfContact = Envois.RéfContact WHERE
(((Contacts.ImprimerEtiquette)=Yes));

JM

"Jean-Marc" a écrit dans le message de
news:
Salut à tous,

Dans un bdd en Access 2000 j'ai 2 tables liées. L'une contient les
Contacts

et l'autre les envois qui ont été effectués.
Les tables sont liées par le champs RéfContact.

Dans la table Contacts existe un champs ImprimerEtiquette qui est de type
Yes/No.

Dans l'état qui me sert à imprimer les étiquettes, j'ai créé une procédure
de fermeture qui devrait mettre le champs ImprimerEtiquette à No.
Dans la table Envois, je voudrais qu'un nouveau champs se crée pour chaque
record de l'état. Dans la procédure j'utilise des inputbox pour définir la
date de l'envoi et la personne qui a effectué l'envoi.
J'ai essayé une requête de mise à jour qui fonctionne bien quand il n'y a
encore aucun enregistrement relié à ce contact dans la table Envois. Par
contre si plusieurs envois pour ce contact existent déjà, tous ces champs
sont mis à jours, ce qui est logique mais évidemment pas ce que je
recherche.
J'ai essayé de créer une requête ajout mais là j'ai d'autres types de
problèmes : S'il n'y a aucun record lié à ce contact dans la table envoi,
il

n'ajoute aucune ligne. Par contre si j'ai déjà 3 record d'envois pour ce
contact, il m'ajoutera 3 lignes avec les données que j'ai effectivement
introduites par les inputbox.

Quelle est mon erreur ?

Voici les SQL :

DoCmd.RunSQL "UPDATE DISTINCTROW (Etats RIGHT JOIN Contacts ON
Etats.RefEtat

= Contacts.RefEtat) LEFT JOIN Envois ON Contacts.RéfContact > Envois.RéfContact SET Envois.RéfContact = [contacts].[réfcontact],
Envois.DateEnvoi = #" & Format(DateEnvoye, "mm/dd/yyyy") & "#,
Envois.Description = 'Brochure Info', Envois.Personnel = '" & Personne &
"',

Contacts.ImprimerEtiquette = 'No' WHERE
(((Contacts.ImprimerEtiquette)=Yes));"


DoCmd.RunSQL "INSERT INTO Envois ( RéfContact, DateEnvoi, Description,
Personnel ) SELECT DISTINCTROW Envois.RéfContact, '" & DateEnvoye & "' AS
Expr1, 'Brochure info' AS Expr2, '" & Personne & "' AS Expr3 FROM (Etats
RIGHT JOIN Contacts ON Etats.RefEtat = Contacts.RefEtat) LEFT JOIN Envois
ON

Contacts.RéfContact = Envois.RéfContact WHERE
(((Contacts.ImprimerEtiquette)=Yes));"



Merci de vos z'avis z'avisés,

JM