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

Python Discussion :

recherche d’occurrences dans BD access


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2002
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 643
    Par défaut recherche d’occurrences dans BD access
    Salut
    j'ai un problème avec mon code qui plante un peut dans sa recherche dans base de donnée ACCESS.
    normalement quand il trouve une instance (après comparaison) dans la BD il l'affiche, mais son problème est quand cette instance ce trouve deux fois ou plus dans la BD il ne l'affiche qu'une seul fois( et moi, je veux afficher même les répétition)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    def DBAccess (Term):
        MDB = 'c:/test/mydb.mdb'
        DRV = '{Microsoft Access Driver (*.mdb)}'
        PWD = ''
     
        conn = pyodbc.connect('DRIVER=%s;DBQ=%s;PWD=%s' % (DRV,MDB,PWD))
        curs = conn.cursor()
     
     
        curs.execute("select * from Tinfo")
        rows = curs.fetchall()
        for row in rows:
            T = 'T' + str(row.nom) + '_' + row.code1 + '-' + row.code2
            if (T == Term ):
                print T
     
        curs.close()
        conn.close()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for row in rows:
            T = 'T' + str(row.nom) + '_' + row.code1 + '-' + row.code2
            if (T == Term ):
                print T
    On ne sait pas trop quel est le contenu de Term mais l'intention est de filter les /rows/ en construisant un identifiant T a partir de la valeur des attributs (nom, code1, code2) et de le comparer a Term.
    quand cette instance ce trouve deux fois ou plus dans la BD il ne l'affiche qu'une seul fois
    Pour s'assurer de cela, pourquoi ne pas construire /a la main/ une liste de rows et vérifier que le filtre fait ce qui est attendu de lui?
    La classe collections.namedtuple permettrait d’écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from collections import namedtuple
    Tinfo=namedtuple("Tinfo", "nom code1 code2")
    rows=[
        Tinfo("toto-1", "code1", "code2"),
        Tinfo("toto-1", "code1", "code2"),
        Tinfo("tutu-1", "code1", "code2"),
        ]
    Term="Ttoto-1_code1-code2"
    i.e construire quelque chose en répétant les informations intéressantes cote filtre indépendamment du contenu de la table.
    Si vous n'arrivez pas a faire fonctionner le filtre, vous avez un reproducteur que vous pourrez partager et dont on pourra discuter.
    Si le filtre fonctionne, c'est que vos hypothèses quant au contenu de la table sont a revoir pour certaines valeurs du tuple (nom, code1, code2).
    Note: Mais il n'y a que vous qui avez accès a ces infos.

    Pourquoi écrire "select * from Tinfo" plutot que "select * from Tinfo where nom=... and code1=... and code2=...". Cela pousse la responsabilité du filtrage cote SGDB et on sait sur quoi taper lorsque le retour est inattendu.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [AC-2003] Recherche globale dans base Access
    Par yuan dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/10/2010, 09h07
  2. Dans formulaire de recherche avancée dans Access
    Par LeSuisse1 dans le forum Access
    Réponses: 1
    Dernier message: 24/04/2006, 15h59
  3. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 13h53
  4. Recherche dans base access
    Par VARACH dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/01/2006, 08h17
  5. Recherche valeur dans table Access
    Par Stefloulou dans le forum Access
    Réponses: 1
    Dernier message: 05/11/2005, 08h45

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