begin process at 2010 03 20 17:35:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Recordset, Pour mise à jour d'un champ, Probleme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recordset, Pour mise à jour d'un champ, Probleme

dimanche 30 mars 2008 à 12:29:33 | Recordset, Pour mise à jour d'un champ, Probleme

good speed

Bonjour, je travails sous  ACCESS 2003

J'essais de mettre à jour le champ [MAJ Quantite] de la table "Taille Stock" avec du vb code
mais rien ne se produit, ni le resultat escompté, ni  erreur signalée par access.

Ci-dessous  les deux tables Vente  et  " Taille stock"  ainsi que le code vb

A signaler que le code est placer dans le formulaire Vente  sur  " apres mise à jour"  event

Vente
SaleIDDateReferenceTailleQuantite
102/03/2008Ref139401
202/03/2008Ref222
302/03/2008Ref241
403/03/2008Ref139402
503/03/2008Ref3401
603/03/2008Ref231
703/03/2008Ref231
804/03/2008Ref221
915/03/2008Ref3442
1015/03/2008Ref141423
1115/03/2008Ref3441
1218/03/2008Ref242
1318/03/2008Ref143441
1418/03/2008Ref221

Taille Stock
IDReferenceTailleQuantiteMAJ Quantite
1Ref1373855
2Ref1394088
3Ref141421010
4Ref1434488
5Ref221010
6Ref2366
7Ref241212
8Ref2599
9Ref3401010
10Ref34288
11Ref34466
12Ref34688



Le code:

------------------------------------------------------------------------------

Private Sub Form_AfterUpdate()


        ' If an error occurs, jump down to the DataAccessError section.
        
On Error GoTo DataAccessError

          ' Create a SELECT command.
 Dim Query As String

 Query = "SELECT Reference, Taille, Quantite FROM Vente"

          ' Get a recordset using this command.

 Dim RS As DAO.Recordset

 Set RS = CurrentDb.OpenRecordset(Query)

  ' Move through the recordset, looking at each record.
  ' Each record is a separate item in the order.
       
 Do Until Recordset.EOF

              ' For each item, get the product ID and quantity details.
            

 

Dim vReference As String

Dim vTaille    As String

Dim vQuantite  As Long


        
 vReference = Recordset("Reference")
          
 vTaille = Recordset("Taille")
           
 vQuantite = Recordset("Quantite")
           

              ' Using this information, create an UPDATE command that
              ' changes the Size and stock levels.
           
Dim UpdateCommand  As String
    
UpdateCommand = UpdateCommand = "UPDATE Taille_Stock SET [MAJ Quantite] = Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille

              ' Run the command.
       
 CurrentDb.Execute UpdateCommand

              ' Move to the next order item (if there is one).
         
 Recordset.MoveNext

      
 Loop

           ' Time to clean up.
      
 Recordset.Close
      
Exit_Block:

    
  Exit Sub

DataAccessError:

           ' You only get here if an error occured.
           ' Show the error.
        MsgBox Err.Description
        Resume Exit_Block

    End Sub
-------------------------------------------------------------------------

Quelqu'un pourrais me dire ou se trouve le problem SVP?

Merci à toute les bonnes volontés

Health & Peace


dimanche 30 mars 2008 à 12:44:05 | Re : Recordset, Pour mise à jour d'un champ, Probleme

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Salut,

Si tu travaille sous Access (et donc en VBA), pourquoi tu poste dans le forum VB2005 qui n'a absolument rien à voir ???

Je déplace vers le forum approprié !
______________________________________
DarK Sidious
dimanche 30 mars 2008 à 13:58:52 | Re : Recordset, Pour mise à jour d'un champ, Probleme

Exploreur

Membre Club
Salut,

Est-ce normal cela :

UpdateCommand = UpdateCommand = "UPDATE.......... ?

A+
Exploreur

 Linux a un noyau, Windows un pépin

dimanche 30 mars 2008 à 14:06:07 | Re : Recordset, Pour mise à jour d'un champ, Probleme

LIBRE_MAX

