Access et connexion ldb avec utilisateur null et connexion a null

merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012 - 22 nov. 2010 à 20:41
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 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

11 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
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
0
paramecie Messages postés 15 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 29 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.
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
23 nov. 2010 à 13:32
Bonjour,
Je te propose aussi SQL serveur qui est une solution à tes problèmes.
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
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...
++
0

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

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 nov. 2010 à 18:33
@paramecie : Tu bénéficies toujours de l'interface de Access en utilisant les tables liées

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 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)

Merci
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
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
0
paramecie Messages postés 15 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 29 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 ;-)
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 nov. 2010 à 22:49
VB6 SP5
Pas la dernière version de VB6, ça (c'est la SP6 la plus récente) ... Fais gaffe

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
paramecie Messages postés 15 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 29 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...
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
25 nov. 2010 à 22:11
Comme OS (un vrai, hein, pas Vi$ta), y'a Se7en

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous