Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
16 avril 2007 à 12:48
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
17 avril 2007 à 11:50
Bonjours
On me demande de me connecté à une base quel que
sois le type de la base (MySQL, Postgres, Oracle, ...) je me demande donc command
faire ça? Sachant que ça ne plais pas que je fasse une classe par type de base (ce que j'avais pensé au départ).
Donc ... Bà je ne sais pas trop command faire.
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/Vincent/LOCALS~1/Temp/msoclip1/01/clip_image001.gif"
o:href="http://www.vbfrance.com/imgs2/smile.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
J'ai fini par avoir une idée et je vous la soumet (pour connaître votre avie )
<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/Vincent/LOCALS~1/Temp/msoclip1/01/clip_image002.gif"
o:href="http://www.vbfrance.com/imgs2/smile_big.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
Dans un premier temps je récup tout les nom de driver odbc dispo (oui driver
pas connections, je préfère, en faite je ne sais pas pourquoi mais j'ai
toujours fais comme ça)
Je remplie un combo box avec tout ça et demande à mon utilisateur d'en
sélectionné un et de me rentré un login/password.
Je récup alors les nom de base dispo et demande une sélection (heeee, ça je ne
sais pas si c’est possible, se connecté à un serveur sans se connecté à une
base ???)
De là je sais logiquement dialogué avec ma base. (récup de nom de tables, de
champ, type de donnée, …)
Alors 3 Questions :
1) Que pensez vous de cette façon de faire ?
2) Quel type de base de donnée existe t'il (MySQL, SQL Serveur, Postgres,
Oracle, Access, ???) ?
3) Y à t'il des changement avec les requête suivant les base (exemple d'une
requête Postgres : « SELECT "Champ1","Champ2" FROM
"NomSchema"."NomTable" », oui les " sont
important ainsi que le NomSchema, à moins que quel qu’un sache s’en
débarrasser)
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 16 avril 2007 à 14:06
Salut Mr Postgres,
je croyais que ton tuteur voulais que Postgres. Donc finalement il change d'avis comme ca.
Pour ma part, je pense que seul la connexions change mais pas les requetes (a confirmer) mais par contre, je comprend pas ton histoire de recuperer les bases dispo. Tu veux dire par la, recherche de nom de base, de type de bases, de l'emplacement des bases ?
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 16 avril 2007 à 15:30
En faite non il veut TOUTE BASE DE DONNEES compatible, il voulais me faire faire des testes sur PostGres, mais j'ai moi aussi les infos au compte goute ce qui me fatigue un peut (même un peut plus ).
Quand je parle de bases dispo c'est en faite le nom de la base par exemple dans postgres (ou MySQL ou même un autre) je peut avoir plussieur base de données donc je pensais récup le nom dze toute les base (ça dois forcément être possible car par exemple "pgAdmin III" le fais pour postgres)
Exemple :
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 16 avril 2007 à 15:34
Si les requêtes change mais c'est vrais que à mon avie ce n'est que pour quelque base de données.
Exemple :
Selection dans MySQL : <SELECT * FROM table>
Selection dans Postgres : <SELECT * FROM "schema"."table"> oui les " sont important si non erreur
Amicalement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 16 avril 2007 à 15:36
Si d'autre subtilité sont à mettre dans la requête
suivant les base pourriez vous me dire les quel je ne pense pas prendre le
temps de vraiment toute les tester.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 16 avril 2007 à 15:57
Si trop de differences apparaissent, tu devras t'orienter vers un switch case.
Quand tu dis compatible, ok mais avec quoi, VB, le driver choisi, la connexion utilisée. En plus, je vois pas l'intéret car il te faudrait recopier toutes tes bases autant de fois qu'ils existes de types de bases. Ton tuteur veux faire une etude comparative ou il est paranos et veux prevoir toutes les possibilités de bases qui existent.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 16 avril 2007 à 16:49
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:24pt;
height:24pt'/><![endif]-->
<!--[if !vml]-->
<!--[endif]-->Heeeeeee, en faite je crois qu'il est un peut
parano (houlà, c'est qui connais quand même mon pseudo dans ce form<!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/Vincent/LOCALS~1/Temp/msoclip1/01/clip_image002.gif"
o:href="http://www.vbfrance.com/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->, heeee désol si tu lit ça, oui on se tutoie). En ce moment je suis en
train d'écrire un code pour lire dans la base de registre tout les driver odbc
dispo (c'est là : "HKEY_LOCAL_MACHINE/SOFWARE/ODBC/ODBCINST.INI/ODBC Drivers")
ensuite je crée une connections avec un select case. Je teste si la chaîne Postgres
est présente dans mon nom de driver (var NomDriver) et dans ce cas j'ajoute un
nom de schéma (qui faudra que je récup) ou non, et d'autre subtilité au niveau
requête si besoin suivant les bases.
Pourrais tu me dire (Nicko11) ce qui change dans la connecting string dans le
cas d'une base sécurisée.
Ma chaîne de connections c'est ça (pour le moment en tout cas) :
Par contre je veux bientôt retirer ça : <Database=" &
NomBaseDeDonnées &> pour récup la liste des bases disponible mais en
faite je ne sais même pas si c'est comme ça que ça marche
Heeeeeee, j'ais également vue qu'il été possible de connecté par provider mais là je n'ai jamais fais de 'truc' dans le genre.
Amicalement
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 17 avril 2007 à 11:44
La récup de tout les driver ODBC est faite (très inspiré, même très très inspiré, d'un 'truc'
trouvé sur ce forum mais je ne sais plus où merci quand même). Le code (si ça intéresse quelqu'un) est à la fin de ce post (PS1)
Par contre maintenant c'est la mer-- il ne faux RIEN en dur dans mon programme,
soit :
1) Le nom des bases dois être récup en code (séléction par l'utilisateur)
2) Le nom des schémas (pour PostGres et peut être d’autre)
idem
3) Le nom des tables idem (ça c'est bon, merci Nico11, je le
re-post en PS2)
4) Le nom et type des champs idem (à mettre en relation avec
des données utilisable par mon prog par ini, l'utilisation n'est pas trop là question pour le momand)
<!--[if !supportEmptyParas]-->
Ma question :
Je n’arrive à rien par rapport au nom de base dispo sur un serveur
quelqu’un à un idée ?
<hr size="2" width="100%" />
PS1 (à collé tout seul dans un module):
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
Alias "RegOpenKeyExA" _
(ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" _
Alias "RegEnumValueA" _
(ByVal hKey As Long, _
ByVal dwIndex As Long, _
ByVal lpValueName As String, _
lpcbValueName As Long, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Any, _
lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const ERROR_SUCCESS = 0&
Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_READ = &H20000
Private Const STANDARD_RIGHTS_WRITE = &H20000
Private Const STANDARD_RIGHTS_EXECUTE = &H20000
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY) And _
(Not SYNCHRONIZE))
Private Const REG_DWORD = 4
Private Const REG_BINARY = 3
Private Const REG_SZ = 1
Public Function LireDriverODBCDansBaseDeRegistre(ByVal CaracSeparation As String) As String
Public Function LieTable(ByRef ma_connexion As ADODB.Connection, ByVal CaracSéparation As String) As String
Dim bdd As New ADOX.Catalog
Dim Tableau As ADOX.Table
Dim Tempon As String
Set bdd.ActiveConnection = ma_connexion
For Each Tableau In bdd.Tables Tempon Tempon & IIf(Tempon "", "", CaracSéparation) & Tableau.Name
Next
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 17 avril 2007 à 11:50
Heeeeeee, je viens de faire un petit bricolage de
ma fonction LieTable. Un huitième de poile plus rapide. Voilà le code :
<hr size="2" width="100%" />
Public Function LieTable(ByRef ma_connexion As ADODB.Connection, ByVal CaracSéparation As String) As String
Dim bdd As New ADOX.Catalog
Dim Tableau As ADOX.Table
Dim Tempon As String
Set bdd.ActiveConnection = ma_connexion
For Each Tableau In bdd.Tables
Tempon = Tempon & CaracSéparation & Tableau.Name
Next
If Tempon <> "" Then
LieTable = Right(Tempon, Len(Tempon) - Len(CaracSéparation))
Else
LieTable = ""
End If
End Function