Mise à jour, update impossible

cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 8 juil. 2004 à 17:40
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 17 juil. 2004 à 12:48
Bonjour à tous,

J'ai un petit problème que j'ai du mal à comprendre.

Voilà le code (je n'ai pas mis les déclarations de variable, le problème ne venant pas de là)

Public Sub SelectionnerMedicament()
ReDim tblSelec(1) As String

With frmMedicament
r = 0

For i = 0 To .lbMedicament.ListCount - 1
If .lbMedicament.Selected(i) Then
tblSelec(r) = .lbMedicament.List(i)
r = r + 1
ReDim Preserve tblSelec(r) As String
End If
Next

Set rsSelectionnerMedicament = New ADODB.Recordset
rsSelectionnerMedicament.CursorType = adOpenDynamic
rsSelectionnerMedicament.LockType = adLockPessimistic

For r = 0 To UBound(tblSelec) - 1 rsSelectionnerMedicament.Open "select M.*, EUP.* from MEDICAMENT M, EST_UTILISE_POUR EUP where EUP.EUP_MEDIC_NO M.MEDIC_NO and EUP.EUP_SYMP_NO " & frmSymptome.efSympNo, mdlLogin.bdd
rsSelectionnerMedicament.AddNew
rsSelectionnerMedicament.Fields("MEDIC_NOM") = tblSelec(r)
rsSelectionnerMedicament.Update
rsSelectionnerMedicament.Close
Next

End With
End Sub

En fait, c'est assez simple.

Dans un premier temps, je passe en revue les éléments sélectionnés de la liste lbMedicament et les insère dans un tableau dynamique tblSelec().

Ensuite, je paramètre mon recordset rsSelectionnerMedicament afin de pouvoir effectuer des mises à jour dans la bdd.

Enfin, une boucle passe en revue les éléments de mon tableau dynamique tblSelec() et les insère un par un dans la bdd.

Le problème c'est qu'une erreur apparait au niveau de "rsSelectionnerMedicament.Update":
Erreur -2147467259 "Mise à jour impossible. La base de données ou l'objet est en lecture seule."

Je ne vois pas pourquoi??

Merci pour votre aide

4 réponses

cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
9 juil. 2004 à 10:19
Tu as essayé de définir CursorType et LockType lors de la méthode Open au lieu de le faire avant ?
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
9 juil. 2004 à 15:30
Oui j'ai essayé mais j'ai toujours la même erreur
0
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
17 juil. 2004 à 11:51
Je pense que le fait de faire un select * sur les 2 tables M et E crée un jeu d'enregistrement non modifiable.
Il vaut mieux effectuer une jointure du genre :
select M.* from MEDICAMENT M INNER JOIN EST_UTILISE_POUR EUP ON M.MEDIC_NO=EUP.EUP_MEDIC_NO WHERE EUP.EUP_SYMP_NO = " & frmSymptome.efSympNo, mdlLogin.bdd

A tester...

Alain 31
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
17 juil. 2004 à 12:48
En fait j'ai trouvé le problème. Il venait bien de la requête.
Je sélectionnais tout de MEDICAMENT et tout de EST_UTILISE_POUR alors qu'en fait l'enregistrement que je voulait supprimer ne concernait que les champs de EST_UTILISE_POUR qui est par ailleurs une table d'association (avec deux clés à la fois primaires et étrangères : EUP_MEDIC_NO et EUP_SYMP_NO).

En effet, par la suite, il m'affichait le message d'erreur suivant : "Emplacement du curseur non valide; pas de jeu de clés défini".
Ce qui se passe, c'est que quand on fait une requête qui précède un delete, elle doit contenir uniquement les champs de la table concernée et doit pointer uniquement sur l'enregistrement qu'on veut supprimer.

Voilà ce qu'est devenue ma requête finalement:"select * from EST_UTILISE_POUR where EUP_MEDIC_NO " & frmSymptome.efMedicNo & " and EUP_SYMP_NO " & frmSymptome.efSympNo"

Et ça fonctionne.

Merci quand même asecher.
0
Rejoignez-nous