Cette source afin de répondre à une demande dans le forum.
Celle-ci n'a pour but que de lister les drivers ODBC installés sur une machine ainsi que les DSN user et system associés. Donc inutile de me demander à quoi ça sert ;O) Ce n'est qu'un exercice de style.
Pour ce faire, on liste (dans une collection) le contenu de la clé de registre HKEY_LOCAL_MACHINE\Software\odbc\odbcinst.ini pour récupérer toutes les entrées.
Au menu, quelques API's de la bibliothèque advapi32.dll afin de manipuler la base des registres:
- RegCloseKey
- RegEnumKeyEx
- RegEnumValue
- RegOpenKey
- RegQueryValueEx
Le projet liste la version du driver, le fichier DLL concerné, la date de la DLL ainsi que le chemin complet où elle se trouve. Une classe « clsFileInfo » permet de récupérer ces informations. Normalement, elle peut être réutilisée telle quelle dans un autre projet. Les API's GetFileVersionInfo, GetFileVersionInfoSize et VerQueryValue de la bibliothèque Version.dll ont été utilisées.
Pour lister les DSN user et system, les API's suivantes de la bibliothèque ODBC32.DLL on été utilisées:
- SQLDataSources
- SQLAllocHandle
- SQLSetEnvAttr
- SQLFreeHandle
Aussi, vous pourrez trouver dans la source comment indenter les items d'un listview ainsi que trier une collection.
Les variables en question sont avec leurs valeurs correctes :
1 - Const VFT_FONT_RASTER = &H1
2 - Const VFT_FONT_VECTOR = &H2
3 - Const VFT_FONT_TRUETYPE = &H3
et dans la structure
Select case udtVerBuffer.dwFileOS
............
............
Case Other : Il faut mettre Case Else
La raison est toute simple : Le code a été copié depuis ApiGuide en supprimant la clause "Option Explicit" pour ne pas avoir d'embêtement avec des variables non définies et en supprimant ce qui se rapporte à l'auteur légitime du code. En voici un extrait :
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Source -> MS Knowledge Base
'set the file
Filename = "kernel32.dll"
Directory = "c:\windows\system"
FullFileName = Directory + Filename
'set graphics mode to persistent
Me.AutoRedraw = True
'retrieve the information
DisplayVerInfo
'show the results
Me.Print "Full filename: " + FullFileName
Me.Print "File version: " + FileVer
Me.Print "Product version: " + ProdVer
Me.Print "File flags: " + FileFlags
Me.Print "File OS: " + FileOS
Me.Print "File type: " + FileType + IIf(FileSubType = "", "", " (" + FileSubType + ")")
End Sub
Certes, il y a eu un effort pour code cette classe mais cela n'empêche pas de signaler le nom de l'auteur ou l'équipe qui l'a codé.
Grâce à ce code que j'ai simplifié (pas besoin de toutes les fonctions), j'ouvre des connexions de façon transparente, sans devoir créer mes DSN au préalable, et sans risquer le plantage si un driver ODBC a changé de version.
Beaucoup plus de sureté dans mes installs.
Merci.
il y a un lien pour déposer une source, clic et tu suis bien ce qui est inscrit.
Que vient faire ce gros lourdeau d'Access ici ?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.