Erreur 3211 : table deja utilisé par une autre personne ou un autre processus !

clempepino Messages postés 3 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 12 mai 2009 - 12 mai 2009 à 16:00
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 12 mai 2009 à 20:49
 salut a tous !!!  

Je suis en ce momment en train de bosser sur un petit projet vba... Une partie de mon code est terminé mais une derniere erreur resiste toujours et encore a l'envahisseur ! ^^

Mon code est composé de plusieur boucle, dont une principale: Une boucle for.
Je vous copie mon code dessous ( il est tres loin d'etre pârfait ou terminé et s'est un vrai chantier !!)
--------------------------------------------------------------------------------------------------------------
Private Sub Bascule1_Click()
Dim db As DAO.Database, rs1, rs2, rs3, rs4, rs5, rs6, rs7 As DAO.Recordset
Set db = CurrentDb
Dim supr, crea, alt, del, mac, string_sql1, string_sql2, string_sql3, string_sql4, string_sql5, string_sql6, string_sql7 As String
Dim i, h, k, y As Long




' 3 tables nécessaires: Une premiere table contenant tout les sites Bibande: TableBibande
'Une deuxieme table servant a selectionné un site X afin de pouvoir le traité : TableBibandeSelectSite
'Le traitement nécessite une troisieme table permetant de stocké le resultat du traitement et de l'affiché a l'utilisateur: TableBibandeOutil
' La premiere boucle permet donc de selectionné dans tableBibande les Site un par un et on met le site concerné dans tableBibandeSelectSite
For i = 10001 To 78000 Step 1
    string_sql7 = " SELECT Count(tableBibande.Site) AS CompteDeSite, tableBibande.Site FROM tableBibande GROUP BY tableBibande.Site"
    Set rs7 = db.OpenRecordset(string_sql7)
    If (rs7.Fields("CompteDeSite").Value) <> 0 Then
    rs7.Close
    Set rs7 = Nothing
    MsgBox (i)
    'on teste que les site exite dans table Bibande
    
     crea = "macroCreation_tableBibandeSelectSite"
    DoCmd.RunMacro crea
     'On selection donc un site de valeur i
    'et On verifie que le site i existe    string_sql5 "insert into tableBibandeSelectSite (Site,Azimut, CID, Band) select Site, Azimut, CID, band from tableBibande where Site " & i & ""
    DoCmd.RunSQL (string_sql5)
    ' et on l'incere ans la table

    
    For k = 1 To 6 Step 1    'On selectionne un CID k et on compare son azimut et sa band a tout les autre CID h different de lui meme bien sur !
       
        For h = 1 To 6 Step 1
        If k <> h Then
       
        'ALTER TABLE [tableBibandeSelectSite] ADD num COUNTER ////permet de numeroté les lignes !!
'on crée les requete permetant de selectionner les azimut et la band et on les recupere dans les recordset


string_sql1 " select Site, Azimut, band from tableBibandeSelectSite where num " & k & " "string_sql2 " select Site, Azimut, band from tableBibandeSelectSite where num " & h & " "


'MsgBox (k)
'MsgBox (h)
'MsgBox (string_sql1)
'MsgBox (string_sql2)


Set rs2 = db.OpenRecordset(string_sql2)
Set rs1 = db.OpenRecordset(string_sql1)
'on compare les azimut et si il sont identique on lance la boucle de verification de band


If (rs1.Fields("Azimut").Value) = (rs2.Fields("Azimut").Value) Then
   
    'Si les azimute sont egaux on copie le parametre site dans "tableBibandeOutil"    
    If (rs1.Fields("band").Value) = (rs2.Fields("band").Value) Then
        y = rs2.Fields("Site").Value
        string_sql4 = "insert into tableBibandeOutil ( Site ) values (" & y & " )"
        DoCmd.RunSQL (string_sql4)
        rs2.Close
        rs1.Close
        Set rs1 = Nothing
        Set rs2 = Nothing


    End If
End If
End If
Next
Next
End If
'supr = "macroSuprTableBibandeSelectSite"
'DoCmd.RunMacro supr
Next
End Sub


__________________________________________________

Les nombreux msgbox que j'ai placé m'ont permis d'observer que ma boucle FOR parvenait a faire un tour convenablement, puis a ammorcé le second ! malhauresement, c'est la que sa bloque !
   Lorsque la boucle essai d'utilisé la table " tableBibandeSelectOutil" , j'obtient l'erreur 3211 qui me dit que " la table est deja utilisé par un autre utilisateur ou un autre processus" !! Le debogeur me situe cette erreur sur le macro crea.

  J'ai fermé tout les recordset possibles !! je ne comprend pas !!!
 
Help meee ! Plllease help Meee! Je suis FOuuuuuuuuuuu de vououou !!! ( a lire en chantant du polnaref )

merci d'avance pour vos reponces !!!  

PS:  les declarations abusive en debut de script sont dut au faite que c'est encore un chantier  !! ^^

1 réponse

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
12 mai 2009 à 20:49
Salut
Pour commencer, il aurait été judicieux de choisir la bonne catégorie
Modifiée .Net --> VBA

La table "tableBibandeSelectOutil" dont tu parles n'est utilisée nulle part dans ton code.
Impossible qu'on sache par quoi elle bloquée ?

Si tu dois faire des rapprochement entre tables, pourquoi ne pas le faire en une seule requète combinant les deux tables ?
Parce là, s'il n'y a pas le même nombre de lignes dans chaque RecordSet, tu vas tomber en erreur et c'est difficile de raisonner pour trouver les méthodes pour l'éviter

PS : Cette innstruction ne signifie pas que chaque élément est dimensionné en Long
   Dim i, h, k, y As Long
Il faut répéter le type pour chaque variable, sinon, ce seront des Variant : pas toujours très optimum (temps d'exécution) + conversions implicites des fois problématiques

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous