Recherche d'erreur

Résolu
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 3 avril 2009 à 23:29
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 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.

Voici donc mon bout de code :





'########################################################







SQ = " SELECT ArticleStock.Designation, ArticleStock.Total, "






SQ = SQ + "





VirtualFact.Designation, VirtualFact.Quantite, "
SQ = SQ + " val(ArticleStock.Total-VirtualFact.Quantite) As ResteQte "
SQ = SQ + " FROM VirtualFact, ArticleStock "
SQ = SQ + " Where VirtualFact.Designation=ArticleStock.Designation "

DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataR.RecordSource = SQ
DataR.Refresh




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 !

11 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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

End With
3
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 avril 2009 à 00:45
Attention tout de même !
Si tu refais le même traitement deux fois de suite, le résultat sera erroné en ce qui concerne la quantité réelle en stock.

Tu dois donc avoir un champ repère.Quantité initiale par exemple.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 avril 2009 à 00:51
Pardon, Posts croisés..!
Pour l" erreur essaies ceci:

SQ = "SELECT * FROM VirtualFact"
DataR.RecordSource = SQ
On Error Resume Next
With DataR.Recordset
.MoveLast
.MoveFirst
If .BOF And .EOF Then Exit Sub

Do While Not .EOF
0

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

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 avril 2009 à 00:54
Ajoutes aussi DataR.Refresh après
DataR.RecordSource = SQ
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 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 :'(
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 avril 2009 à 01:35
Et t' as bien mis
DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"

Avant ?

Reprenons:
DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"
SQ = "SELECT * FROM VirtualFact"
DataR.RecordSource = SQ
DataR.Refresh

SQ = "SELECT * FROM ArticleStock"
DataStock.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataStock.RecordSource=SQ
DataStock.Refresh

A part ça je ne vois pas !
Puisque c' est presquez pareil que ton premier code !!!?
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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;"


DataR.DatabaseName = App.Path & "\BaseDonnee.mdb"
DataR.RecordSource = SQ
DataR.Refresh


Et tu remplaces


DataStock.RecordSet!Total =DataStock.RecordSet!Total-!             Quantite


Par


DataStock.RecordSet!Total =DataStock.RecordSet!Total-!             Qte_Sortie

Pour le reste tu laisses tout pareil..








 





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015
4 avril 2009 à 03:27
Encore merci Libre_Max
Vraiment sympa de ta part !
0
Rejoignez-nous