Bonjour,
aucune idée sur le problème mais une suggestion.
Si tu comptes utiliser un recordset, autant en utiliser deux.

L' un vers TaillesStock, tu récupère la reference et la taille.
(vRefernce, vTaille)
L' autre vers Selection de vente where Reference=vRefernce et Taille=vTaille order by Date.

Et dans une boucle tu parcours Rs1 , et dans une autre Rs2,
et tu met à jour TailleStock.MAJQte à chaque itération

ps: n' oublies pas ma réponse dans l' ancien topic.
                        



... Y'en a même qui disent qu'ils l'ont vu voler.

/PRE>

dimanche 30 mars 2008 à 14:22:06 | Re : Recordset, Pour mise à jour d'un champ, Probleme

sbeihassen



sbeihassen

les mot en gras sont les codes correctes


Private Sub Form_AfterUpdate()


        ' If an error occurs, jump down to the DataAccessError section.
        
On Error GoTo DataAccessError

          ' Create a SELECT command.
 Dim Query As String

 Query = "SELECT Reference, Taille, Quantite FROM Vente ici il vous monque la codition WHERE"

          ' Get a recordset using this command.

 Dim RS As DAO.Recordset

 Set RS = CurrentDb.OpenRecordset(Query)

  ' Move through the recordset, looking at each record.
  ' Each record is a separate item in the order.
       
 Do Until Recordset.EOF

              ' For each item, get the product ID and quantity details.
            

 

Dim vReference As String

Dim vTaille    As String

Dim vQuantite  As Long


        
 vReference = Recordset.fields("Reference")
          
 vTaille = Recordset.fields("Taille")
           
 vQuantite = Recordset.fields("Quantite")
           

              ' Using this information, create an UPDATE command that
              ' changes the Size and stock levels.
           
Dim UpdateCommand  As String
    
UpdateCommand = "UPDATE Taille_Stock SET [MAJ_Quantite] = Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille

              ' Run the command.
       
 CurrentDb.Execute UpdateCommand

              ' Move to the next order item (if there is one).
         
 Recordset.MoveNext

      
 Loop

           ' Time to clean up.
      
 Recordset.Close
      
Exit_Block:

    
  Exit Sub

DataAccessError:

           ' You only get here if an error occured.
           ' Show the error.
        MsgBox Err.Description
        Resume Exit_Block

    End Sub

dimanche 30 mars 2008 à 15:02:46 | Re : Recordset, Pour mise à jour d'un champ, Probleme

Exploreur

Membre Club
Re,

Rajoutons pour être plus clair :

Recordset.fields("Reference").Value

A+
Exploreur

 Linux a un noyau, Windows un pépin

dimanche 30 mars 2008 à 15:46:34 | Re : Recordset, Pour mise à jour d'un champ, Probleme

LIBRE_MAX

SELECT Reference, Taille, Quantite FROM Vente ici il vous monque la codition WHERE...
te renvoie plusieurs lignes.
TaillesStock quantité va être mise à jour par quelle quantité de vente  avec ta requete  "Update TailleStock.... ???
vReference=Reference And vQuantité=Quantite ne suffisentt pas.



... Y'en a même qui disent qu'ils l'ont vu voler.

/PRE>
lundi 31 mars 2008 à 20:21:42 | Re : Recordset, Pour mise à jour d'un champ, Probleme

good speed

Salut,

Merci pour vos reponses,

Malheureusement,  j'ai fais les modifications suggérées de votre part mais toujours pareil, càd, ni erreur, ni changement sur [Taille Stock]![MAJ Quantite]
voici le code, en rouge les modifications:
---------------------------------------------------------------------------------------------------
Private Sub Form_AfterUpdate()

        ' If an error occurs, jump down to the DataAccessError section.
        
On Error GoTo DataAccessError

          ' Create a SELECT command.
 Dim Query As String

 Query = "SELECT Reference, Taille, Quantite FROM Vente WHERE Reference =" & Me.Reference & "and Taille =" & Me.Taille

          ' Get a recordset using this command.

 Dim RS As DAO.Recordset

 Set RS = CurrentDb.OpenRecordset(Query)

  ' Move through the recordset, looking at each record.
  ' Each record is a separate item in the order.
       
 Do Until Recordset.EOF

              ' For each item, get the product ID and quantity details.
            



Dim vReference As String

Dim vTaille    As String

Dim vQuantite  As Long


        
 vReference = Recordset.Fields("Reference").Value
          
 vTaille = Recordset.Fields("Taille").Value
           
 vQuantite = Recordset.Fields("Quantite").Value
 
           

              ' Using this information, create an UPDATE command that
              ' changes the Size and stock levels.
           
Dim UpdateCommand  As String
     ' de moi meme j'ai aussi changé Taille_Stock en [Taille Stock]
UpdateCommand = "UPDATE [Taille Stock] SET [MAJ Quantite] = Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille

              ' Run the command.
       
 CurrentDb.Execute UpdateCommand

              ' Move to the next order item (if there is one).
         
 Recordset.MoveNext

      
 Loop

           ' Time to clean up.
      
 Recordset.Close
      
Exit_Block:

    
  Exit Sub

DataAccessError:

           ' You only get here if an error occured.
           ' Show the error.
        MsgBox Err.Description
        Resume Exit_Block

End Sub
---------------------------------------------------------------------------------------------------

Libre_Max: j'ai pas compris comment utiliser deux recordset pour mon cas.
Aussi, la requete mise à jour ...

UpdateCommand = "UPDATE Taille_Stock SET [MAJ Quantite] = Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille

Est sensée mettre à jour [Taille Stock]![MAJ Quantite] en  deduisant le recordset vQuantite de
[Taille Stock]![Quantite] et ce, seulement quand les deux conditions sont reunies càd
WHERE Reference =" & vReference And "Taille =" & vTaille

Exple:  Voir les tables du projets  plus haut...

Quand :
Vente.Reference = Ref1  et  Vente.Taille = 3940  ( c'est la taille d'une chemise, juste pour info)
on voit que  Quantite = 1
et à ce stade dans le code  ces données sont sensées etre regroupées ainsi :
vReference = Ref1
vTaille = 3940
vQuantite = 1
Alors Apres que le rcordset a parcouru cet enregistrement 

