OVH Cloud OVH Cloud

[Access 2002] - Doublons

6 réponses
Avatar
Jeff
Bonjour à tous

J'ai pris bonne note que la question avait déjà été abordée dans le
groupe...

Cependant après des recherches un peu fouillées (certes surement pas assez
me direz-vous !! ;-))
je suis toujours à la recherche d'une solution à un problème semble-t-il
"simple"

Soit une table avec 3 champs (Produit, Date, Prix respectivement Texte,
Date/Heure, Numérique).

Les champs Produits et Date sont indexés avec doublons (le même produit à
des dates différentes, la même date pour des produits différents).

Cette table est "alimentée" en données par l'importation d'un fichier au
format texte délimité (TAB) par une fonction DoCmd.TransferText
acImportDelim.

Je voudrais donc (enfin la question !!)

soit éviter que l'on puisse importer 2 fois les mêmes informations
soit supprimer aprés l'importation les doublons éventuels.

Si je n'avais eu qu'un seul champ concerné par les doublons, je pense que
j'aurais pu utiliser la "technique" de la nouvelle table avec une clé
primaire. Mais voila, problème j'en ai deux.

Si quelqu'un a une petite piste, je suis preneur (si la réponse est trop
simple, merci de me ménager...).

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

6 réponses

Avatar
Jeff
Bonjour

Voici ma fonction (à commenter si nécessaire... ;-))

Dim db As DAO.Database, rst As DAO.Recordset, rst1 As DAO.Recordset

Set db = CurrentDb()
Set rst = db.OpenRecordset("DOUBLONS COTATION")
Do Until rst.EOF
Set rst1 = db.OpenRecordset("select * from [tableprix] where
[produit]=" & EntoureGuillemets(rst!produit1) & " and [date]=" &
DateAmericaine(rst!date1))
rst1.MoveNext
Do Until rst1.EOF
rst1.Delete
rst1.MoveNext
Loop
rst1.Close
rst.MoveNext
Loop
rst.Close
db.Close
Set rst = Nothing
Set rst1 = Nothing
Set db = Nothing
MsgBox "opération terminée", vbInformation, "Information"

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

"Jeff" a écrit dans le message de
news:
Bonjour à tous

J'ai pris bonne note que la question avait déjà été abordée dans le
groupe...

Cependant après des recherches un peu fouillées (certes surement pas assez
me direz-vous !! ;-))
je suis toujours à la recherche d'une solution à un problème semble-t-il
"simple"

Soit une table avec 3 champs (Produit, Date, Prix respectivement Texte,
Date/Heure, Numérique).

Les champs Produits et Date sont indexés avec doublons (le même produit à
des dates différentes, la même date pour des produits différents).

Cette table est "alimentée" en données par l'importation d'un fichier au
format texte délimité (TAB) par une fonction DoCmd.TransferText
acImportDelim.

Je voudrais donc (enfin la question !!)

soit éviter que l'on puisse importer 2 fois les mêmes informations
soit supprimer aprés l'importation les doublons éventuels.

Si je n'avais eu qu'un seul champ concerné par les doublons, je pense que
j'aurais pu utiliser la "technique" de la nouvelle table avec une clé
primaire. Mais voila, problème j'en ai deux.

Si quelqu'un a une petite piste, je suis preneur (si la réponse est trop
simple, merci de me ménager...).

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/




Avatar
Daniel Carollo
Bonjour Jeff!

Si un produit n'a pas deux prix differents a la meme date, il vous est
possible de mettre un index (sans doublons) sur les deux premiers champs
(c'est a dire un index sur deux colonnes). Cela deviendra la clef
d'identification de la table.

Bonne continuation.
--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Jeff" wrote in message
news:
Bonjour à tous

J'ai pris bonne note que la question avait déjà été abordée dans le
groupe...

Cependant après des recherches un peu fouillées (certes surement pas assez
me direz-vous !! ;-))
je suis toujours à la recherche d'une solution à un problème semble-t-il
"simple"

