INCOMPATIBILITE ADO ET DAO

bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 - 23 mars 2006 à 12:01
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 23 mars 2006 à 19:16
J'ai un léger problème.
Je travaille actuellement sur une ancienne application faite en VB6 + DAO.
La base (ACCESS) est aujourd'hui assez grosse (76 Mo).
J'ai donc insérer une fonction de compactage de la base à l'aide :
Microsoft Jet And Replication Objects 2.6 Library

Code :

Dim JRO As JRO.JetEngine
Set JRO = New JRO.JetEngine
JRO.CompactDatabase srcConnectString, destConnectString

Le problème c'est qu'à partir du moment où le poste serveur effectue un compactage, les autres postes du réseau ne veulent plus se connecter à la base disant qu'il y a un utilisateur exclusif sur la base.
Seul le poste serveur veut bien se connecter en DAO.
J'ai fait un essai avec l'ADO sur les autres poste et là pas de problème, mais l'appli est bien trop grosse pour que je puisse tout passer en ADO.

Quelqu'un a-t-il une solution à me proposer ?

Merci d'avance
Bonne prog
++

5 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mars 2006 à 13:19
un passage en ADO est-il un changement si important ?

ne peux-tu t'arranger pour que l'appli prenne bien le fait que la base soit ouverte en exclusif ?

peut etre n'effectuer le compactage que si personne d'autre ne joue avec elle...

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
23 mars 2006 à 14:39
Plus de 2000 pages de codes sur papier A4 + utilisation de composants DAO .... le changement est ADO est effectivement beaucoup trop lourd.

Par ailleurs, le compactage est bien fait uniquement si personne d'autre n'est connecté à la base.

Donc je ne comprend pas ce qu'il se passe. Comme si la commande de compactage ne se deconnectait pas de la base ?!?

"ne peux-tu t'arranger pour que l'appli prenne bien le fait que la base soit ouverte en exclusif ?"
=> Qu'entends-tu par là ?

Bonne prog
++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 mars 2006 à 14:44
j'utilises le code suivant (classe de connexion à ma base)

Public Sub CompactDatabase()
Dim oJRO As Object
Dim sSource As String
Dim sDest As String
Dim bWasConnected As Boolean

On Error GoTo TOExceptErr
Set oJRO = CreateObject("JRO.JetEngine")

sSource = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mDBPath
sDest = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mDBPath & "~"

'# Fermeture de la connexion, si ouverte...
If Not mDBCon Is Nothing Then
If mDBCon.State = adStateOpen Then
mDBCon.Close
bWasConnected = True
End If
Set mDBCon = Nothing
End If
oJRO.CompactDatabase sSource, sDest

Kill mDBPath
Name mDBPath & "~" As mDBPath

'# Si la connexion etait ouverte, la réouvre
If bWasConnected Then
DoEvents
ConnectTo mDBPath
End If
TOExceptErr:
End Sub

ce que je veux dire par "prenne bien le fait"
c'est que si ton appli detecte que la base est ouverte en exclusif (ton erreur, quoi) on patiente un peu, jusqu'a ce que les choses rentrent dans l'ordre...

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
23 mars 2006 à 15:04
Ok, merci pour l'info.
En fait j'ai un peu résumé mon code mais il est très ressemblant au tien.


Je te fait un topo plus précis :


Le compactage est lancé manuellement le soir quand il n'y a plus personne et que tout les autres PC sont éteints.


Le matin quand tout le monde revient, personne ne peut plus se connecter (sauf le serveur lui même)

Bonne prog
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
23 mars 2006 à 19:16
salut,


en vb.net
j'ai eu un problème avec ADOX mais pour la création d'une base. une
fois créée il était impossible de l'ouvrir, c'est balot quand même !


ma
connexion était bien fermée et l'objet était bien détruit mais pas
moyen, elle existait encore en mémoire donc aucun autre accés possible.
j'ai cru trouvé une solution du côté du moteur Jet, en me disant que le
fantôme de ma connexion devait être là.


je n'ai rien trouvé mais j'ai finalement réussi en forçant le nettoyage du Garbage Collector.


c'est étrange car c'est le seul type de connexion qui m'ai posé problème et je pense donc que cela vient d'ADOX.


tu peux essayer de nettoyer la mémoire utilisée par ta connexion de compactage. mais en vb6 je ne suis vraiment pas compétent !



[ Dalida ]<hr>
pensez à indiquer le langage utilisé et sa version !
0
Rejoignez-nous