IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Eviter les doublons dans une base access


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Par défaut Eviter les doublons dans une base access
    Bonjour

    Une table access contient des enregistrements.
    Je rajoute des enregistrements provenant d'une datatable dans la table access.

    Le Hic, est que dans la datatable il y a des enregistrements qui sont déja dans la table access et d'autre non.

    Je voudrais ne remplir la base access qu'avec les enregistrements manquant.

    Voici comment je fais mais je pense que ce n'est pas la meilleure facon de faire.
    Un champ qui est unique dans chaque enregistrement est défini en clé primaire sur la table access

    connexion a la base access
    lecture de la premiere ligne de la datatable
    insert into la table access
    gestion de l'erreur sur doublon clé primaire si l'enregistrement existe déja j'ignore l'erreur et passe a la ligne suivante de la datatable.


    Cela fonctionne mais j'ai lu que la gestion des erreurs était a proscrire car lente.

    Sachant que la base access va contenir plusieurs milliers d'enregistrements et que la datatable va en contenir a chaque fois une centaine.

    Qu'est ce qui a votre avis est le plus long?
    la gestions de 50 erreurs (on va dire qu'un enregistrement sur deux est déjà présent)

    ou

    Le chargement dans une deuxième datatable de la table access contenant plusieurs milliers d'enregistrement
    la requete entre les deux datatables excluant les doublons
    puis le transfert de la requete dans la table access?

    peut être avez vous une autre solution a me proposer.

    Merci de m'avoir lu.
    Gilles

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par gilles_906 Voir le message
    Le Hic, est que dans la datatable il y a des enregistrements qui sont déja dans la table access et d'autre non.
    Bah c'est ce problème là qu'il faut régler... ça ne devrait pas arriver. Tu dois modéliser dans ta DataTable les même contraintes de clé primaire ou d'unicité que dans la table en BDD, comme ça tu n'auras pas de doublons dans la DataTable, et le problème ne se posera plus

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Par défaut
    oui mais cela m'oblige a charger la table access, ce qui va prendre du temps car elle contient beaucoup d'enregistrements.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans ce cas, ne charge que les lignes sur lesquelles tu vas travailler... Avant de travailler sur une ligne qui n'est pas dans la DataTable, tu refais un Fill avec une requête qui récupère juste la ligne voulue, et ensuite tu travailles en mémoire

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2010
    Messages : 277
    Par défaut
    j'ai pas tout compris

    je ne charges que les lignes sur lesquels je travaille puisqu'elles proviennent d'un fichier xml, elles sont donc affichées dans un datagrid qui est lié a une datatable.

    Tu me dis (si j'ai bien compris) de faire une requete pour trouver dans ma BDD l'enregistrement correspondant a la ligne de la datatable?
    je trouve => doublon
    je trouve pas => nouvel enregistrement

    Si c'est ca, cela va me faire exécuter une centaine de fois la requete, et la requete va s'executer sur plusieurs milliers d'enregistrements.



    Pour que tu comprenne mieux ce que je veux faire:
    J'ai une table access qui contient toutes les operations bancaires.

    Je telecharge sur le site de la banque un fichier qui contient les opérations faites sur la période demandé (il peu il y avoir de nouvelles opérations)

    j'affiche les opérations du fichier dans un datagrid.

    sur appuie d'un bouton aprés vérif manuelle j'envoie les opérations dans la BDD pour stockage (uniquement celle qui n'y sont pas)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par gilles_906 Voir le message
    Si c'est ca, cela va me faire exécuter une centaine de fois la requete, et la requete va s'executer sur plusieurs milliers d'enregistrements.
    Et alors ? Y a pas d'index dans ta DB ? Si tu fais une recherche sur une colonne indexée, c'est très rapide... D'ailleurs, quelques milliers de lignes c'est rien du tout ; à partir de quelques millions on peut commencer à dire que c'est une grosse table, mais des milliers... c'est peanuts
    (même pour Access, qui est probablement le SGBD le plus pourri qui soit )

    Citation Envoyé par gilles_906 Voir le message
    Pour que tu comprenne mieux ce que je veux faire:
    J'ai une table access qui contient toutes les operations bancaires.

    Je telecharge sur le site de la banque un fichier qui contient les opérations faites sur la période demandé (il peu il y avoir de nouvelles opérations)

    j'affiche les opérations du fichier dans un datagrid.

    sur appuie d'un bouton aprés vérif manuelle j'envoie les opérations dans la BDD pour stockage (uniquement celle qui n'y sont pas)
    OK, j'avais pas bien compris ton problème alors...

    Tu as un identifiant qui te permet de retrouver une ligne, ou tu compares tous les champs ? Si tu as un identifiant, j'ai une suggestion pas super propre mais qui devrait marcher : tu construis une requête avec "WHERE ID_OPERATION IN (x, y, z ...)", où x/y/z/etc sont les IDs des opérations dans le fichier. Ca te permet de repérer facilement les lignes qui sont déjà dans la DB

Discussions similaires

  1. Eviter les doublons dans une requête.
    Par Smint dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/03/2017, 16h17
  2. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  3. [MySQL] eviter les doublons dans une bdd
    Par sanaa16 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/06/2008, 17h40
  4. Créer les relations dans une base access avec ADOQuery
    Par codial dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/03/2007, 09h31
  5. Eviter les doublons dans une requete ?
    Par DrySs dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/03/2006, 05h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo