[ACCESS] Update sans doublons

Signaler
Messages postés
3
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004
-
Messages postés
3
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004
-
Salut, alors voilà mon problème:
Je dispose d'une table que l'utilisateur peut mettre à jour en choisissant un fichier excel. Problème, les tuples du fichier excel peuvent déjà exister dans la table. Je ferais bien un INSERT avec une opération de différence (genre minus sur oracle je crois) mais ça a pas l'air d'exister, le IN / EXISTS rame comme c'est pas croyable. Par contre il y a UNION, c'est ce que j'utilise mais je dois d'abord effacer la table et là c'est le drame vu que j'utilise une procédure qui peut appeler n'importe quelle table et donc effacer des clés. Y aurait-il pas un autre moyen ? (pas de where a=b svp vu que j'utilise des tables différentes.)

@nomTable est la table à mettre à jour
@tmp est le fichier excel

'copie la table dans OLD
DoCmd.CopyObject , "OLD", acTable, nomTable

'crée NEW à partir du fichier excel tmp
DoCmd.TransferSpreadsheet acImport, 8, "NEW", tmp, True

'efface tous les enregistrements de l original
CurrentDb.Execute ("DELETE * FROM " & nomTable)

'fait l union de old et new et insere dans l original
CurrentDb.Execute ("INSERT INTO " & nomTable & " SELECT * FROM( SELECT * FROM OLD UNION SELECT * FROM NEW)")

'efface old et new
DoCmd.DeleteObject acTable, "OLD"
DoCmd.DeleteObject acTable, "NEW"

Merci pour vos réponses.

3 réponses

Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
1
Petite question :
Dans le fichier Excel il peut y avoir des données existantes.
Les utilisateurs font les modifications de table via le fichier Excel.

Un utilisateur peut-il modifier un enregistrement existant ?
Je ne vois pas comment tu traites le cas d'un même enregistrement (clef) avec des données mises à jour ...

Ce que je ferai à ta place, c'est
1. Importer le fichier Excel
2. Le couper en 2 tables distinctes, l'une qui contient les doublons de ta table existante (de préférence ceux qui ont des différences uniquement), l'autre les nouveaux enregistrements.
3. A partir de la table des doublons, faire un UPDATE avec une clause INNER JOIN (je ne sais plus si ça passe, mais il me semble que oui) - au pire tu gères ceci par programmation
4. A partir de la table des noveaux enregistrements, faire un INSERT
Messages postés
3
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004

Le fichier excel est la sortie d'un autre logiciel. L'utilsateur ne peut rien modifier, en fait on passe de l'intranet national à une BD locale, il doit donc seulement mettre à jour de temps en temps les données.
Si tu veux, j'ai une table EMPLOYES qui décrit des données perso (nom, NSS) qui changent jamais avec un champ Id qui fait office de clé primai re,puis j'ai d'autres tables par exemple CANTINE qui va décrire le repas de l'employé à une certaine date, içi Id sera une clé étrangère. Le problème c'est que les employes changent : on les virent en masse, on en reprend d'autres... Et avec ma méthode lors de la mise à jour d'EMPLOYES, tout va être effacé et les clefs vont disparaitre pendant un moment et y aura que des inconnus à la CANTINE, c'est pas les restos du coeur non plus (blague d'informaticien).
Ta méthode de traiter tout d'abord par excel me semble pas mal mais la jointure est impossible vu que je ne peux pas spécifier le nom des champs.
Sinon passer par la prog directe c'est pas mal mais vu la taille des fichiers faudrait que j'implémente des algo de tris et comparaison très performants et ça je me sens pas :p
Merci
Messages postés
3
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
12 juillet 2004

Le fichier excel est la sortie d'un autre logiciel. L'utilsateur ne peut rien modifier, en fait on passe de l'intranet national à une BD locale, il doit donc seulement mettre à jour de temps en temps les données.
Si tu veux, j'ai une table EMPLOYES qui décrit des données perso (nom, NSS) qui changent jamais avec un champ Id qui fait office de clé primai re,puis j'ai d'autres tables par exemple CANTINE qui va décrire le repas de l'employé à une certaine date, içi Id sera une clé étrangère. Le problème c'est que les employes changent : on les virent en masse, on en reprend d'autres... Et avec ma méthode lors de la mise à jour d'EMPLOYES, tout va être effacé et les clefs vont disparaitre pendant un moment et y aura que des inconnus à la CANTINE, c'est pas les restos du coeur non plus (blague d'informaticien).
Ta méthode de traiter tout d'abord par excel me semble pas mal mais la jointure est impossible vu que je ne peux pas spécifier le nom des champs.
Sinon passer par la prog directe c'est pas mal mais vu la taille des fichiers faudrait que j'implémente des algo de tris et comparaison très performants et ça je me sens pas :p