Soit une table avec 3 champs (Produit, Date, Prix respectivement Texte,
Date/Heure, Numérique).

Les champs Produits et Date sont indexés avec doublons (le même produit à
des dates différentes, la même date pour des produits différents).

Cette table est "alimentée" en données par l'importation d'un fichier au
format texte délimité (TAB) par une fonction DoCmd.TransferText
acImportDelim.

Je voudrais donc (enfin la question !!)

soit éviter que l'on puisse importer 2 fois les mêmes informations
soit supprimer aprés l'importation les doublons éventuels.

Si je n'avais eu qu'un seul champ concerné par les doublons, je pense que
j'aurais pu utiliser la "technique" de la nouvelle table avec une clé
primaire. Mais voila, problème j'en ai deux.

Si quelqu'un a une petite piste, je suis preneur (si la réponse est trop
simple, merci de me ménager...).

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/




Avatar
Daniel Carollo
Re-bonjour!

Pourquoi ne pas faire une requete? Ce serait probablement plus rapide que de
marcher a travers les enregistrements un par un...

DoCmd.RunSQL("DELETE FROM [tableprix] WHERE [produit]=" &
EntoureGuillemets(rst!produit1) & " AND [date]= #" &
DateAmericaine(rst!date1) & "#;")

Bonne continuation...

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Jeff" wrote in message
news:
Bonjour

Voici ma fonction (à commenter si nécessaire... ;-))

Dim db As DAO.Database, rst As DAO.Recordset, rst1 As DAO.Recordset

Set db = CurrentDb()
Set rst = db.OpenRecordset("DOUBLONS COTATION")
Do Until rst.EOF
Set rst1 = db.OpenRecordset("select * from [tableprix] where
[produit]=" & EntoureGuillemets(rst!produit1) & " and [date]=" &
DateAmericaine(rst!date1))
rst1.MoveNext
Do Until rst1.EOF
rst1.Delete
rst1.MoveNext
Loop
rst1.Close
rst.MoveNext
Loop
rst.Close
db.Close
Set rst = Nothing
Set rst1 = Nothing
Set db = Nothing
MsgBox "opération terminée", vbInformation, "Information"

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

"Jeff" a écrit dans le message de
news:
Bonjour à tous

J'ai pris bonne note que la question avait déjà été abordée dans le
groupe...

Cependant après des recherches un peu fouillées (certes surement pas
assez


me direz-vous !! ;-))
je suis toujours à la recherche d'une solution à un problème semble-t-il
"simple"

Soit une table avec 3 champs (Produit, Date, Prix respectivement Texte,
Date/Heure, Numérique).

Les champs Produits et Date sont indexés avec doublons (le même produit
à


des dates différentes, la même date pour des produits différents).

Cette table est "alimentée" en données par l'importation d'un fichier au
format texte délimité (TAB) par une fonction DoCmd.TransferText
acImportDelim.

Je voudrais donc (enfin la question !!)

soit éviter que l'on puisse importer 2 fois les mêmes informations
soit supprimer aprés l'importation les doublons éventuels.

Si je n'avais eu qu'un seul champ concerné par les doublons, je pense
que


j'aurais pu utiliser la "technique" de la nouvelle table avec une clé
primaire. Mais voila, problème j'en ai deux.

Si quelqu'un a une petite piste, je suis preneur (si la réponse est trop
simple, merci de me ménager...).

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/








Avatar
Jeff
Bonjour

Je veux tout de même conserver un enregistrement parmi les doublons.
Si j'ai trois doublons, je ne veux en effacer que 2.

Cordialement

"Daniel Carollo" a écrit dans le
message de news:
Re-bonjour!

Pourquoi ne pas faire une requete? Ce serait probablement plus rapide que
de

marcher a travers les enregistrements un par un...

DoCmd.RunSQL("DELETE FROM [tableprix] WHERE [produit]=" &
EntoureGuillemets(rst!produit1) & " AND [date]= #" &
DateAmericaine(rst!date1) & "#;")

Bonne continuation...

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Jeff" wrote in message
news:
Bonjour

Voici ma fonction (à commenter si nécessaire... ;-))

Dim db As DAO.Database, rst As DAO.Recordset, rst1 As DAO.Recordset

Set db = CurrentDb()
Set rst = db.OpenRecordset("DOUBLONS COTATION")
Do Until rst.EOF
Set rst1 = db.OpenRecordset("select * from [tableprix] where
[produit]=" & EntoureGuillemets(rst!produit1) & " and [date]=" &
DateAmericaine(rst!date1))
rst1.MoveNext
Do Until rst1.EOF
rst1.Delete
rst1.MoveNext
Loop
rst1.Close
rst.MoveNext
Loop
rst.Close
db.Close
Set rst = Nothing
Set rst1 = Nothing
Set db = Nothing
MsgBox "opération terminée", vbInformation, "Information"

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

"Jeff" a écrit dans le message de
news:
Bonjour à tous

J'ai pris bonne note que la question avait déjà été abordée dans le
groupe...

Cependant après des recherches un peu fouillées (certes surement pas
assez


me direz-vous !! ;-))
je suis toujours à la recherche d'une solution à un problème
semble-t-il



"simple"

Soit une table avec 3 champs (Produit, Date, Prix respectivement
Texte,



Date/Heure, Numérique).

Les champs Produits et Date sont indexés avec doublons (le même
produit



à
des dates différentes, la même date pour des produits différents).

Cette table est "alimentée" en données par l'importation d'un fichier
au



format texte délimité (TAB) par une fonction DoCmd.TransferText
acImportDelim.

Je voudrais donc (enfin la question !!)

soit éviter que l'on puisse importer 2 fois les mêmes informations
soit supprimer aprés l'importation les doublons éventuels.

Si je n'avais eu qu'un seul champ concerné par les doublons, je pense
que


j'aurais pu utiliser la "technique" de la nouvelle table avec une clé
primaire. Mais voila, problème j'en ai deux.

Si quelqu'un a une petite piste, je suis preneur (si la réponse est
trop



simple, merci de me ménager...).

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/












Avatar
Daniel Carollo
Bonjour Jeff!

Une requete de regroupement devrait permettre de faire ca, du genre:

DELETE FROM MaTable WHERE EnregID NOT IN
(SELECT Max(EnregID) FROM MaTable GROUP BY Produit, Date)

Bien sur, avant de faire tourner cette requete, vous pourrez verifier ce
qu'elle va laisser derriere en faisant:
SELECT Max(EnregID), Produit, Date FROM MaTable GROUP BY Produit, Date

Bonne continuation.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"Jeff" wrote in message
news:#
Bonjour

Je veux tout de même conserver un enregistrement parmi les doublons.
Si j'ai trois doublons, je ne veux en effacer que 2.

Cordialement


Avatar
Jeff
Bonjour Daniel

Je vais essayer cette trés judicieuse proposition.

Merci

Cordialement

Jeff

Charte du forum : http://users.skynet.be/mpfa/

"Daniel Carollo" a écrit dans le
message de news:%23u%
Bonjour Jeff!

Une requete de regroupement devrait permettre de faire ca, du genre:

DELETE FROM MaTable WHERE EnregID NOT IN
(SELECT Max(EnregID) FROM MaTable GROUP BY Produit, Date)

Bien sur, avant de faire tourner cette requete, vous pourrez verifier ce
qu'elle va laisser derriere en faisant:
SELECT Max(EnregID), Produit, Date FROM MaTable GROUP BY Produit, Date

Bonne continuation.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"Jeff" wrote in message
news:#
Bonjour

Je veux tout de même conserver un enregistrement parmi les doublons.
Si j'ai trois doublons, je ne veux en effacer que 2.

Cordialement