Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2011, 09h30   #1
Membre actif
 
Inscription : septembre 2007
Messages : 630
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 630
Points : 165
Points : 165
Par défaut lecture d'une requête SQL pour conserver une partie des données

Bonjour,

J'ai un post en requête SQL mais n'arrivant pas à trouver une solution (pour l'instant), j'essaye une autre idée en utilisant, cette fois-ci, le vba.

J'ai une requête SQL qui me ressort des doublons (voir triplons...) sur certains enregistrements.
En résumé, j'obtiens un résultat comme celui-ci :


Les lignes en rouge sont mes doublons. (COD_CLT et REFERENCE)

Mon idée serait
Code :
1
2
3
4
5
6
7
lecture de la requête, 
je stocke en variables COD_CLT et REFERENCE,
Lecture enregistrement suivant
Si COD_CLT et REFERENCE identique au précédent : donc un doublon et j'ignore cet enregistrement
Sinon j'ajoute cet enregistrement dans une table TEMPO
Lecture enregistrement suivant ...
et boucle tant que Non EOF
Mais mon pb est que parfois le doublon n'est pas sur l'enregistrement suivant.
Exemple :triplons présent sur l'enregistrement 1, 723, et 24560

Donc mon raisonnement ne pourra pas marcher dans de tels cas.

Auriez-vous une meilleure réflexion/conception à me proposer ?


EDIT DE MON POST : étant à l'ouest !! je me rends compte que ce pb n'en est pas un !! il suffit que je trie ma requête de façon différente !!

Par contre, j'ai une question annexe :
Est-il possible de stocker mes enregistrements à conserver puis de faire ma requête d'ajout dans ma table TEMPO qu'à la fin du traitement ?
Si oui, comment ?
Car je suppose que si je fais un AJOUT à chaque boucle, cela va me prendre un temps fou de traitement SQL...



Merci à tous
Thibault
tibofo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 10h37   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Je conseillerais un champ NumeroAuto dans la table source (n dans l'exemple).
alors se serait simple
une requête
Code :
1
2
 
SELECT Min(Table1.n) AS Min, Table1.cod_clt, Table1.reference FROM Table1 GROUP BY Table1.cod_clt, Table1.reference;
puis une seconde : ajout dans la table TEMPO
Code :
1
2
 
INSERT INTO tempo SELECT Table1.* FROM Table1 INNER JOIN Requête1 ON Table1.n = Requête1.Min;
sinon c'est plus compliqué
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 09h56   #3
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
L'image du premier post n'est plus visible mais effectivement comme helas je ne vois pas l'intérêt de se compliquer la vie avec un recordset VBA... La clause SQL Group By est faîte pour ce genre de doublons.

Code :
INSERT INTO tempo SELECT Table1.cod_clt, Table1.reference FROM Table1 GROUP BY Table1.cod_clt, Table1.reference;
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h34.


 
 
 
 
Partenaires

Hébergement Web