Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'ai une application PB avec une base ASE.
ASE fonctionnne avec un fichier sql.ini pour recuperer les differentes bases (par exemple une bdd de prod, une de ecette et une de qualif).
Jevoudrais pouvoir mettre dans une liste deroulante toutes ces bases pour pouvoir choisir sa connexion.
Est ce que quelqu'un a deja fait cela ?
Dernière modification par bdf94 (15-10-2007 14:53:58)
Hors ligne
Bonjour,
Regarde du coté des file functions dans l'aide PB.
Tu devrais pouvoir trouver ton bonheur
Hors ligne
voici un bout de code pour les bases oracle (fichier TNSNAMES.ORA)
cela ne doit pas etre si different
//----------------------------------------------------------------------------------------------- // Fonction ayant pour but de remplir la ddlistbox de la fenetre de login // avec les instance de base déclaré sur le poste client. // // Pour cela il est nécessaire de lire les information du fichier: TNSNAMES.ORA // Ce fichier se trouve dans un sous-répertoire du dossier oracle 'admin' // // Remarque : Pour récupérer les alliaces du fichier TNSNAMES.ORA, on se base sur // le fait qu'en oracle 7 et 8, on test si le premier caractère de la ligne // du fichier est un caractère alphabétique car les autre lignes commence // par '#' ou '(' ou ')' // // ATTENTION : - suivant l'OS la clé du registre change // - suivant l'installation le chemin du dossier oracle change // - suivant les version d'oracle le chemin change // exemple : chemin pour oracle 7 --> oracle\network\admin // chemin pour oracle 8 --> oracle\net80\admin // // Procédure de récupe des infos : // 1 / Récupe dans la base de registre du chemin du dossier oracle // 2 / Recherche dans le dossier oracle d'un sous-dossier 'net*' // 3 / Recherche dans le sou-dossier trouvé un répertoire 'admin' // 4 / Lecture des information du fichier TNSNAMES.ORA // // //----------------------------------------------------------------------------------------------- String ls_oracle String ls_rep_net String ls_rep_admin String ls_fichier String ls_chemin, ls_read String ls_domaine String ls_instance Integer li_i, li_j, li_k, li_return Long ll_read, ll_read_tot, ll_pos, ll_lenfile Boolean lb_trouve_net = False Boolean lb_trouve_tnsnames = False Boolean lb_trouve_tnsname = False Boolean lb_trouve_admin = False Boolean lb_domaine = False // Initialisation ls_chemin = '' ls_instance = '' li_i = 1 String ls_string1 = "HKEY_LOCAL_MACHINE\Software\Oracle" String ls_string2 = "ORACLE_HOME" // Recupe du chemin du dossier oracle RegistryGet( ls_string1, ls_string2, RegString!, ls_oracle) If IsNull(ls_oracle) or trim(ls_oracle)='' Then ls_oracle = ProfileString(is_ini_file, "Defaut", "ORACLE_HOME", "C:\ORANT") End if // Recupe des sous-repertoire du dossier oracle lb_oracle.DirList(ls_oracle, 16) // Recupe du sous-repertoire Net* avec un sous dossier Admnin Do While lb_trouve_net=False And li_i <= lb_oracle.TotalItems () ls_rep_net = lb_oracle.Text(li_i) // Recherche du sous-dossier 'net*' // Attention : le premier caractère est '[' If Upper(LeftA(ls_rep_net,4)) = '[NET' Then // on enleve les [] ls_rep_net = RightA(ls_rep_net,LenA(ls_rep_net) - 1) ls_rep_net = LeftA(ls_rep_net,LenA(ls_rep_net) - 1) lb_network.DirList(ls_oracle + '\' + ls_rep_net, 16) lb_trouve_net = True // Recherche du sous-dossier 'admin' li_j = 1 Do While Not lb_trouve_admin And li_j <= lb_network.TotalItems () ls_rep_admin = lb_network.Text(li_j) If Upper(ls_rep_admin) = '[ADMIN]' Then // Si dossier = Net*\Admin lb_trouve_net = True lb_trouve_admin = True // on enleve les [] ls_rep_admin = RightA(ls_rep_admin,LenA(ls_rep_admin) - 1) ls_rep_admin = LeftA(ls_rep_admin,LenA(ls_rep_admin) - 1) lb_rep_admin.DirList(ls_oracle + '\' + ls_rep_net + '\' + ls_rep_admin, 16) // Recherche du fichier TNSNAMES.ORA li_k = 1 Do While Not lb_trouve_tnsnames And li_k <= lb_rep_admin.TotalItems () ls_fichier = lb_rep_admin.Text(li_k) ls_chemin = ls_oracle + '\' + ls_rep_net + '\' + ls_rep_admin If Upper(ls_fichier) = 'TNSNAMES.ORA' Then lb_trouve_tnsnames = True // Récupe des instances li_return = 0 ll_lenfile = 0 ll_lenfile = FileLength(ls_chemin + '\' + 'TNSNAMES.ORA') li_return = FileOpen(ls_chemin + '\' + 'TNSNAMES.ORA') Choose Case li_return Case Is > 0 ll_read = 0 ll_read_tot = 0 ls_read='' Do While ll_read_tot < ll_lenfile And ll_read >= 0 ll_read = FileRead(li_return,ls_read) ls_read = Trim(ls_read) ll_read_tot = ll_read_tot + ll_read // Si le 1er caractère est 1 lettre If Not IsNull(Match (Upper(LeftA(ls_read,1)),"[A-Z]")) And & Match (Upper(LeftA(ls_read,1)),"[A-Z]") Then ls_instance = ls_read ll_pos = PosA(ls_instance,'=') If ll_pos > 0 And Not IsNull(ll_pos) Then ls_instance = Trim(LeftA (ls_instance,ll_pos - 1)) End If // Remplissage de la listbox des alliasses ddlb_alliasse.AddItem(ls_instance) End If Loop FileClose(li_return) Case Else MessageBox('Erreur', "Impossible d'ouvrir le fichier" + & ls_chemin + '\' + 'TNSNAMES.ORA',StopSign!) End Choose Else li_k++ lb_trouve_tnsnames = False End If Loop Else li_j++ lb_trouve_net = False lb_trouve_admin = False End If Loop Else li_i++ lb_trouve_net = False End If Loop
Hors ligne