cs_dan24
Messages postés39Date d'inscriptionlundi 9 février 2004StatutMembreDernière intervention15 avril 2005
-
6 avril 2005 à 19:14
cs_dan24
Messages postés39Date d'inscriptionlundi 9 février 2004StatutMembreDernière intervention15 avril 2005
-
7 avril 2005 à 17:31
Bonjour,
J'ai ce code :
Public Sub RemplirDgProduits()
With FrmStock
Set rsRemplirDgProduits = New ADODB.Recordset rsRemplirDgProduits.Open "SELECT P.*, E.EMB_UNITE FROM PRODUIT P, EMBALLAGE E WHERE E.EMB_NO P.PROD_EMB_NO AND P.PROD_TP_NO " & .typeSelectionne & " ORDER BY P.PROD_NOM", frmPrincipale.bdd, adOpenStatic, adLockBatchOptimistic
'Cette boucle sert à calculer la quantité actuelle pour chaque produit et l'insère (ou devrait normalement l'insérer) dans la bdd au niveau du champ "PROD_STOCK_ACTUEL" qui est donc un champ calculé
For i = 0 To rsRemplirDgProduits.RecordCount - 1
Là il y a normalement un code assez long pour calculer la quantité actuelle (rsCalculQteActuelle!STOCK_ACTUEL) du produit en cours. Je vous l'épargne d'autant plus qu'il fonctionne.
rsRemplirDgProduits.Fields("PROD_STOCK_ACTUEL") = rsCalculQteActuelle!STOCK_ACTUEL
rsRemplirDgProduits.Update
rsRemplirDgProduits.MoveNext
Next
Set .dgProduits.DataSource = rsRemplirDgProduits
.dgProduits.Refresh
End With
End Sub
Le code marche parfaitement. Tout s'affiche nickel dans le datagrid dgProduits quand j'exécute le prog. Par contre, quand je vais voir dans la bdd, les modifications au niveau de "PROD_STOCK_ACTUEL" n'apparaissent pas. Le champ est à null pour tous les enregistrements. Je sais que normalement les champs calculés ne se mettent pas dans la bdd mais j'avais besoin de le faire apparaître dans le datagrid dgProduits. Tout ce que j'aimerais qu'on m'explique c'est pourquoi les modifs ne restent pas dans la bdd et comment faire pour qu'elles restent ?
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 7 avril 2005 à 11:10
Tu devrais essayer de définir ton curseur de cette façon adOpenDynamic au lieu de
adOpenStatic
Statique (adOpenStatic)
Position : Oui
Défilement : Bidirectionnel
Sensibilité : Pas de mise à jour des données modifiées
Copie de données. Les curseurs côté client sont toujours statiques.
Dynamique (adOpenDynamic)
Position : Oui
Défilement : Bidirectionnel
Sensibilité : Reflète toutes les modifications de données ainsi que les enregistrements ajoutés ou supprimés par d'autres utilisateurs
Ce poids lourd des curseurs, uniquement serveur, n'est pas supporté par tous les fournisseurs.
cs_dan24
Messages postés39Date d'inscriptionlundi 9 février 2004StatutMembreDernière intervention15 avril 2005 7 avril 2005 à 17:31
Merci pour ta réponse mais quand je met le curseur à adOpenDynamic ou a adOpenForwardOnly, "rsRemplirDgProduits.RecordCount" est égal à -1 comme s'il n'y avait pas d'enregistrements dans mon recordset et du coup il y a un bug (erreur 7004 : "Le jeu d'enregistrements ne peut pas prendre en compte les signets") au niveau de ".dgProduits.DataSource = rsRemplirDgProduits". Par conséquent, je suis obligé de mettre adOpenKeyset ou adOpenStatic.