Access et connexion ldb avec utilisateur null et connexion a null
merlin1977
Messages postés13Date d'inscriptionmardi 25 septembre 2007StatutMembreDernière intervention26 novembre 2012
-
22 nov. 2010 à 20:41
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
25 nov. 2010 à 22:11
Bonjour,
j'ai un gros problème, nous utilisons une base de donnée access, celle ci est utilisé pour notre programme principale qui tourne sous access. il y a aussi des programmes en vb6 qui tape dessus et d'autre base access qui servent à faire des requêtes.
Depuis quelques temps le nombre de connexion indiqué dans le .ldb qui est géneré lors des connexion pose probleme.
en effet en moins d'une minute on peut se retrouver avec 30 ou 40 connexion supplémentaire qui ont pour utilisateur null et pour connexion null comme si celle ci était généré par "magie". par ailleurs il y a des connexion persistante c'est à dire qu'une fois un utilisateur connecté celui ci ne disparait jamais du .ldb.
Le problème ci dessus semble corrompre la base qui à du être réparé fréquemment depuis peu.
nous avons autour d 20 utilisateurs simultanées.
Merci de votre aide.
Toute piste ou idée pouvant m'aider à résoudre le problème est la bienvenue.
Cordialement
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 22 nov. 2010 à 23:34
Pas une bonne idée d'utiliser du Access pour stocker les données avec 20 utilisateurs connectés en même temps ... Faudrait peut-être penser à migrer vers du MySQL (ou MSSQL) pour le stockage des données. Facile à faire avec l'assistant d'importat MySQL et les tables liées Access, mais il faut installer le driver
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
paramecie
Messages postés15Date d'inscriptionsamedi 23 octobre 2010StatutMembreDernière intervention29 novembre 2010 23 nov. 2010 à 02:05
Contrairement à ce qu'indique l'aide, pour fermer une base référencée par une variable le Nothing ne suffit PAS. IL FAUT D'ABORD et toujours fermer la base, puis ensuite détruire la variable (en tous cas pour Access 2003). Ne mettre que le Nothing conduit à des .ldb qui persistent, je l'ai vérifié.
mvarDatabase.Close
Set mvarDatabase = Nothing
Pour ce qui est de la solidité d'Access, et surtout en lecture/écriture à partir de 10 et + utilisateurs actifs en réseau, effectivement ce n'est pas trivial (verrouillages, reessayer, optimisations...) - et oui MySQL ou autre est une solution 1000 fois plus fiable - même si j'adore Access.
scromania
Messages postés452Date d'inscriptiondimanche 20 août 2006StatutMembreDernière intervention11 janvier 20139 23 nov. 2010 à 13:34
"Mazz" ma était d'un grand t'aide a ce sujet:
voici de quoi t'orientai Tapez le texte de l'url ici. si tu as des question sur la config ou la connexion je peux te fournir quelques exemples...
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
merlin1977
Messages postés13Date d'inscriptionmardi 25 septembre 2007StatutMembreDernière intervention26 novembre 2012 23 nov. 2010 à 20:01
Bonjour,
merci à tous pour vos réponses.
J'envisage une migration vers sql server mais celle ci n'est pas possible pour l'instant question de temps on pourra surement le faire l'année prochaine.
Concernant les recordset j'avais bien identifier qu'il fallait clôturer tout les recordset et normalement il le sont tous.
En fait après test même en ouvrant et en fermant un recordset avec le "close" puis avec le "nothing" les connexion semble persister tant que quelqu'un est connecté via l'application principale.
Ceci dis Je pense que le vrai problème provient de mes connexions qui ont comme utilisateur null et comme connexion null dans le ldb ça donne null null.
Par des test je n'ai pas réussi à reproduire ce genre de connexion et ceux même en ne clôturant pas du tout les recordset
si quelqu'un à une idée sur l'origine de ce type de connexion.....
(j'avais oublié de le mettre : la base et en access 2000)
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 23 nov. 2010 à 22:24
Tu peux créer autant de recordsets que tu veux, ce n'est pas ça qui changera le nombre de connexions. Le nombre de connexions c'est le nombre d'objets de type ADODB.Connection connectés à la BDD.
Et si tu n'as pas encore SQL Server installé, tu peux utiliser MySQL (gratuit et très fiable, autant que MSSQL). M'enfin fais comme tu veux, hein
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
paramecie
Messages postés15Date d'inscriptionsamedi 23 octobre 2010StatutMembreDernière intervention29 novembre 2010 24 nov. 2010 à 00:21
@merlin1977
En fait après test même en ouvrant et en fermant un recordset avec le "close" puis avec le "nothing" les connexion semble persister tant que quelqu'un est connecté via l'application principale.
Non pas Recordset: je parlais bien de variables sur la/les bases - en tous cas sous VB6 et RDO, j'utilise pas ADO.
Ce type de variable/ouverture:
Set mvarDatabase=DBEngine.OpenDatabase("Bidule", False, False)
... doit impérativement être fermé par Close (Nothing ne suffit pas), sinon le .ldb n'est pas détruit, et la base verrouillée - donc faire ceci:
mvarDatabase.Close
Set mvarDatabase = Nothing
De toute façon, si tu ne migres pas sur un autre système de bases (idem ici, des bases de 500Mo et des applications sévères en amélioration permanente depuis 5 ans, multi utilisateurs, pas le temps de changer...), il te faut néanmoins bien concevoir/revoir : front-end/back-end, règles d'intégrité, indexes, maximiser accès lecture seule, réduire les résultats envoyés (rarement la peine de remplir une combo avec 500 noms), réplication, etc. - tout ça réduit très nettement les plantages/corruptions de base - ici zéro depuis le début.
A noter un autre bug remarqué ici (VB6 SP5, RDO, Access 2003, Win XP SP3), pour les objets Recordset ouverts il ne faut *PAS* compter sur la destruction de la variable (ex. en fin de procédure), mais TOUJOURS la tuer au bon moment par un "Set MonRecordset = Nothing" bien asséné.
Sinon le plantage arrive vers 150 (ici) recordsets ouverts non tués manuellement.
On voit ça facilement par un simple Form de test: click bouton, ouvre le Recordset, fin de la procédure (il devrait être détruit), mais non: on ouvre le gestionnaire de tâches, on clique sur le form de test plein de fois, et la mémoire grimpe progressivement jusqu'à tout planter.
Enfin ça n'a probablement pas de rapport avec ton problème ici ;-)
paramecie
Messages postés15Date d'inscriptionsamedi 23 octobre 2010StatutMembreDernière intervention29 novembre 2010 25 nov. 2010 à 05:10
SP6? Mince quelle gaffe! Remarque, si ça se trouve j'ai aussi manqué un système d'exploitation depuis XP... faut que je cherche sur Google s'ils parlent de ça...