Could not update; currently locked

Messages postés
2
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
22 septembre 2006
-
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007
-
Bonjour tout le monde,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>











 







J’ai un problème avec une application VB qui utilise une DB Access 2000 (XP).







L’application fonctionnait correctement avant sous Windows NT4 avec un NT4 Serveur (plus de 3 ans sans problèmes) mais depuis que nous sommes passé sur XP pro  avec 2003Serveur, les utilisateurs rencontrent régulièrement (plusieurs fois par jour) l’erreur «Could not update ; currently locked ».








 






L’application et la DB se trouvent sur le même serveur dans des répertoires différents.






 






Voici une partie des références utilisées par le programme :





<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Microsoft ActiveX Data Objects 2.8 Library</li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Microsoft ActiveX Data Objects Recordset 2.8  Library</li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Microsoft ADO Ext 2.8 for DLL and Security</li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Microsoft Jet and replication Objects 2.6 Library</li>
<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Microsoft Remote Data Object 2.0</li>


Voici le code pour la connexion :




Public OADODB As ADODB.Connection


Public Cnxn As ADODB.Connection



 




Public Function AdoConnexionData() As Boolean




   

'* Cette fonction a pour but de créer la connexion vers la DB.






    '* En cas d'erreur, la fonction retourne FALSE.





 





    On Error GoTo AdoConnexionData_ERR



   







   
Set OADODB = Nothing



    Set OADODB = New ADODB.Connection



   






    With OADODB



        .Provider = "Microsoft.Jet.OLEDB.4.0"



       
.Properties("Jet OLEDB:DataBase Password") = "XXXXX"






       
.CursorLocation = adUseClient



        .Mode = adModeReadWrite



        .Open SDBDataPath



    End With



   






    If Not Err Then AdoConnexionData = True



    Exit Function



 




AdoConnexionData_ERR:



    AdoConnexionData = False



    MsgBox Err.Number & " - " & Err.Description, vbOKOnly, "AdoConnexionData"



End Function






 






Les requêtes se trouvent dans la DB et le programme exécute directement les requêtes en passant les paramètres lors de l’appel.






 






Voici une fonction d’ajout d’un enregistrement :




Public Function AjouterRDV() As Boolean



    On Error GoTo AjouterRDV_Error



   






    Dim SqlCmd As ADODB.Command



   
Dim RsAjouterRDV As ADODB.Recordset






   








    'Création de la commande






   
Set SqlCmd = New ADODB.Command



    Set SqlCmd.ActiveConnection = OADODB



    With SqlCmd



        .Properties("Jet OLEDB:STORED QUERY") = True



        .CommandText = "QAjouterRDV"



    End With



    Set RsAjouterRDV = New ADODB.Recordset



   






 


    With RDVdata



        Set RsAjouterRDV = SqlCmd.Execute(Parameters:=Array(.SDateRDV, _



                        .IAppStartTime, .IAppEndTime, .SDescriptionRDV, _



                        .LActivitiesIDRDV, .BRappelRDV, .BTentativeRDV, _



                        .bLocationRDV, .LLocationIDRDV, _



                        .SNoteRDV, .LUsersIDRDV, .STxtLastModificationRDV, _



     
                  .STxtCreationRDV, .LRDVGrpIdx, .SDateReminder, .ITimeReminder, .LDesk, .LMultiUsrGrpIdx))  



 End With



    AjouterRDV = True




  








    'Destruction des objets






   
Set RsAjouterRDV = Nothing



    Set SqlCmd = Nothing



    Exit Function



   





AjouterRDV_Error:



        MsgBox Err.Number & " - " & Err.Description, vbOKOnly, "AjouterRDV"



    AjouterRDV = False


End Function




 






Si quelqu’un à une idée je suis preneur car nous avons déjà essayé plusieurs solutions sans grand résultat.






 





Merci d’avance.




 

3 réponses

Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut,


Cela voudrait dire que la ou les tables impactées sont ouvertes en adLockPessimistic quelque part.
Messages postés
2
Date d'inscription
mardi 2 août 2005
Statut
Membre
Dernière intervention
22 septembre 2006

Merci pour la réponse,

J'ai ajouté le code ci-dessous à plusieurs endroits du programme et la réponse est tjrs adLockReadOnly (1)
       
    MsgBox "RsAjouterRDV.LockType : " & RsAjouterRDV.LockType & vbCrLf & _
        "adLockBatchOptimistic : " & adLockBatchOptimistic & vbCrLf & _
        "adLockOptimistic : " & adLockOptimistic & vbCrLf & _
        "adLockPessimistic : " & adLockPessimistic & vbCrLf & _
        "adLockReadOnly : " & adLockReadOnly
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

La table (ou l'une des tables) utilisée par RsAjouterRDV est donc ouverte en ReadOnly.
Regarde dans ton prog s'il n'y a pas une instruction qui fait ça. Ou alors la base est utilisée par un autre prog ? Ou quelqu'un travaille sur la base avec Access (c'est bien une base Access ?).