Savoir si une base de données est mono ou multi utilisateur ? - SQL/NoSQL - Programmation
Marsh Posté le 23-01-2009 à 17:43:11
ca serait pas plutôt un pb de verrou? Quand tu fais ton archivage, sa verrouille pour éviter les accès concurrents mais une fois le travail terminé, ça ne déverrouille pas?
Marsh Posté le 27-01-2009 à 12:00:56
Non je ne pense pas. Comme je l'ai dit l'application est accessible à tout le monde (enfin tous les utilisateur proposé) dès le départ.
Dans cette application, se trouve celle pour mon archivage. J'ai demandé qu'au lancement de celle-ci, une requête soit passé pour passer la base en utilisateur unique, et une autre pour la passer en utilisateur multiple à la fermeture, et j'ai vérifié, le changement se fait correctement.
Du coup, si elle est en utilisateur unique quand j'utilise l'archivage, plus personne ne peut se connecter dessus vu que je suis déjà connecter dessus.
Mais mon problème n'est pas là, car du coup c'est normal que personne ne puisse se connecter en même temps car c'est voulu. Mon problème est que je ne sais pas s'il est possible de savoir dans quel état est l'accès à cette base (mono ou multi utilisateur) sans avoir à utiliser celle ci justement? Genre un champs d'une table qui est dans une autre base telle que la base master par exemple. J'ai vu que dans celle-ci il y avait "sysdatabases" où on peut voir toutes les bases de créer dans sql server, mais aucun renseignement sur l'état de l'accès à une base précise.
Donc si vous avez la solutions, je suis tout ouïe
Merci d'avance.
Marsh Posté le 27-01-2009 à 12:26:29
Mais quand tu fais ton connect ca te renvoit pas un code d'erreur justement ?
Marsh Posté le 27-01-2009 à 12:49:57
En fait, ceux qui ont créer l'application ont mis des conditions qui font que si la connexion n'aboutis pas, une demande est faite afin de réessayer de se connecter à la base. Et vu que lors de l'ouverture de l'archivage la base est en utilisateur unique, le message peut être demandé infiniment tant que l'utilisateur ne dit pas qu'il ne veut pas réessayer de se connecter. Une fois que l'utilisateur dit qu'il ne veut pas réessayer de se connecter, l'application se ferme et effectivement après j'ai des messages d'erreur. Un premier qui me dit que mon application a rencontré un problème et doit fermer, et un autre qui est message d'erreur de delphi "Exception EOleException dans le module xxx.exe dans 0013FE16. Impossible d'ouvrir la base de données demandée dans la connexion 'xxx'. Echec de la connexion.". Mais je pense que si j'ai ces messages, c'est que le fait que la connexion ne puisse aboutir n'a pas dû être traité.
Ce que je voudrais, c'est passer avant ce message de reconnexion pour dire dès le départ si oui on non il peut tenter de se connecter. C'est donc pour ça que je veut tenter une connexion sur sql server pour vérifier comment est l'accès à cette base précisemment, avant de me connecter dessus et donc de me mettre à l'utiliser.
Marsh Posté le 23-01-2009 à 09:24:04
Bonjour,
Je ne savais pas trop si je devais poster ce message dans la partie Delphi ou la parti SQL mais bon je pense qua ça concerne plus SQL.
Je fais une application Delphi d'archivage de base de données intégrée dans un gros programme.
Au lancement de cette application, ma base principale qui est en multi utilisateur devient mono utilisateur.
De ce fait, l'application général s'exécutant à la réussite de connexion, une fois en mono utilisateur plus personne ne peut la lancer.
J'aimerai gérer cette erreur de connexion pour définir avant la connexion si ma base principale est en mono ou multi utilisateur.
Donc j'aimerai savoir s'il y a moyen de savoir si une base est en mono ou multi utilisateur sans la requêter elle-même ? Es-ce possible d'après une des autres bases tel que master ?
Merci d'avance pour vos réponse.
Edit 1 : j'ai oublié de précisé mais les base de données sont sous SQL Server 2000/2005
Edit 2 : j'avais trouvé cette requête "SELECT DATABASEPROPERTYEX('ma base','UserAccess')", mais hélas la requête se fait sur la base renseigné, et dans mon cas elle ne se fera jamais ou sera inutile car une fois en mono utilisateur, la connexion à cette base ne se fait pas.
Message édité par neo18045 le 23-01-2009 à 09:27:34