Erreur 3211 : table deja utilisé par une autre personne ou un autre processus !
clempepino
Messages postés3Date d'inscriptionmercredi 6 mai 2009StatutMembreDernière intervention12 mai 2009
-
12 mai 2009 à 16:00
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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 & " "
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 !! ^^
A voir également:
Erreur 3211 : table deja utilisé par une autre personne ou un autre processus !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)