Personne ne maitrise "UPDATE" d'ADO ?

ruth -  
 Larbi -
Bonjour à tous!!
SVP je me permets de vous reponser mon probleme;
svp je fais un update sur un objet ADODB.recordset sur vb6 (pour modifier les valeurs contenues dans une colonne ,les diviser par 3 ).
J'obtient comme erreur:
"Row cannot be located for updating. Some values may have been changed since it was last read". erreur numero -2147217864
au moment ou je fais un movenext (pr modifier la ligne suivante)!!
SVP voyez vous ou il ya probleme?
merci!!

8 réponses

  1. blux Messages postés 5039 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    ben a priori, tes valeurs ont été modifiées entre le temps où tu les as lues et celui où tu veux les récrire... Peut-être même qu'elles n'existent plus...

    c'est quoi comme base ?
    elle est multi-user ?

    y'a pas des sessions/transactions du genre rollback, commit ?

    A+ Blux "Les cons, ça ose tout.
    C'est même à ça qu'on les reconnait"
    0
  2. ruth
     
    Salut!
    C'est une base oracle 8 ;elle n'est pas multi user!
    il n'y'a pas des sessions/transactions du genre rollback, commit !!
    meme en faisant un requery sur mon recorset pr rafraichissement ,le meme probleme se pose;
    bien sur je peux executer une requete du gere "UPDATE...." sur chacune des 10 0000 lignes de ma table pr mettre à jour une colonne ,mais cette opération prendrait beaucout plus de temps...
    voila pourqoui je souhaite faire une seule connection en ouvrant un rst et en utilisant update!
    Merci
    0
  3. blux Messages postés 5039 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    euh si je puis me permettre, un UPDATE en SQL durerait moins longtemps, puisque dans ce cas, il envoie le SQL à ORACLE qui lance une seule requête, alors que dans le cas d'un recordset avec movenext, il y a autant d'envois de modifs que de movenext.

    et on dira ce qu'on voudra, ORACLE va verouiller la table/ligne avant de faire la mise à jour puis libérer si OK et ça 10000 fois s'il le faut... alors qu'avec UPDATE en SQL, il va verrouiller une seule fois et faire son commit à la fin...

    mais bon, c'est juste mon avis... :-)

    A+ Blux "Les cons, ça ose tout.
    C'est même à ça qu'on les reconnait"
    0
  4. deus Messages postés 93 Statut Membre 91
     
    Salut ruth,

    Je suis d'accord avec Blux.
    Néanmoins pour répondre à ta question, l'idée est que tu dois "rafraichir" les données de ton recordset.
    ex :
    "Private Sub SaveMailing()
    rst1.Fields("MailingSourceHtml") = TxtHtmlSource.Text
    rst1.Fields("Beschrijving") = TxtBesch.Text
    rst1.Fields("ModifyDate") = Now()
    rst1.Update
    End Sub"

    Quand j'appuyais 2 x de suite sur cette commande, VB me retournait la même erreur que toi. La solution a été de rajouter rst1.Requery :
    "
    Private Sub SaveMailing()
    rst1.Fields("MailingSourceHtml") = TxtHtmlSource.Text
    rst1.Fields("Beschrijving") = TxtBesch.Text
    rst1.Fields("ModifyDate") = Now()
    rst1.Update
    rst1.Requery
    End Sub
    "
    J'espère que ca t'aura aidé.

    dEUS
    There's no success like failure
    And failure's no success at all
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ruth
     
    SVP pour diviser toute les valeur d'un champ par une constante n'ya til pas moyen de le faire directement par une requete sql du genre:
    "UPDATE customer SET Macolone = macolone/5"?
    Merci
    0
    1. blux Messages postés 5039 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      bien sûr que si !
      c'est ce que j'ai suggéré en disant qu'UNE seule requête pouvait le faire... :-)

      A+ Blux "Les cons, ça ose tout.
      C'est même à ça qu'on les reconnait"
      0
  7. ruth
     
    OK merci deus ! je teste ta proposition
    Merci
    0
  8. ruth
     
    en faisant:
    do while rst1.eof=false
    .....
    rst1.Update
    rst1.Requery
    rst1.movenext 'pr passer la modif de ligne suivante
    loop

    la meme erreur se produit des le premier update
    0
  9. Larbi
     
    Pour mettre a jour votre recordset avec Update (dans votre cas) , et eviter ce message, ajouter 1 cle ou 1 identite a votre table,
    car la ligne doit etre identifiee pour etre mise a jour.
    0