Recherche d'erreur

Résolu
Signaler
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
-
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015
-
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

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Ajoutes aussi DataR.Refresh après
DataR.RecordSource = SQ
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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 :'(
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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 !!!?
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

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.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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 />
Messages postés
855
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
21 août 2015

Encore merci Libre_Max
Vraiment sympa de ta part !