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 :

recupérer les donnees de deux tables de la BDD


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut recupérer les donnees de deux tables de la BDD
    salut à tous,
    je travail actuellement sur la réalisation d'une application VB6 et Access(je suis debutant en VB).
    SVP dites moi comment faire pour récupérer dans un form les facture qui ont été saisies entre deux date(valeur de deux DTPicker que j'utilise)??
    sachant qu'une facture fournisseur s'enregistre dans la BDD dans 2 table différentes :
    la table factute_four(N°facture,date_fact,Code_four) et dans le seconde table ligne_facture_four(N°facture,code_article,Quantité,TTC,Code_four)
    Donc le champs code_four est le lien entre les deux tables.

    Voila le code que j'ai utilisé mais ca marche pas!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rsfact_four = New ADODB.Recordset 
    rsfact_four.Open "Select* from Facture_four where Date_fact between #" & Format(DTPicker1.Value, "mm/dd/yyyy") & "# and #" & Format(DTPicker2.Value, "mm/dd/yyyy") & "#", cn, 1, 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rsligne_fact_four = New ADODB.Recordset 
    rsligne_fact_four.Open " select * from ligne_facture_four where ligne_facture_four.N°facture=Facture_four.N°facture ", cn, 1, 2
    Sur le premier Recordset,qui contient la date, je pense que c bon d'appliquer la condition de la date between.
    Le probléme me pose surtout sur la condition à appliquer sur le deuxiéme Recordset qui contient la plus part des champs que je cherche à afficher!!

    Merci à vous d'avance

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Question désormais traditionnelle : tu ne ferais pas du VB.Net ? (Le DateTimePicker me le laisse croire...)

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Je pencherai plutôt pour un problème de requête SQL .. ..?

    Je ne suis pas sur que tu ait besoin des deux recordset... pour le second il faut que tu modifie ta requête SQL , que tu y rajoute ta table Facture_four de façon à pouvoir tester la date ..

  4. #4
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Salut,
    Personnellement je suis bloqué , et si je savais comment modifier ma requete pour résoudre le probléme je l'aurais fait !!!
    Ca serait gentil de votre part d'etre un peu plus clair.
    Merci

  5. #5
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Ce serait gentil de ta part de nous dire aussi si tu es en VB6 ou VB.Net (même si pour une requête SQL celà ne change rien). Autant être sur le bon forum du premier coup, si tu as d'autres questions par la suite.

  6. #6
    Membre expérimenté
    Avatar de Dung-Tri
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 109
    Par défaut
    C'est du VB6

    Ta 2ème requete peut pas marché. Il peut pas deviner tous seul le n°Facture de ta premier requete. Recupère le n° Facture de la premiere requette et fais comme ta fais avec les datePicker; du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set rsligne_fact_four = New ADODB.Recordset 
    rsligne_fact_four.Open "select * from ligne_facture_four where ligne_facture_four.N°facture=" & rsfact_four["N°Facture"],  cn, 1, 2

  7. #7
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Salut,
    oui ca marche cette fois ci!!Maij j'ai tousjours un probléme qui pércicte encore c'est celui de l'affichage de donnees récupérees!!
    A l'exection je recois l'erreur suivante:

    BOF ou EOF est egale à true ou l'enregistrement actuel a été suprimé.L'opération demendée nécesite un enregistrement actuel
    J'ai remarqué que cette erreur arrive uniquement sur les champs que j'essaye de récupérer de deuxiéme recodset(rsligne_fact_four.Fields)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .Col = 3 
    .Text = rsligne_fact_four.Fields(3) 
    .Col = 4 
    .Text = rsligne_fact_four.Fields(4) 
    Col = 5 
    .Text = rsligne_fact_four.Fields(5)
    Merci
    Le voila le code que j'utilise et merci de me dire les erreursque j'ai comise

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    connect 
    Set rsfact_four = New ADODB.Recordset 
     
    Call rsfact_four.Open("Select * from Facture_four where Date_fact >=#" & DTPicker1.Value & " #AND " & _ 
      "Date_fact <=#" & DTPicker2.Value & "#", cn, 1, 2) 
      If rsfact_four.RecordCount = 0 Then 
     
    rsfact_four.MoveFirst 
    MsgBox "pas de facture saisie entre ces dates" 
    Exit Sub 
    End If 
    While rsfact_four.EOF = False 
        Set rsligne_fact_four = New ADODB.Recordset 
        rsligne_fact_four.Open " select * from ligne_facture_four where ligne_facture_four.N°facture= " & rsfact_four("N°facture"), cn, 1, 2 
     
       ' MsgBox rsligne_fact_four("N°facture") 
     
        rsfact_four.MoveNext 
    Wend 
    With g 
      .FixedRows = 1 'ligne en-tete 
      .Rows = 2 ' + une ligne vide 
       i = 1 
    rsligne_fact_four.MoveFirst 
    rsfact_four.MoveFirst 
    Do While Not rsligne_fact_four.EOF 
    Do While Not rsfact_four.EOF 
     
    'If rsligne_fact_four.Fields(4) = Combo1.Text Then 
    i = i + 1 
     
      .Rows = i 'nombre de ligne 
      .Row = i - 1 'ligne courante 
     
      .Col = 0 
    .Text = rsfact_four.Fields(1) 
    .Col = 1 
    .Text = rsfact_four.Fields(0) 
    .Col = 2 
    .Text = rsfact_four.Fields(2) 
    .Col = 3 
    .Text = rsligne_fact_four.Fields(3) 
    .Col = 4 
    .Text = rsligne_fact_four.Fields(4) 
    Col = 5 
    .Text = rsligne_fact_four.Fields(5) 
    'End If 
      rsligne_fact_four.MoveNext 
      rsfact_four.MoveNext 
      g.Refresh 
    Loop 
    Loop 
    End With 
    'End If 
    J'ai un probléme qui s'afffiche sur 
    Col = 3 
    .Text = rsligne_fact_four.Fields(3)
    Merci

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par bbil Voir le message
    Je pencherai plutôt pour un problème de requête SQL .. ..?

    Je ne suis pas sur que tu ait besoin des deux recordset... pour le second il faut que tu modifie ta requête SQL , que tu y rajoute ta table Facture_four de façon à pouvoir tester la date ..

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Ce que je pense, moi, c'est que tu cherches un code à coller dans ton source, sans même chercher à comprendre. Ca marche ou pas, c'est ton seul critère semble t'il. Ici on essaye plutot à te faire comprendre commebnt çà marche. Une fois que tu as compris, libre à toi d'adapter l'info à ton cas.

    Tiens , je suis bon prince

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sql ="Select * from  ligne_bncmmde_bnif " & _
            "Inner Join  Bon_commde_benif  " & _
            "On ligne_bncmmde_bnif.numeroBC =  Bon_commde_benif.numeroBC " & _
          "Where ligne_bncmmde_bnif.code_article='" & Combo1.Text & "' And " & _
                    "Bon_commde_benif  " & _
                       "between #" & format(DTPicker1(0).Value,"mm/dd/yyyy") & "# " & _
                       "    and #" & format(DTPicker1(1).Value,"mm/dd/yyyy") & "#"

  10. #10
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    je t'assure que tu te trompe!!! et que cela fait un mois que je suis entrain de chercher une solution!

  11. #11
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut Erreur de compilation VB6 et Access
    Salut à tous,
    je suis en VB6 et Access.
    dans le but de récupérer des factures qui concernet un article précis , j'utilise ce code:

    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
    Dim rsfact_four  As ADODB.Recordset
    Dim rsligne_fact_four   As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim i As Integer
     
        g.FixedRows = 1
        g.Rows = 2
     
        Set cn = New ADODB.Connection
        cn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Documents and Settings\Administrateur.INTERNET\Bureau\ma_base.MDB;"
        cn.Open
     
        Set rsligne_fact_four = New ADODB.Recordset
     
       Call rsligne_fact_four.Open("Select * from ligne_facture_four where code_article='" & Combo1.Text & "'", cn, 1, 2)
        If rsligne_fact_four.RecordCount = 0 Then
      MsgBox "pas de facture contenant cet article!!"
    Exit Sub
    Else
     
       rsligne_fact_four.MoveFirst
     
        While rsligne_fact_four.EOF = False
     
            Set rsfact_four = New ADODB.Recordset
        Call rsfact_four.Open(" select * from Facture_four where Facture_four.N°facture= " & rsligne_fact_four("code_article"), cn, 1, 2)
     
     '********************* l'erreur ce produit ICI **************
            rsfact_four.MoveFirst
     '**********************************************************
     
            While rsfact_four.EOF = False
                With g
                    i = .Rows - 1
                    .Rows = .Rows + 1
    à l'execution je recois l'erreur suivante:

    BOF ou EOF est egale à true ou l'eregistrement actuel a été suprimé.L'opération demendée necessite un enregistrement actuel.
    L'erreur arrive sur rsfact_four.MoveFirst
    SVP dites moi la ou les causes .
    Merci

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Par défaut
    Salut,

    Cela veux dire que tu n'a pas d'enregistrement pour ton numéro de facture....

    tu devrais mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if not rsfact_four.eof then
    rsfact_four.MoveFirst
    While rsfact_four.EOF = False
                With g
                    i = .Rows - 1
                    .Rows = .Rows + 1
                end with
    wend
    end if
    Coin.

  13. #13
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Si si il y'en a des enregistrement pour le numéro de facture cherché!!
    j'ai pas bien compris la modification que tu m'a proposé
    Voila mon code comple:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Dim rsfact_four  As ADODB.Recordset
    Dim rsligne_fact_four   As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim i As Integer
     
        g.FixedRows = 1
        g.Rows = 2
     
        Set cn = New ADODB.Connection
        cn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Documents and Settings\Administrateur.INTERNET\Bureau\ma_base.MDB;"
        cn.Open
     
        Set rsligne_fact_four = New ADODB.Recordset
     
       Call rsligne_fact_four.Open("Select * from ligne_facture_four where code_article='" & Combo1.Text & "'", cn, 1, 2)
        If rsligne_fact_four.RecordCount = 0 Then
      MsgBox "pas de facture contenant cet article!!"
    Exit Sub
    Else
     
       rsligne_fact_four.MoveFirst
     
        While rsligne_fact_four.EOF = False
     
            Set rsfact_four = New ADODB.Recordset
        Call rsfact_four.Open(" select * from Facture_four where Facture_four.N°facture= " & rsligne_fact_four("code_article"), cn, 1, 2)
     
     '********************* l'erreur ce produit ICI **************
            rsfact_four.MoveFirst
     '**********************************************************
     
            While rsfact_four.EOF = False
                With g
                    i = .Rows - 1
                    .Rows = .Rows + 1
        .TextMatrix(i, 0) = rsligne_fact_four.Fields(0)
                    .TextMatrix(i, 1) = rsligne_fact_four.Fields(1)
                    .TextMatrix(i, 2) = rsfact_four.Fields(1)
                    .TextMatrix(i, 3) = rsfact_four.Fields(2)
                    .TextMatrix(i, 4) = rsligne_fact_four.Fields(4)
                    .TextMatrix(i, 5) = rsligne_fact_four.Fields(5)
                End With
                 rsfact_four.MoveNext
            Wend
             rsligne_fact_four.MoveNext
        Wend
        g.Refresh
     
        cn.Close
    End If
    End Sub
    Merci

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 95
    Par défaut
    Est-ce que tu peux rééditer ton post pour mettre le code entre balise (bouton # ). Merci.


    tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    '********************* l'erreur ce produit ICI **************
    rsfact_four.MoveFirst
    '**********************************************************
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if not rsfact_four.eof then
         rsfact_four.MoveFirst
         while .......
                .....
                .....
         wend
    end if
    Explication : Cela fonctionne comme ton while ....EOF = False. : Si tu n'as pas d'enregistrement, tu ne rentres pas dans la boucle (donc tu n'essayeras pas de te positionné sur le 1er enregistrement qui n'existe pas).

    coin.

  15. #15
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    Merci d'avoir repondu mai sca marche toujours pas!!

    Est ce que tu peut ma faire un coller du code modifié par ce que il me semble que je me trompe!!
    Merci

Discussions similaires

  1. [MySQL] afficher les donnees de deux tables dans un tableau
    Par labartho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/10/2012, 16h13
  2. recupérer les donnees de deux tables
    Par elcondor dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 17/08/2008, 06h23
  3. [VBA] Selection d'un bouton selon les données d'un table
    Par Yanmeunier dans le forum Access
    Réponses: 6
    Dernier message: 26/04/2006, 08h47
  4. Donnees sous deux tables
    Par salmoliv dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/03/2006, 14h17
  5. Regrouper les infos de deux table sans jointure
    Par ricobye dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/07/2005, 09h30

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