Recupéreation donnees de deux tables de la BDD

faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009 - 22 août 2008 à 19:26
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009 - 26 août 2008 à 19:44
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!!

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

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

19 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 août 2008 à 20:26
Dans la seconde requette, il faut que tu remplace Facture_four.N°facture par le champ lu dans le premier recorset.

rsligne_fact_four.Open " select * from ligne_facture_four where ligne_facture_four.N°facture= " & rsfact_four("N°Facture"), cn, 1, 2 

vérifie la syntaxe, j'ai perdu l'habitude de travailler avec ADO, je ne sais plus si c'est comme ça que ça s'écrit .

Sinon, tu as la possibilité de tout récupérer en une seule requette. Tu aura autant de ligne de résultat que de ligne de facture, ton entete de facture sur simplement dupliquer sur chaque ligne.

Select Facture_four.*,ligne_facture_four.* From Facture_four
Inner Join ligne_facture_four on  ligne_facture_four.N°facture =Facture_four.N°facture
Where Date_fact between #tadate1# and #tadate2#"

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
23 août 2008 à 03:49
Salut Casy,
La solution1 ca marche pas et des erreur d'execution s'affichent.Concerant la deuxiéme solution je pense que je dois l'execution de la requéte à l'evenement open d'un Recordset des deux? et franchement je ne sais pas lequel!!
Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 août 2008 à 14:01
pour la première solution, quel est ton code et surtout les messages d'erreur que tu obtiens ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
23 août 2008 à 17:11
Salut,
Je voulais dire par la 1er solution le chnagement que tu m'a proposé au niveau de la requete 2:
rsligne_fact_four.Open " select * from ligne_facture_four where ligne_facture_four.N°facture=" & rsfact_four("N°Facture"), cn, 1, 2
J'obtiens l'erreur suivante:
Erreur d'execution 91:
variablr objet ou variable bloc with non définie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
23 août 2008 à 17:18
Salut,
j'obtiens aussi l'erreue suivante:
Type de donnees incompatible dans l'expression du critére.
Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 août 2008 à 19:20
sur quelle ligne de code arrivent ces erreurs?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
23 août 2008 à 19:36
sur le requete 2 elle meme.
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
24 août 2008 à 18:01
Salut,
Voila le code que j'utilise:

Set rsfact_four = New ADODB.Recordset
rsfact_four.Open "Select* from Facture_four where Date_fact >=#" & DTPicker1.Value & " #AND " & _
"Date_fact <=#" & DTPicker2.Value & "#", cn, 1, 2
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


Mais je recois l'erreur suivante sur le deuxiéme requete:
Type de données incompatible dans l'expression du critére.
Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 août 2008 à 18:48
Est-ce que tes champs N°facture sont de même type dans les 2 tables, et de type numérique ????


Ce code marche très bien chez moi :

Dim rsfact_four As ADODB.Recordset
Dim rsligne_fact_four As ADODB.Recordset
Dim cn As ADODB.Connection

Set cn = New ADODB.Connection
cn.ConnectionString = \"Driver={Microsoft Access Driver
(*.mdb)};Dbq=D:\BaseTest.MDB;\"
cn.Open

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)
  
rsfact_four.MoveFirst

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

cn.Close

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
25 août 2008 à 02:22
OK je vais essayer
merci
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
25 août 2008 à 02:51
Salut casy,
Oui ca marche cette fois , mais j'ai toujours mais j'ai encore un probléme d'affichage des factures dans la grille!!
Voila le code complet que j'utilise:
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)
priére de me dire les erreurs que j'ai comise dans ce code là!!
Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 août 2008 à 14:57
J'ai pas trop le temps de regarder pour le moment, mais je dirais qu'à priori le code de traitement que tu as mis dans la seconde boucle DO-While, il faudrait le mettre à la place du msgbox du code que je t'ai donné.
 
---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
25 août 2008 à 16:52
Salut casy,
j'ai essayer mais ca marche encore pas!!
Merci
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
25 août 2008 à 18:35
Salut,
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)
.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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
25 août 2008 à 20:49
Dim 
rsfact_four 
As 
ADODB.Recordset


Dim 
rsligne_fact_four 
As 
ADODB.Recordset


Dim 
cn 
As 
ADODB.Connection


Dim 

As Integer



    g.FixedRows = 1
    g.Rows = 2
    
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Driver={Microsoft Access Driver
(*.mdb)};Dbq=D:\BeseTest.MDB;"
    cn.Open
    
    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)
    
    rsfact_four.MoveFirst
    
    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
        
        rsligne_fact_four.MoveFirst
        
        While rsligne_fact_four.EOF = False
            With g
                i = .Rows - 1
                .Rows = .Rows + 1
                
                .TextMatrix(i, 0) = rsfact_four.Fields(1)
                .TextMatrix(i, 1) = rsfact_four.Fields(0)
                .TextMatrix(i, 2) = rsfact_four.Fields(2)
                .TextMatrix(i, 3) = rsfact_four.Fields(3)
                .TextMatrix(i, 4) = rsfact_four.Fields(4)
                .TextMatrix(i, 5) = rsfact_four.Fields(6)
            End With
            rsligne_fact_four.MoveNext
        Wend
        rsfact_four.MoveNext
    Wend
    g.Refresh
    
    cn.Close












---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
26 août 2008 à 01:56
Salut casy,
Cette fois ci ca marche trés bien!!!
Merci infiniment
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
26 août 2008 à 01:59
Juste une petite question si vous le permettez!
Je veux affecter la somme des TTC des factures affichées à un textbox.
Est ce que vous avez une idée!!!
Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 août 2008 à 08:52
si ta somme TTC de chaque facture est affichée dans la grille, à la fin du remplissage de la grille, après le cn.close par exemple, tu refait une boucle sur le nombre de ligne de la grille en cumulant la valeur de la colonne correspondante dans un variable. Ensuite il ne te reste plus qu'à afficher la variable dans le textbox.

Sinon tu peut faire le cumul aussi au moment du remplissage de la grille juste en dessous des textmatrix. ensuite tu affiche le cumul dans la textbox après le traitement.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
faycalche Messages postés 74 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 31 décembre 2009
26 août 2008 à 19:44
J'ai eesayé maintes fois mais sans succés!!!
0
Rejoignez-nous