VB6 ADO Erreur avec Update du Recordset

Signaler
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Bonjour tout le monde,

Bon alors voilà j'ai vraiment un gros problème et il est très urgent que je trouve une solution pour le résoudre :(

J'ai une application VB6 qui attaque une base de données Access 2000 qui contient des tables liées à une base MySQL.
Dans un module de l'application j'utilise un Recordset ADO. Ce Recordset est utilisé soit pour mettre à jour un enregistrement s'il existe soit pour l'ajouter. Mais j'ai un problème (sûrement venant du faire que les tables sont liées) : Les .AddNew fonctionnent, la suppression idem mais par contre le .Update sans .AddNew ne fonctionne pas et l'erreur est la suivante :

Erreur N°: -2147217887
Message : Le moteur de base de données Microsoft Jet a arrêté le traitement parce que vous et un autre utilisateur tentez de modifier les mêmes données en même temps.

Voici le code (très simple) :sql "SELECT * FROM  [CON_Virements Reçus_6] Where [ID] '000000000...0000099'"
ADO_OpenRecordset ADO_Altorem, sql, rs, "Virements_Enregistrer", adOpenDynamic, dbOptimistic
        rs("IDSOC") = Force2Num(.LB_IDSOC)
        rs("IDBNK") = Force2Num(.SCB_BNK.SelID)
        rs("NomBNK") = StringOrNull(.SCB_BNK.SelText)
        rs("CompteBNK") = StringOrNull(.SCB_CMPT.SelID)
        rs("EqvCompta") = StringOrNull(.TB_LIBCMPT)
        rs("Date") = Force2Date(CDate(.TB_DATE))
        rs("Banque") = StringOrNull(Trim(.SCB_BANQUE.Text))
        rs("Agence") = StringOrNull(.TB_AGENCE)
        rs("Emetteur") = StringOrNull(.TB_EMETTEUR)
        rs("Commentaire") = StringOrNull(.TB_COM)
        rs("Montant") = Force2Num(.TB_MONTANT)
        rs("EstAnnulé") = Force2Bool(EstAnnulé)
        rs("EstImputCli") = Force2Bool(RB_IMPUT(0).Value)
        rs("IDCLI") = Force2Num(.LB_IDCLI)
        rs("NumCompte") = StringOrNull(.TB_IMPUT)
        rs("Libellé") = StringOrNull(.TB_LIBIMPUT)
        rs("Etat") = StringOrNull(Etat)
CanCommit = ADO_UpdateRecord(rs)
La porcédure "ADO_UpdateRecord(rs)" étant une procédure qui appelle le .Update sur le recordset seulement elle retourne "True" ou "False" selon que la méthode .Update a pu s'exécuter ou non.

Alors voilà je galère vraiment depuis tout à l'heure alors si quelqu'un a une idée (je précise que sur une base Access ou la table CON_Virements Reçus_6 n'est pas liée cela fonctionne).

2 réponses

Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Salut,

        rs.addNew
        rs!IDSOC.value = Force2Num(.LB_IDSOC)
        rs!IDBNK.value = Force2Num(.SCB_BNK.SelID)
        rs!NomBNK.value = StringOrNull(.SCB_BNK.SelText)
        rs!CompteBNK.value= StringOrNull(.SCB_CMPT.SelID)
        rs!EqvCompta.value= StringOrNull(.TB_LIBCMPT)
        rs!Date.value = Force2Date(CDate(.TB_DATE))
        rs!Banque.value = StringOrNull(Trim(.SCB_BANQUE.Text))
        rs!Agence.value = StringOrNull(.TB_AGENCE)
        rs!Emetteur.value = StringOrNull(.TB_EMETTEUR)
        rs!Commentaire.value = StringOrNull(.TB_COM)
        rs!Montant.value = Force2Num(.TB_MONTANT)
        rs!EstAnnulé.value = Force2Bool(EstAnnulé)
        rs!EstImputCli.value = Force2Bool(RB_IMPUT(0).Value)
        rs!IDCLI.value = Force2Num(.LB_IDCLI)
        rs!NumCompte.value = StringOrNull(.TB_IMPUT)
        rs!Libellé.value = StringOrNull(.TB_LIBIMPUT)
        rs!Etat.value = StringOrNull(Etat)
        rs.update
Qu'est ce qui t'empêche de mettre le update juste la?
' CanCommit = ADO_UpdateRecord(rs)

slb..

---------------------------------------------------------------
Il faut beaucoup donner pour recevoir un tout petit peu...
---------------------------------------------------------------
Messages postés
16
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010

Bonjour, tout d'abord merci déjà d'avoir répondu.

Après pour le update en faite c'est parce qu'il faut que je sache justement s'il s'est bien exécuté ou non (c'est à dire que la fonction ADO_UpdateRecord(rs) retourne "True" si l'update s'est bien déroulé et "False" sinon. Pour cela, il y a un "On Error GoTo 1" et si on passe dans ce "On Error" c'est que le .Update n'a pas fonctionné et alors la fonction retourne "False". J'en ai besoin car justement tout se passe en transaction pour pouvoir RollBack au cas ou.)

En fait je pense avoir trouvé la source du problème mais je ne sais vraiment pas du tout comment le régler...

Après avoir cherché et cherché et cherché, je me suis rendu compte qu'en fait en passant par la base de données Access et en ouvrant la table liée, celle-ci est (par le plus grand des miracles) en lecture seul O.O je ne peut absolument rien modifier aucune ligne (je peut toutefois ajouter de nouvelles lignes)... C'est à n'y rien comprendre (ça m'avait déjà fait le problème mais sur des tables qui n'avaient pas de clé primaire et en ajoutant une clé primaire le problème disparaissait mais la la table a déjà une clé primaire quand elle est importée...)