faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 décembre 2009
-
22 août 2008 à 19:26
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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!!
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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#"
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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é.
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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
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
faycalche
Messages postés74Date d'inscriptionvendredi 2 juin 2006StatutMembreDernière intervention31 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.