Mise à jour requise de ACCESS  ( s'il veut bien)

Je demande à access de mettre à jour [MAJ Quantite]  comme suit:

[Taille Stock]![MAJ Quantite] = [Taille Stock]![Quantite] - vQuantite
numeriquement:                       =          8                            -     1

Voilà j'espere que ca vous aidera  afin que vous me aidiez  à resoudre cette enigme que j'ai posté meme
dans des forums anglais en vain.

Merci à toutes les bonnes volontées.   






Health & Peace
lundi 31 mars 2008 à 20:39:50 | Re : Recordset, Pour mise à jour d'un champ, Probleme

LIBRE_MAX

Bonsoir,

"SELECT Reference, Taille, Quantite FROM Vente WHERE Reference =" & Me.Reference & "and Taille =" & Me.Taille

te renvoies
1 02/03/2008 Ref1 3940 1
4 03/03/2008 Ref1 3940 2

si vReference=Ref1 et vTaille=3940

Quand tu lui dis de mettre à jour TaillesStock en ajoutant Quantité,
il ne sait pas si c' est celle de la première ligne ou la deuxième.
(imagines ensuite si tu as plusieurs ventes de la même  Ref et la même taille.)

Et donc tu dois trier le résultat de ta requete sur l' ordre de vente TdVente.Puis parcourir cette requete et lire lire par ligne et mettre à jour TailleStock avec la quantité de la ligne courante.
C' est ça le RS2 dont je parlais.
Au lieu donc de ta requete mise à jour tu fais un Edit puis update
à chaque itération de la boucle RS2 imbriquée.

ps: tu te souviens de SommeDeQte ?
Eh bien la requete regroupement te renvoie une ligne par ref et taille.

Mais question:
Pourquoi tu ne mets pas à jour TailleStock.Quantité au moment de la vente ?
Quand tu es sur un BL, tu n' as qu' une ligne par Ref et Taille.

                        



... Y'en a même qui disent qu'ils l'ont vu voler.

/PRE>

jeudi 3 avril 2008 à 20:27:03 | Re : Recordset, Pour mise à jour d'un champ, Probleme

good speed


Bonsoir,

Justement comme tu me l'as preconisé en dernier,  c'est comme ca que j'ai  procedé, car sur mon formulaire
j'ai  Reference,  Taille,  Quantite  et autres données et  donc les enregistrements sont traités un par un  or  la procedure n'est appelées à s'executer qu'apres validation de chaque operation, et qu'apres avoir seulement appuyé sur le bouton suivant  lequel marque  l'evenement " Mis à Jour"  et moi j'appel la procedure sur l'evenement " Apres mise à jour"
Donc sur Apres mise à jour  j'ai qu'une seule ligne d'enregistrement or je precise à  ACCESS  de selectionner : Query = "SELECT Reference, Taille, Quantite FROM VenteWHERE Reference =" & Me.Reference & "and Taille =" & Me.Taille

et en utilisant les donnés de cette selection  de mettre à jour la table taille_Stock  :
UpdateCommand = "UPDATE [Taille Stock] SET [MAJ Quantite] = Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille



Et comme tu peux bien le voir la condition where est la meme pour la Requete selection et Requete mise à jour, et comme je l'ai mentionné plus haut, sur le formulaire les données sont Affichées et traitées ligne par ligne, et enregistrement par enregistrement.

Pour la requete Tdvente que tu me preconise de créer j'ai bien compris  comment faire, mais pour l'utiliser dans un 2em RS j'ai du mal à voir surtout que je comprends pas ...à chaque itération de la boucle RS2 imbriquée, et puis entre nous,  un RS  ca passe pas alors deux!

Merci mon ami



PS:  c'est par erreur si j'ai pas posté mon probleme sur le bon forum, mais comme la discussion est déjà entammée et que c'est souvent notre ami  Libre_Max qui repond alors je prefere rester enocre sur se forum, si ca vous derange pas biensur.

Health & Peace

1 2

Cette discussion est classée dans : taille, recordset, jour, stock, quantite


Répondre à ce message

Sujets en rapport avec ce message

Mise à jour d'une table à partire d'un formulaire avec VB [ par good speed ] Bonjour,Voilà je suis entrain de preparer une modeste application pour la gestion du magasin de pret à porter dans lequel je travails,  et je trouves Temps de mise a jour d'un recordset [ par SYL666 ] Bonjour et merci de lire ceci.Voila mon probleme:une met a jour une base de donnees en passant par un recordset. le probleme, c'est que la base de don mise à jour automatique du stock [ par perso2008 ] automatiser la mise a jour automatique du stock après saisie des quantités achats ou vents. la saisie de la qteachat ou la qtevente doit incrementer l vergule [ par fakass ] salut ,j'ai un probleme avec ma base donne acces j'ai un tableau stock et un champ quantite_s qui donne la quantite existe de stock alors le probleme  pb mise à jour d'un champ à partir du recordset [ par william the new ] Je voudrais mettre à jour un champ de ma tablemais avec mon code g droit à l'erreur3021, qui me dit :BOF ou EOF = true ou l'enregistrement actuel a ét Mise à jour de données sous SQLSERVEUR via un Recordset ADODB [ par YopMaster ] Voici le code que j'utilise pour créer un enregistrement dans un table SQL serveur via un objet recordset :Public CoLilas As New ADODB.Connection 'P Filter et AbsolutePosition [ par JRN ] Bonjour,Comment faire pour mettre a jour l' AbsolutePosition d'un recordset lorsqu'on effectue un Filter ?ExempleJ'ouvre un recordset sur 10 enregistr Acceder à un champ recordset paramétré [ par jyvaut75 ] Bonjour,Dans une appli en cours de développement, je créé une table dont les noms de champ peuvent varier. J'explique déjà cette partie: je rentre une


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales