Erreur '80040e38'

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 31 oct. 2011 à 15:29
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 1 nov. 2011 à 07:43
Bonjour à tous,

Dans une appli, une textbox se remplit par le réalisateur d'un film. Les réalisateurs étant dans une table dédiée, j'ai écrit une DLL générique qui permet de sélectionner un item dans une table (pour être plus clair, la DLL permet de sélectionner soit le réalisateur, soit le producteur, le scénariste, etc...) en passant un recordset dans lequel sélectionner. Cette DLL permet aussi des recherches, de modifier le nom (son orthographe) ou d'en ajouter un.

C'est ce dernier cas qui pose problème. En interne, la DLL gère une texbox de saisie du nom, ajoute ce nom dans la table et envoie un évènement qui permet éventuellement de modifier d'autres champs (date et lieu de naissance par exemple). L'ajout dans la DLL se fait sans problème, mais la modification ultérieure dans l'appli appelante renvoie une erreur '80040e38', la ligne a été modifiée où ne peut pas être trouvée pour la mise à jour.

Voici mon code:
Dans la DLL:
 
' ici un évènement AVANT permettant l'annulation éventuelle, un test d'existence, eztc...                 
p_rstItems.AddNew                  p_rstItems.Fields(nomItem).Value = Trim(txtGetNew.Text)
p_rstItems.Update
p_lngCurrentID = (je récupère l'ID ainsi créee                                  
' Ici un évènement APRES dans lequel je modifie les champs voulus


et dans mon appli le code de l'évènement après
   With rstStarsList
'Mise à jour des champs SAUF l'ID (évidemment) et le nom, géré par la DLL.
   end With
.Update                    


C'est l'Update qui me renvoie l'erreur. Toutes mes recherches sur Internet disent peu ou prou que l'enregistrement a changé (ce qui n'est pas vrai dans mon cas), mais tous les essais de repositionnement avant, d'UpdateBatch, de Committrans (je n'ai pas de transaction) n'ont rien donné.
Un site avait l'air de dire que c'était parce que la modif était initialisée (Ajout) dans un processus et que la mise à jour subséquent était faite dans un autre processus (le processus parent en fait).

Dernière précision, si je supprime le .ADDNew, je n'ai pas de problème, pais évidemment je mets à jour le mauvais enregistrement !

Si quelqu'un avait une solution ou une idée, là je ne vois plus rien.

Merci pour vos réponses.


Calade

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 oct. 2011 à 19:42
Salut

Complexe.

Si j'ai bien compris, tu manipules une même table depuis plusieurs logiciels : Ton programme et ta DLL ?
p_rstItems et rstStarsList pointent sur la même table ?

Quelle donnée ton programme transmet-il à ta DLL ? du texte ou un RecordSet ?

ADO ou DAO ?
DAO est à bannir

Vérifie que tu rafraichis (recharges) le contenu de ton RecordSet avant d'essayer de faire un AddItem.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
1 nov. 2011 à 07:43
Salut et merci de ta réponse,

Non ce n'est pas si complexe que ça. Dans beaucoup de programmes, certains champs se remplissent à partir du contenu d'une autre table (dans mon cas les réalisateurs d'un film).
J'ai donc pensé à réunir dans une DLL tout ce qui peut servir à cette sélection.

Pour répondre à tes questions:
les DB sont en SQL Server 2000, moteur ADO 2.8.
Je passe à ma DLL un recordset déjà tout constitué et à laquelle j'indique en plus le ou les champs à afficher dans une Grid de sélection. S'il s'agit d'un item inexistant dans ma table (dans mon cas un nouveau réalisateur), je le rajoute dans ma DLL, le sélectionne et sors. Jusque là, tout marche nickel, le problème vient si j'ai des infos autres à ajouter (sa date et lieu de naissance par exemple), seul mon programme le sait et les rajoute et à l'update, erreur.

Il faut savoir que depuis plus de 10 ans j'utilise le même principe (une DLL) pour ce genre de choses, mais ayant été écrite quand je débutais, j'ai décidé de la réécrire un peu plus moderne.

J'essaye de voir quelles sont les différences qui font que je plante maintenant, mais pour l'instant chou blanc.


Calade
0
Rejoignez-nous