Multithread avec une base de données Access

Résolu
veyraud Messages postés 5 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 8 juillet 2005 - 2 juin 2005 à 16:23
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 - 3 juin 2005 à 17:02
Salut à tous,



Je développe une appli qui doit faire des acces concurents sur une même
base de données. C'est un peu long , mais je donne un max d'element pour



J'utilise OLE DB pour piloter la base de données (cf connection string plus bas). Les requêtes marchent toutes séquentiellement.



Je crée bien des thread différent dans le code, mais la base de données refuse les acces concurents



J'ai un message d'erreur du type:



ExecuteReader requires an open and available Connection. The connection's current state is Open, Executing..



Je pense que ça vient de la connectionString, mais je ne sais pas quoi mettre...



Je vous donne quelques lignes de code pour expliquer un peu plus:



'La connection String




Me.FinancialConnection.ConnectionString = "Jet OLEDB:Global Partial
Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking
Mode=0;Jet OLEDB:Database Password=;Data Source=""C:\My
Documents\db1.mdb"";Password=;Jet OLEDB:Engine Type=5;Jet OLEDB:Global
Bulk Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet
OLEDB:System database=;Jet OLEDB:SFP=False;Extended
Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet
OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on
Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User
ID=Admin;Jet OLEDB:Encrypt Database=False;"




'les différentes sub que je veux "Threader"



Private Sub OGQuery()

Me.OGCommand.CommandText = "SELECT [Client Group] FROM [ExtractCJI3] "



Me.OGDataAdapter.Fill(Me.DataSet1, "OG")

End Sub



Private Sub SuppliersQuery()

Me.SupplierCommand.CommandText = "SELECT [Client Group] FROM [Extract CJI3 Propre]"



Me.SupplierDataAdapter.Fill(Me.DataSet1, "Suppliers")

End Sub



Private Sub CustomersQuery()

Me.CustomerCommand.CommandText = "SELECT [Client Group] FROM [All MU]"



Me.CustomerDataAdapter.Fill(Me.DataSet1, "Customers")

End Sub



'Creation des threads



Private Sub buildSpendsbyOGGrid()



Dim myOGThread As New System.Threading.Thread(AddressOf OGQuery)

Dim mySuppliersThread As New System.Threading.Thread(AddressOf SuppliersQuery)

Dim myCustomersThread As New System.Threading.Thread(AddressOf CustomersQuery)



myOGThread.Start()

myCustomersThread.Start()

mySuppliersThread.Start()



myOGThread.Join()

myCustomersThread.Join()

mySuppliersThread.Join()

End Sub







Si vous avez même que des éléments de réponse, je suis preneur!!!



Vinz

3 réponses

cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
3 juin 2005 à 03:51
c'est simple, il te faut un patron singleton.

un peu dur a expliquer comme ça, je fais un tutorial là dessus demain, sinn en attendant, fouille sur le net sur le singleton.

un singleton est une classe qui est accessible par n'importe où dans le programme et même par les thread et en tout moment, il y aura seulement une seule instance et jamais 2, malgré que 2 thread peut-être en même temps dedans.

Le principle est au lieu de faire un new sur la class, c'est de demander une instance. Si elle existe pas, l'instance sera créé, puis elle te sera donner. Ensuite, tu peux faire ce que tu veux avec, comme une classe normal, juste ça création est différente

-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
3
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
3 juin 2005 à 17:02
je fais ça un peu plus tard. Je suis du québec, donc avec le décalage tu auras ça demain matin en te levant


-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
3
veyraud Messages postés 5 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 8 juillet 2005
3 juin 2005 à 16:37
Je ne connais pas les singletons , mais je vais chercher je te donne un retour .




Vinz
0
Rejoignez-nous