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 :

Inner Join entre deux tables SQL avec VB6


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Inner Join entre deux tables SQL avec VB6
    Bonjour,

    Je ne connais pas beaucoup le VB et je tente désespérément de faire une fonction me permettant de relier deux tables SQL qui ne proviennent pas de la même base de donné, avec une interface VB6.

    J'ouvre une permière connexion pour ma table 'Status' qui provient de la base de donnée 'Commande' et une deuxième connexion pour ma table 'produits' qui provient de la base de donnée 'SuiviProd'.
    L'inner join doit être sur le no de commande mais la je me bute a un problème car dans la table commande le 'IdMecInov' est '002-1234.1) et dans la table Produits le 'Commande' est (002-1234).

    1- Mon premier problème est que je ne suis pas capable de créer mon Select sur les deux tables . J'ai l'erreur que 'Invalid Object Name Produits' Produits est le nom de ma table de la BD Suiviprod

    2- Mon deuxième prob est que je dois faire l'inner join avec un Left$(....,9)


    Voici ma fonction :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    strfiltre = ""
     
    If TxTClient <> "" And Not IsNull(TxTClient) Then
       strfiltre = "nomcli = '" & Replace(TxTClient, "'", "''") & "'"
    Else
       strfiltre = "NomCli <> 'Test' AND IDCli <> '0' AND IdCli <> '9999999'  "
    End If
     
    If ComboLiv <> "" And Not IsNull(ComboLiv) Then
        If strfiltre <> "" Then
           strfiltre = strfiltre & " AND "
        End If
        If ComboLiv = "Livré" Then
           ComboLiv = 1
        End If
        If ComboLiv = "Non Livré" Then
           ComboLiv = 0
        End If
        strfiltre = strfiltre & "Expedier =  '" & ComboLiv & "'"
    End If
    If TxtDateFrom <> "" And Not IsNull(TxtDateFrom) Then
        If strfiltre <> "" Then
            strfiltre = strfiltre & " AND "
        End If
            strfiltre = strfiltre & "date01 between '" + Format(TxtDateFrom, "yyyy/mm/dd") + "' and '" + Format(txtDateTo, "yyyy/mm/dd") + "'"
    End If
     
    If strfiltre <> "" Then
       strfiltre = "WHERE " & strfiltre
    End If
     
    CnxPro.Open "Provider=SQLOLEDB;Server=mecinov;uid=Production;pwd=Production;database=suiviprod"
    DBSuiviProdSQL.Open "SELECT Commande,Expedier FROM produits , CnxPro, adOpenStatic, adLockReadOnly"
     
    DBCommandesSQL.Open "SELECT Status.NomCli,Status.idMecinov,Status.Date01,Produits.Commande FROM status inner join Produits on Status.idMecinov = Produits.Commande " & strfiltre, CnxCom, adOpenStatic, adLockReadOnly
    Note : la connexion pour la table commande est définie dans une fonction public

    Merci de m'aider

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    problème1: Je crois que tu dois hardcoder le nom de la base de donnée
    Si TABLE1 se trouve dans DATABASE1, la requête devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t1.* FROM DATABASE1.TABLE1 t1
    Evidemment, je ne sais pas comment tu as défini ta connection cnx (cnxcom) et j'espère de tout coeur qu'il n'y a pas le nom d'une DB dans sa définition.
    problème2: je ne comprend pas où est le problème...

  3. #3
    Membre habitué
    Homme Profil pro
    Analyste développeur VB6, SQL, VB.NET, C#
    Inscrit en
    Avril 2003
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste développeur VB6, SQL, VB.NET, C#
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2003
    Messages : 111
    Points : 141
    Points
    141
    Par défaut
    bonjour,

    dans la ConnectString (chaîne de connexion à une base de données), nous définissons le serveur ET la base de données:
    Provider=SQLOLEDB;Server=mecinov;uid=Production;pwd=Production;database=suiviprod
    il est clair que les seules tables ou procédures stockées accessibles sont celles de la base de données.

    te renseigner auprès des spécialistes sur le forum SQLServer...

    sinon je ne vois que cela:
    - se connecter à la base 'Commande'
    - récupérer tes informations de la table 'Status'
    - stocker la valeur de 'IdMecInov' dans une variable (par exemple une variable String nommée strIdMecInov)
    - se connecter à la base 'SuiviProd'
    - récupérer tes informations de la table 'Produits' en passant en paramètre la valeur de 'IdMecInov' que tu devras ajuster comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCommandesSQL.Open "SELECT * FROM PRODUITS WHERE Commande = " & left(strIdMecInov,8), CnxCom, adOpenStatic, adLockReadOnly

    cdlt,
    N'oubliez pas le tag .

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    J'ai finalement trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If DBCommandesSQL.State = adStateOpen Then DBCommandesSQL.Close
    If DBSuiviProdSQL.State = adStateOpen Then DBSuiviProdSQL.Close
    DBSuiviProdSQL.Open "SELECT Commande, Expedier FROM Produits ", CnxPro, adOpenStatic, adLockReadOnly
    DBCommandesSQL.Open "SELECT [SuiviProd].[dbo].[Produits].[Expedier], status.IdMecinov, status.NomCli, status.IdCli, status.Date01 FROM [Commandes].[dbo].[Status] inner join [SuiviProd].[dbo].[Produits]ON LEFT(status.idmecinov, 9) = [SuiviProd].[dbo].[Produits].[Commande] GROUP BY [SuiviProd].[dbo].[Produits].[Expedier],status.IdMecinov, status.NomCli, status.IdCli, status.Date01 " & strfiltre, CnxCom, adOpenStatic, adLockReadOnly
    merci tout le monde

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

Discussions similaires

  1. FULL JOIN entre 4 tables SQL / Access
    Par kbrice dans le forum Access
    Réponses: 2
    Dernier message: 07/05/2015, 23h15
  2. insérer la différence entre deux tables sql
    Par joujousagem2006 dans le forum Développement
    Réponses: 4
    Dernier message: 10/09/2014, 15h07
  3. [MySQL-5.0] Join entre deux tables
    Par slig_80 dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/04/2013, 16h16
  4. Transférer données entre deux tables sql server
    Par Aethen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/05/2011, 14h52
  5. join entre deux tables
    Par nour111 dans le forum SQL
    Réponses: 13
    Dernier message: 21/01/2011, 11h33

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