Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour
dans mon application je propose à l'utilisateur de selectionner un fichier sybase.ini
a partir de ce fichier, j'affiche dans une liste box, les serveurs référencés dans le .INI
l'utilisateur peut alors sélectionner le serveur de données de son choix
je voudrai pouvoir afficher dans une autre liste les databases existantes sur le serveur sélectionné
Ainsi l'utilisateur choisira sa database et renseignera les identifiants de connexion
Quelqu'un a t il déjà fait cela ? Est ce possible ?
j'ai pensé à interroger la table systeme sysdatabases mais j'aimerai une autre solution si possible
merci d'avance
Hors ligne
Bonjour,
Sur les questions BDD, toujours indiquer SGBDR et version...
Plusieurs pistes :
* comme les serveurs : en dur dans ton .INI
* avec une table système
* avec une table dédiée à maintenir
Hors ligne
BONJOUR
EFFECTIVEMENT
BDD SYBASE 12.5 ET 15 SUR CERTAINS POSTES
PB 11.5
PAR RAPPORT AUX 3 SOLUTIONS
- LA TABLE A MAINTENIR C PAS POSSIBLE CAR MON APPLI DOIT SE GREFFER SUR UN EXISTANT QUI NE DOIT PAS ETRE MODIFIEE
- LE .INI CE SERAIT LE PLUS SIMPLE MAIS LA SOLUTION DOIT ETRE EVOLUTIVE POUR EVITER DE MODIFIER LE .INI A CHAQUE OCCASION
- LA TABLE SYSTEME OUI MAIS LAQUELLE ET COMMENT LUTILISER AVEC PB ?
Hors ligne
:SMILEY_ANTI_CAPS_LOCK:
Si tu veux de l'évolutif simple, c'est sur c'est pas terrible dans le INI, ni dans l'EXE...
Pour les table systèmes, c'est pas terrible non plus car il faut en principe des privilèges élevés, pas sur que les utilisateurs les aient...
Tu pourrais toujours créer une vue accessible à l'utilisateur sur ces tables systèmes. (ou alors cette vue existe dans ASE)
Après dans PB, c'est juste une DS/DW avec la requête qui va bien.
Hors ligne
Bonjour,
En complément et même remarque qu'erasorz, Avec une requête dans une datastore/datawindow et la requête :
select name from master.dbo.sysdatabases
Pour faire cela, il faut effectivement avoir établi une connexion sur la base master !!
Je suppose également qu'il va falloir que tu filtres les bases de données uniquement compatible avec ton application, élimination master, model, sybsystemprocs, tempdb ...
Ensuite, je suppose qu'il va falloir analyser le schéma de chaque base de données (ex : tables disponibles) pour déterminer s'il s'agit bien d'une base de données utilisable avec l'application.
Hors ligne
Salut, qques pistes :
liste des serveurs :
commande "DOS" dblocate
liste des DB sur un serveur :
select db_name( number ) from sa_db_list();
Hors ligne
merci captain flam
mais dans "select db_name( number ) from sa_db_list()" a quoi correspond le <number> ?
Hors ligne
remypb a écrit:
merci captain flam
mais dans "select db_name( number ) from sa_db_list()" a quoi correspond le <number> ?
très bonne question,
je t'avouerai que je ne sais pas trop, je dirais que c'est un argument à la fonction pour obtenir les infos des DB (genre Select fct_qui_me_renvoie_le_nom_de_la_db_numero( 1 ) ) mais par contre je sais pas d'où il va tirer cette valeur
ce que je sais c'est que tu le tapes comme ça, tel quel, verbatim et ça fonctionne (chez moi en tt cas)
Hors ligne
Depuis une connexion sur n'importe quelle base du serveur, la procédure système "sp_helpdb" sans paramètre devrait faire ton bonheur.
En bonus, la documentation dit que c'est exécutable par tout le monde.
Edit : Il y a aussi "sp_databases", avec une liste moins verbeuse. Et c'est également exécutable par un utilisateur sans droits particuliers.
Dernière modification par FMolinas (07-05-2013 15:55:41)
Hors ligne
FMolinas a écrit:
Depuis une connexion sur n'importe quelle base du serveur, la procédure système "sp_helpdb" sans paramètre devrait faire ton bonheur.
En bonus, la documentation dit que c'est exécutable par tout le monde.
Edit : Il y a aussi "sp_databases", avec une liste moins verbeuse. Et c'est également exécutable par un utilisateur sans droits particuliers.
Commet doit on exécuter ça depuis une console SQL ?
j'ai essayé de diverses façons et j'obtiens tjrs un message d'erreur genre "Vous avez tenté d'utiliser une fonctionnalité Transact-SQL qui n'est pas supportée dans SQL Anywhere."
Hors ligne
rincevent a écrit:
Commet doit on exécuter ça depuis une console SQL ?
j'ai essayé de diverses façons et j'obtiens tjrs un message d'erreur genre "Vous avez tenté d'utiliser une fonctionnalité Transact-SQL qui n'est pas supportée dans SQL Anywhere."
Pareil ici. Apparemment c'est une fonctionnalité ASE, pas ASA.
Au passage,
rincevent a écrit:
liste des serveurs :
commande "DOS" dblocate
J'ai appris un truc là , ça fonctionne bien pour les serveurs ASA.
Hors ligne
Ha je suis bien content de t'avoir appris un truc pour une fois que c'est dans ce sens la
Edit : Pourquoi mon message se poste en double ça je comprends pas ?
Dernière modification par rincevent (08-05-2013 09:11:11)
Hors ligne
Bonjour
j'ai essayé les 2 commandes sp_helpdb et sp_databases, effectivement ca marche mais il faut que je sois connecté sur une base
ce que je souhaiterai c'est de lister les databases d'uin serveur que je passerai en paramètre ... Comme je l'ai dit dans mon 1er post, l'utilisateur choisit un serveur dans une liste et je veux afficher les DB de ce serveur
si c'est pas possible l'utilisateur devra saisir le nom de la DB en même temps que les identifiants
merci d'avance
Hors ligne
Tu peux utiliser un utilisateur "générique" par serveur qui aurait accès à sp_databases pour avoir la liste des bases et ensuite connecter le "vrai" utilisateur.
Hors ligne
ok mais cet utilisateur générique je dois le créer sur le serveur ou il existe déjà ?
si il existe comment je l'identifie comment je le retrouve ?
si je dois le créer faut il que je demande l'autorisation au DBA ou est ce transparent et sans conséquence pour le serveur ?
Hors ligne
il faut demander la création d'un utilisateur n'ayant aucun droit (puisque sp_databases et/ou sp_helpdb sont accessibles par tout le monde d'après le message de FMolinas)
Hors ligne
remypb a écrit:
Bonjour
j'ai essayé les 2 commandes sp_helpdb et sp_databases, effectivement ca marche mais il faut que je sois connecté sur une base
ce que je souhaiterai c'est de lister les databases d'uin serveur que je passerai en paramètre ... Comme je l'ai dit dans mon 1er post, l'utilisateur choisit un serveur dans une liste et je veux afficher les DB de ce serveur
si c'est pas possible l'utilisateur devra saisir le nom de la DB en même temps que les identifiants
merci d'avance
tu as jeté un oeil aux options de dblocate ?
dblocate -dv -s <nom du serveur>
devrait te donner la liste des DB exécutées sur <nom du serveur>
jete un oeil aux options y en a pas bcp et je pense qu'il y a ce qu'il te faut.
Hors ligne
Vu les versions de BDD annoncées par remypb, j'avais supposé que le SGBD est ASE et pas ASA. D'où confusion... Je pense toujours qu'il s'agit bien d'ASE, peux-tu confirmer ? (Et au passage, je note aussi l'existence de l'utilitaire ASA dblocate, je ne connaissais pas.)
Je ne sais pas comment lister les bases d'un serveur ASE sans s'y connecter. Et en termes de sécurité du système d'information, je trouverais ça choquant... -> Ce n'est à mon avis pas possible.
Il te faudra donc avoir une connexion, idéalement un utilisateur sans aucun droit particulier. Tu n'as sans doute pas la possibilité d'ajouter un compte toi_même (il faut un droit sa ou sso pour exécuter sp_addlogin) vu que tu indiques avoir un DBA dans ton entourage. Il faudra lui demander cette ouverture de compte.
Une fois en possession de ce compte, il suffira de faire une connexion temporaire automatique le temps de récupérer le nom des bases utilisables. Il faudra aussi comme le suggérait buck supprimer de la liste les bases système qui ne sont pas utilisables pour un usage applicatif : master, model, sybsystemprocs, tempdb, dbccdb, sybsecurity, sybsystemdb, pubs2, pubs3, dbccdb.
Hors ligne
FMolinas a écrit:
Je ne sais pas comment lister les bases d'un serveur ASE sans s'y connecter. Et en termes de sécurité du système d'information, je trouverais ça choquant... -> Ce n'est à mon avis pas possible.
je te confirme que c'est possible , par contre il y a aussi une option des DB qui permets de ne PAS afficher la DB comme exécutée...
Pourvu qu'il n'existe pas une option de dblocate pour dire de voir toutes les DB exécutées même les DB "cachées" parceque là on aurait besoin d'une option DB pour dire "cacher aussi quand on a coché l'option pour voir totues les DB même les cachées" mais alors là on aurait besopin d'une option dans DBlocate pour quand même voir ces DB là mais alors la on aurait besoin d'une option dans les DB pour....
Hors ligne
Tiens, tout ça me rappelle de vieux souvenirs de VBA pour Excel : xlVisible, xlHidden et le redoutable xlVeryHidden
Hors ligne