Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015
-
3 avril 2009 à 23:29
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015
-
4 avril 2009 à 03:27
Salut !
J'ai un problème qui me tue. J'ai fais un grand effort (croyez moi) pour trouver ce bout de code, mais je rencontre des erreurs.
Il n'édite que la première ligne.
Je m'explique mieux :
J4ai deux tables
-
Virtual Fact
*
Designation
*
Quantite
- ArticleStock * Designation
*
Total
Quand je clique sur le bouton Command1, il doit retirer la quantité du total.
- Il ne fait que la première ligne malheureusement sans boucler la commande.
- Il retire et retire jusqu'à tout en bloquant le programme.
- Et certaines erreurs de ce genre.
If Not (DataR.Recordset.BOF And DataR.Recordset.EOF) Then
DataR.Recordset.MoveLast
DataR.Recordset.MoveFirst
If Not DataStock.Recordset.EOF Then
With DataStock.Recordset
.Edit
.Total = Val(DataR.Recordset!ResteQte)
.Update
End With
DataStock.Recordset.MoveNext
End If
End If
'########################################################
Je suis sûr que l'erreur vient
If Not DataStock.Recordset.EOF Then
Mais je n'arrives pas à trouver l'erreur et corriger.
Pouvez vous m'aider svp ?
Merci
----------
OS : Windows XP SP3
Platforme : VB 6.0 + SP6
Ok VB6.0 c'est pas net !
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 4 avril 2009 à 00:22
Salut,
normal qu' il ne traite que la première ligne,
étant donné que tu ne boucles pas.
RECOMMANDATIONS:
Si tu cherches à mettre à jour ta table STOCK à partir de la table FACTURE.
1° Pointes-toi sur la table facture
SQ ="SELECT * FROM VirtualFact"
DataR.RecordSource = SQ
2° Pointes-toi ensuite sur la table STOCK
SQ = "SELECT * FROM ArticleStock"
DataStock.RecordSource = SQ
3°Tu parcours Factures
With DataR.Recordset
If .BOF And .EOF Then Exit Sub
.MoveLast
.MoveFirst
Do While Not .Eof
'tu cherches dans STOCK
DataStock.Recordset.FindFirst "[Designation]='" & !Designation & "'"
If Not(DataStock.Recordset.NoMatch Then
'Si tu trouves, tu mets à jour
DataStock.RecordSet.Edit
DataStock.RecordSet!Total =DataStock.RecordSet!Total-! Quantite
DataStock.RecordSet.Update
End If
'Tu passes au suivant
.MoveNext
Loop
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 4 avril 2009 à 00:37
Salut !
Merci pour ton aide, mais pour l'instant j'ai une erreur sur cette ligne :
If .BOF And .EOF Then Exit Sub
Erreur d'exécution 91
Variable objet ou variable Bloc With non définie
SQ = "SELECT * FROM VirtualFact"
DataR.RecordSource = SQ
SQ = "SELECT * FROM ArticleStock"
DataStock.RecordSource = SQ
With DataR.Recordset
If .BOF And .EOF Then Exit Sub
.MoveLast
.MoveFirst
Do While Not .EOF
DataStock.Recordset.FindFirst "[Designation]='" & !Designation & "'"
If Not (DataStock.Recordset.NoMatch) Then
DataStock.Recordset.Edit
DataStock.Recordset!Total = DataStock.Recordset!Total - !Quantite
DataStock.Recordset.Update
End If
.MoveNext
Loop
End With
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 4 avril 2009 à 01:03
Non, avec ce code il n'exécute rien. Aucune opération ne se fait.
J'ai oublié de noter que après clique du bouton pour exécuter la commande, la table VirtualFact se supprime automatiquement.
Le stock initial est comme suite dans sa table :
ArticleStock - Designation
- Carton
- Piece
- Total
En sachant que Carton * Piece = Total
En sachant que la facture retire du Total de ArticleStock
En sachant que la table VirtualFact
En sachant qu'une fois la facture enregistrée il n'y a pas de suppression de facture
En sachant que pendant l'ajout du stock
:Carton * Piece Total + Ancien Total nouveau Total
Il va falloir trouver comment résoudre ce problème :'(
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 4 avril 2009 à 01:07
Avec cet ajout
J'ai toujours une erreur sur ce code :
If .BOF And .EOF Then
SQ = "SELECT * FROM VirtualFact"
DataR.RecordSource = SQ
DataR.Refresh
SQ = "SELECT * FROM ArticleStock"
DataStock.RecordSource = SQ
With DataR.Recordset
If .BOF And .EOF Then Exit Sub
.MoveLast
.MoveFirst
Do While Not .EOF
DataStock.Recordset.FindFirst "[Designation]='" & !Designation & "'"
If Not (DataStock.Recordset.NoMatch) Then
DataStock.Recordset.Edit
DataStock.Recordset!Total = DataStock.Recordset!Total - !Quantite
DataStock.Recordset.Update
End If
.MoveNext
Loop
End With
Merci encore, c'est gentil de me donner ton temps et m'aider.
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 4 avril 2009 à 01:53
Merci infiniment LIBRE_MAX
Je t'ai assez dérangé comme ça, le code fonctionne parfaitement je crois, j'ai fais 5 tests et tous sont parfaitement bien gérés.
Je te remercie pour ton aide encore une fois.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 4 avril 2009 à 03:03
Bien !
Maintenant tu peux optimiser ton code en utilisant une requete de regroupement sur la table FACTURES.
Ainsi tu ne feras qu' un seul passage pour chaque article.
SQ="SELECT VirtualFact.Designation, Sum(VirtualFact.Quantite) AS Qte_Sortie "
SQ=SQ & "FROM VirtualFact "
SQ=SQ & "GROUP BY VirtualFact.Designation;"