OVH Cloud OVH Cloud

Mise a jour "au vol" d'un recordset

6 réponses
Avatar
gafish
Bonjour,

Je suis en train de faire un ActiveX en VB sous SQL=20
Server, et dans celui-ci je cr=E9e un recordset sur une=20
table de SQL.
Ce recordset est donc cr=E9=E9 comme cela :
MonRst =3D CreateObject("ADODB.Recordset")=20
et instanci=E9 par un open avec ma connection =E0 la base.

Mon probl=E8me est que lorsque je parcours dans mon code mon=20
recordset par un "Do While not MonRst.EOF" j'aimerai en=20
plein milieu de ma boucle mettre =E0 jour ce recordset.=20
Si je fais un update sur ma table, il n'est bien sur pas=20
pris en compte dans mon recordset. Un MonRst.Edit est=20
refus=E9, puis-je d=E9clarer un recordset =E9ditable pour palier=20
ce probl=E8me ?
Je pourrai fermer et rouvrir mon recordset apr=E8s l'update,=20
mais cela m'embete car je ne voudrai pas perdre mon=20
positionnement sur celui-ci.

Avez vous des solutions ?

Merci beaucoup d'avance !

Arnaud

6 réponses

Avatar
Zoury
Salut Gafish!

puis-je déclarer un recordset éditable pour palier
ce problème ?



Yep! Je ne sais pas comment tu l'ouvres présentement, mais lit ce document
il devrait t'aider à comprendre les différents type de curseur..
http://support.microsoft.com/directory/worldwide/fr/white/adocurs.doc



--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Himselff
Tu peux toujours updater live ta base de donnee, il sagit juste au lieu de
faire :

myRecordSet.update

myupdate = "UPDATE " & selection & " Set qty = qty + " & TxtQty.Text & "
Where backer =" & boite & ""
mySQL.Execute (myupdate)

Tu peux le faire ou tu veux sans necessairement avoir access a ton record
set a part comme pointeur sur le bon record avec lautre type de update !

La formule est "Update (nom de la table) set (champ) = (donnee) where
(Identificatieur dans la base) = (endroit que pointe ton record set)"

Jespere que cest claire , sinon esite pas ! =)

Fred

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: #
Salut Gafish!

> puis-je déclarer un recordset éditable pour palier
> ce problème ?

Yep! Je ne sais pas comment tu l'ouvres présentement, mais lit ce document
il devrait t'aider à comprendre les différents type de curseur..
http://support.microsoft.com/directory/worldwide/fr/white/adocurs.doc



--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Zoury
Salut! :O)

Tu peux toujours updater live ta base de donnee, il sagit juste au lieu de
faire :



si le recordset est ouvert en lecture seul, ce ne sera pas possible, une
erreur sera levée..



myRecordSet.update

myupdate = "UPDATE " & selection & " Set qty = qty + " & TxtQty.Text & "
Where backer =" & boite & ""
mySQL.Execute (myupdate)



Tu mélanges 2 techniques dans ton exemple... l'appel de la fonction Update
et dans ce cas ci est inutile..

la première ligne de code fait la mise à jour des données par
l'intermédiaire de l'objet Recordset et ne fonctionne par si le curseur du
dit recordset n'est correctement initialisé.

Voici un exemple de la syntaxe à utiliser avec Update :
http://msdn.microsoft.com/library/en-us/ado270/htm/mdmthupdatex.asp


la deuxième ligne de code n'est vraiment qu'une requête SQL exécuté sur une
base de données, ce qui peut être exécuté de manière indépendamment du
recordset. Suite à la requête Update, il faudra refaire une requête Select
afin de récupérer les données mises à jour dans le Recordset...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Himselff
Hehe , je crois que ta pas vraiment lu sont post, il loop deja dans son
recordset et rendu a tel place (pointeur) il veut l'updater , donc je ne
vois aucune autre facon de mettre a jour les donnner dans sa base !

My 2 cents =)

Fred

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: #7$
Salut! :O)

> Tu peux toujours updater live ta base de donnee, il sagit juste au lieu


de
> faire :

si le recordset est ouvert en lecture seul, ce ne sera pas possible, une
erreur sera levée..



> myRecordSet.update
>
> myupdate = "UPDATE " & selection & " Set qty = qty + " & TxtQty.Text & "
> Where backer =" & boite & ""
> mySQL.Execute (myupdate)

Tu mélanges 2 techniques dans ton exemple... l'appel de la fonction Update
et dans ce cas ci est inutile..

la première ligne de code fait la mise à jour des données par
l'intermédiaire de l'objet Recordset et ne fonctionne par si le curseur du
dit recordset n'est correctement initialisé.

Voici un exemple de la syntaxe à utiliser avec Update :
http://msdn.microsoft.com/library/en-us/ado270/htm/mdmthupdatex.asp


la deuxième ligne de code n'est vraiment qu'une requête SQL exécuté sur


une
base de données, ce qui peut être exécuté de manière indépendamment du
recordset. Suite à la requête Update, il faudra refaire une requête Select
afin de récupérer les données mises à jour dans le Recordset...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Zoury
> Hehe , je crois que ta pas vraiment lu sont post, il loop deja dans son
recordset et rendu a tel place (pointeur) il veut l'updater , donc je ne
vois aucune autre facon de mettre a jour les donnner dans sa base !



hmm... je crois que t'as pas lu le mien.. ;O)
je ne dit pas que d'utiliser l'une ou l'autre des méthodes est incorrecte ou
inaproprié dans ce cas, je voulais seulement te faire remarquer que tu
mélanges 2 façons de faire... Il faudrait en choisir une des 2...

exemple par Update (le rs est ouvert avec adOpenKeyset et adLockOptimistic)
'***
' Met à jour le champs Nom de chaque enregistrement du recordset
Do Until rs.EOF

rs.Fields("Nom").Value = ""
Call rs.Update

Call rs.MoveNext
Loop
'***

ainsi aucune requête n'est nécessaire et le recordset reste à jour...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Gafish
Merci à vous deux pour votre aide !
Je vais aller regarder la page sur les types de curseur !

Merci encore ! :)

-----Message d'origine-----
Hehe , je crois que ta pas vraiment lu sont post, il




loop deja dans son
recordset et rendu a tel place (pointeur) il veut




l'updater , donc je ne
vois aucune autre facon de mettre a jour les donnner




dans sa base !

hmm... je crois que t'as pas lu le mien.. ;O)
je ne dit pas que d'utiliser l'une ou l'autre des


méthodes est incorrecte ou
inaproprié dans ce cas, je voulais seulement te faire


remarquer que tu
mélanges 2 façons de faire... Il faudrait en choisir une


des 2...

exemple par Update (le rs est ouvert avec adOpenKeyset et


adLockOptimistic)
'***
' Met à jour le champs Nom de chaque enregistrement


du recordset
Do Until rs.EOF

rs.Fields("Nom").Value = ""
Call rs.Update

Call rs.MoveNext
Loop
'***

ainsi aucune requête n'est nécessaire et le recordset


reste à jour...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -


http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire


profiter à tous


.