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

  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
    Membre averti
    Inscrit en
    Août 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 24
    Par défaut
    J'ai oublié de répondre à OhMonBato , c'est du VB6.

  9. #9
    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
    Désolé, tu l'avais indiqué dans ton premier message pourtant.

    Ca ne fait pas avancer ton code mais c'est tout de même étrange d'avoir créé une table supplémentaire juste pour enregistrer la date de la facture (si j'en crois ton premier post, c'est la seule donnée qui ne soit pas en commun avec la deuxième table). Ce serait plus simple de travailler sur une seule table non ?

  10. #10
    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
    Forcement si tu fait les 2 movenext dans le meme loop

    Essai plutot comme ca

    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
     
    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 
     
      rsfact_four.MoveNext 
      g.Refresh 
    Loop 
       rsligne_fact_four.MoveNext 
    Loop
    Parcontre ta facon de faire est bizarre que cherche tu as faire?

  11. #11
    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
    Pour que ton Algo puissent mieux marcher je te conseil de d'abord faire un Do While .. Loop sur le recordset des infos d'entete de ta facture puis un autre Do While .. Loop sur les lignes de détail de la facture. Ca sera plus clair plus toi.

  12. #12
    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 Dung-Tri;
    C'est ce que j'ai fait et ca marche!
    D'autre part,Je veux affecter la somme des TTC des factures affichées à un textbox. Est ce que tu as une idée comment faire!!!
    Merci bcp

  13. #13
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 57
    Par défaut
    tu peux faire tes requetes directement dans access en desing, et transformer le resulat en SQL pour l'integer a ton code.

  14. #14
    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 Gestion des codes TVA
    Pour la TVA je te conseil de la gérée une table des TVA avec par ex: un ID, un Libelle et un taux, voir avec les comptes rattaché si tu compte gérée la comptabilité.
    C'est une méthode standard dans le milieu professionnel.

    Puis dans ta requete fait un inner join sur cette table et calcul le taux directement dans le select

    ex de requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     SELECT lignefact.PrixHorsTaxe * (1 + Tva.Taux / 100) FROM lignefact INNER JOIN Tva ON lignefact.codeTva = Tva.code;

  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
    Salut,
    Apparemment je me suis mal exprimé!je reformule ma question:
    Dans une grille s'affichent un ensemble de factures(N°FActure,......,TTC),ce que je cherche c'est de récupérer le cumul des TTC des factures affichées et de l'affecter à un Textbox!!!
    Merci d'avance

  16. #16
    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 Cumul TVA
    Pour le cumul ca deviens complexe
    Ca fait longtemp... que j'ai vu ca.
    Le cumul c'est bien la somme des tva (hors taxe déduite) et ca par code taux de tva. Ce que ta sur les tickets de caisse à la fin.

    Cela pourra pas sur faire directement dans la requete.

    Faut que tu code une fonction afin des faires un regroupement par code tva

    C'est à dire que pour une facture avec du 19,6 et 5.5
    tu totalise toutes les tva a 19,6, toutes les tva a 5.5 dans un tableau à partir de ton recordset. c'est a dire : HT * (TauxTVA/100).

  17. #17
    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

  18. #18
    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.

  19. #19
    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

  20. #20
    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.

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