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 6 et antérieur Discussion :

Recherche entre deux tables


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Recherche entre deux tables
    Bonjour
    Voilà encore une fois un autre problème je souhaite extraire les lignes qui se trouvent dans une table1, et qui ne se trouvent pas dans une table2.
    Celà est possible avec Sql si on fait le (select champ1 from table1 where champ1 not in (select champ1 from table2))
    Je pouvais intégrer cette ligne Sql avec un bd.Execute("select ....") et ca marchera, mais le problème que j'ai c'est mes deux tables ne sont pas dans la meme base de données
    si je fais une boucle pour rechercher les lignes desirees, cela va me prendre un immense temp sachant que les deux tables contiennent dans les environs de 30000 lignes.
    Cela sera une grande perte de temp si on dit pas blocage avec une boucle ordinaire si on veut juste chercher deux ou trois lignes

    Quelqu'un a une idée peut etre?
    Merci à vous d'avance, j'ai confiance en vous

  2. #2
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Je ne l'ai jamais testé mais je sais qu'il existe des SGBD qui permettent de créer des vues sur des tables appartenant à des bases de données différentes.

    Tu fais ta requête sur la vue et le reste est géré par ton SGBD.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Sous oracle on a le DBLink, ça marche pas mal.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Effectivement, pour les gros SGBD, y'a des outils qui permettent le faire, cependant, je n'utilise que MS Access, deux bd access que j'essai de lié leurs tables pour une recherche, mais je trouve toujours pas une solution optimale.

  5. #5
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Tu peux, même sous Access, importer une des tables dans l'autre base et de faire ta requête.
    Si tu veux faire en VB ce qui relève des compétences de ton SGBD tu risques d'avoir de mauvaises surprises.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Pour l'importation c'eest ce que je veux faire, bref, j'ai fait un bout de code comme suivant, il vérifi si les deux tables ont le meme recordcount, sinon il vide la 2éme et la remplie avec les nouvelles valeurs, ca c'est gros probléme, ca prend du temp comme je l'ai dit, et ca peut planter meme la machine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If t6.RecordCount > t7.RecordCount Then
     
        base3.Execute ("DELETE FROM produit")
        t6.MoveFirst
        Do Until t6.EOF
            t7.AddNew
            For i = 0 To 59
                t7.Fields(i) = t6.Fields(i)
            Next i
            t7.Update
        t6.MoveNext
        Loop
     
    End If
    LE code suivant je l'ai optimisé pour que ce ne soit pas lourd pour la recherche, j'ai pensé à utiliser l'argument TOP du SQL d'access, (LIMIT pour d'autres SGBD), puisque ma table contient une clé primaire qui par defaut un Numero Auto, donc, la variable NM (Integer) contient la soustraction des deux recordcount pour obtenir le nombre de lignes qui font la différence, et je les lets en ordre decroissant.
    La variable Req (String) contient la requete SQL à executer pour obtenir les lignes manquants, avec le TOP comme vous le remarquez qui a comme valeur la variable NM.
    Cette méthode ne me donne pas toujours un bon résultat, y'a toujours des lignes manquant ou bien des lignes de surplus, surtout que j'ai des relations complexes entre les tables.
    J'attend toujours une idée, je sais qu'il existe une solution, (Je perd pas éspoire )

    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
    If t.RecordCount > t1.RecordCount Then
    NM = t.RecordCount - t1.RecordCount
    Req = "Select TOP " & NM & " [num fp], numot, cc, date, bc, naot, regime, observation, qf, ptb, stb, deche, dateot, qd from planing ORDER BY numot DESC"
        t8.MoveFirst
        Do Until t8.EOF
                t1.AddNew
                t5.AddNew
                For i = 0 To 13
                    t1.Fields(i) = t8.Fields(i)
                Next i
                t5.Fields(0) = t8.Fields(1)
                t5.Fields(8) = "N"
                t1.Update
                t5.Update
        t8.MoveNext
        Loop
    End If
    Et Merci encore à vous

  7. #7
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    La clause in devrait t'aider pour aller chercher des tables dans une autre base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select champ1 from table1 in 'c:\chemin\base.mdb'  where champ1 not in (select champ1 from table2 .... etc

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Merci Delbek, c'est une très bonne instruction, elle fait exactement ce que je souhaite faire, mais comme d'habitude le même incovenitent, lenteur d'éxécution dans des tables surchargées comme les miennes.
    Par contre, j'ai trouvé une solution remarquable qui m'a totalement soulagé et ca ne pas beaucoup de temps, ni de ressources, en fouillant un petit peu dans Access, j'ai pu trouver une options nommée, le Link Table, cette option permet de prendre une table toute entière qui se trouve dans une base, et la mettre dans une autre base, sans avoir besoin de créer une nouvelle table et la remplir à chaque moment.

    Bien, pour ceux qui ont le même problème que moi, le Link Table se trouve dans : File > Get external Data > Link Table (c'est en version anglaise).

    Merci à vous tous, et j'éspère que çà aide....

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonsoir
    Je pense que c'est pas complétement résolu la méthode que j'ai citer en haut ne fait pas de mise à jour automatique de la table il faut toujours une mise à jour manuelle, alors je part pour la solution de Delbeke (le Select .... In ...) en attendant une solution optimale, peut être, la méthode du link table avec une mise à jour automatique (je prie que ce cas soit possible!!!)

  10. #10
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    J'ai deja eu l'occasion de travailler avec de tables liées , les tables liées etant des tables As400 au travers d'ODBC. Je n'ai pas eu de problemes particulier, ces tables sont vues par le programmeur comme d'autres tables Access.
    Seul bemol, elles doivent avoir une cle primaire unique. Autre info, j'ai utilisé DAO

  11. #11
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Points : 79
    Points
    79
    Par défaut
    pourquoi pas

    Select * from table1 left join on table2;

    ?

    edit : pas vu que les tables ne sont pas au meme endroit ....

  12. #12
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par NiGHtyWolf
    Merci Delbek, c'est une très bonne instruction, elle fait exactement ce que je souhaite faire, mais comme d'habitude le même incovenitent, lenteur d'éxécution dans des tables surchargées comme les miennes.
    Par contre, j'ai trouvé une solution remarquable qui m'a totalement soulagé et ca ne pas beaucoup de temps, ni de ressources, en fouillant un petit peu dans Access, j'ai pu trouver une options nommée, le Link Table, cette option permet de prendre une table toute entière qui se trouve dans une base, et la mettre dans une autre base, sans avoir besoin de créer une nouvelle table et la remplir à chaque moment.

    Bien, pour ceux qui ont le même problème que moi, le Link Table se trouve dans : File > Get external Data > Link Table (c'est en version anglaise).

    Merci à vous tous, et j'éspère que çà aide....
    Je te proposais des solutions pour rien alors !

    Citation Envoyé par Bujuman le 01/02/2007 à 15h42
    Tu peux, même sous Access, importer une des tables dans l'autre base et de faire ta requête.
    Si tu veux faire en VB ce qui relève des compétences de ton SGBD tu risques d'avoir de mauvaises surprises.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Bujuman
    Je te proposais des solutions pour rien alors !
    Bonjour
    Non! désole l'ami, c'est juste que j'ai peut être pas remarquer ta solution, ou je ne l'ai pas compris, ou du moin comment elle fonctionnait, sinon ca m'aura éviter un temp remaquable de recherche
    Merci à toi fréro

  14. #14
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Ca marche maintenant ?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Bujuman
    Ca marche maintenant ?
    On peut dire oui, ca marche, car j'ai utilisé la méthode du (Select .... In ...) ca marche à merveille sauf que c trop lent pour récupérer le resultat, j'aurais aimer utiliser la méthode que t'a proposé (Le Link Table) sauf que y'a pas de mise à jour automatique comme je l'ai cité avant. (Enfin, j'ai bien chercher et j'ai pas trouver pour la Màj automatique)

    Bref, je metterai un Résolu quand même, je pense que le resultat est quand même bon...

  16. #16
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    peux tu expliquer
    sauf que y'a pas de mise à jour automatique

  17. #17
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    sauf que y'a pas de mise à jour automatique
    Mise à jour au niveau de la base ou au niveau du formulaire ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche entre deux tables
    Par Kreepz dans le forum Langage SQL
    Réponses: 9
    Dernier message: 06/08/2014, 13h31
  2. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  3. Transfert entre deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2004, 14h36
  4. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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