TESTER LA VERSION DU MDAC INSTALLÉ

BZY1 Messages postés 214 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 avril 2008 - 18 juil. 2005 à 10:36
JuanedaEr Messages postés 15 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 9 août 2007 - 16 févr. 2006 à 14:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32761-tester-la-version-du-mdac-installe

JuanedaEr Messages postés 15 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 9 août 2007
16 févr. 2006 à 14:25
La version du MDAC peut aussi être directement extraite du registre.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess]
"FullInstallVer"="2.53.6301.0"
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
26 juil. 2005 à 18:37
vi c'est comme ça que je fais mais ça gonfle la taille du fichier setup pour rien... notament quand tu installes des soft sur un poste qui a son mdac à jour ... donc mon idée était de tester la version du MDAC et si besoin est télécharger et installer mise à jour sur le poste (par le code bien sur)
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 juil. 2005 à 10:22
Pour conclure, j'aborderais le problème d'une manière plus courante. Car, à tout point de vue, il est plus sûr et plus judicieux d'incorporer le fichier MDAC_typ.exe à un exécutable de déploiement (setup).
Cette approche plus professionnelle suppose aussi l'installation éventuelle de DCOM95 ou 98 sur le poste client.
Naturellement, dans le cadre de macrocommandes VBA l'autre choix s'impose.

Cordialement,
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
25 juil. 2005 à 16:48
thx, j'adapte ça pour access et j'ajoute au pack !
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
25 juil. 2005 à 16:46
Voici les méthodes de base pour SQL Server extraites d'un ancien programme. Je n'en suis pas l'auteur (adaptation).

Public Sub getAttributes()
'Lecture de la base de registres
Dim hKey As Long
Dim regValue As String
Dim valueType As Long

'Pilote SQL Server
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\ODBC\ODBCINST.INI\SQL server", 0, KEY_ALL_ACCESS, hKey) = 0 Then
regValue = String$(1024, 0)
If RegQueryValueEx(hKey, "Driver", 0, valueType, regValue, Len(regValue)) = 0 Then
If valueType = REG_SZ Then
'Récupère l'emplacement de la dll
RegVal(0) = Left$(regValue, InStr(regValue, vbNullChar) - 1)
'Récupère le n° de version du pilote SQL Server
RegVal(0) = GetFileVersion(RegVal(0))
End If
End If
RegCloseKey hKey
End If
End sub

Private Function GetFileVersion(ByVal strFullPath As String) As String
Dim vffi As VS_FIXEDFILEINFO
Dim nDataLen As Long
Dim pData As Long
Dim buffer() As Byte
Dim RetVal As Long

'Numéro de version du pilote SQL Server (dll)
nDataLen = GetFileVersionInfoSize(strFullPath, pData)
'Si l'exécutable est en 32 bits
If nDataLen <> 0 Then
ReDim buffer(0 To nDataLen - 1) As Byte
'Récupère l'information de version
RetVal = GetFileVersionInfo(strFullPath, 0, nDataLen, buffer(0))
'Retourne un pointeur sur la structure de données
RetVal = VerQueryValue(buffer(0), "", pData, nDataLen)
'Copie celle-ci dans la strucure de données pour y accéder.
CopyMemory vffi, ByVal pData, nDataLen
'Retourne le n° de version du pilote
GetFileVersion = Trim(Str(HIWORD(vffi.dwFileVersionMS))) & "." & _
Trim(Str(LOWORD(vffi.dwFileVersionMS))) & "." & _
Trim(Str(HIWORD(vffi.dwFileVersionLS))) & "." & _
Trim(Str(LOWORD(vffi.dwFileVersionLS)))
End If
End Function

Private Function HIWORD(ByVal dwValue As Long) As Long
Dim hexstr As String
hexstr = Right("00000000" & Hex(dwValue), 8)
HIWORD = CLng("&H" & Left(hexstr, 4))
End Function

Private Function LOWORD(ByVal dwValue As Long) As Long
Dim hexstr As String
hexstr = Right("00000000" & Hex(dwValue), 8)
LOWORD = CLng("&H" & Right(hexstr, 4))
End Function
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
25 juil. 2005 à 16:00
oki, je vais corriger ça alors ...
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
25 juil. 2005 à 15:58
Sauf que... en réalité, il est utile de connaître la version du pilote avant de créer la connexion ADO.
Car, suite à un précédent commentaire, il est question de ne pas référencer ADO dans le projet.
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
22 juil. 2005 à 19:57
vi d'aoccord avec toi, mais c'est une méthode simple pour tester sans passer par la base des registres...
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 juil. 2005 à 13:17
En pratique, la question qui se pose est :
quelle est la version du pilote pour ma base de donnéees X ?
Il s'agit donc le plus souvent à :
- retrouver l'emplacement du pilote dans la base de registre,
- vérifier la version du fichier.

Sinon aucune objection ni critique.
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
20 juil. 2005 à 07:12
Yes bien vu !
popuo Messages postés 1 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 20 juillet 2005
20 juil. 2005 à 07:10
salut,

Comme ceci le programme ne démarre même pas sur une machine qui n'a pas de MDAC ou qui n'a pas la version utilisée sur la machine de developement, je m'explique :
cnTest est typé (early binding) en fonction d'une référence du projet. Sur ma machine de Dev j'ai le 2.8 (par exemple), je coche la référence pour que le programme se compile. J'envoi l'exe à qqun qui n'a pas de MDAC (ou pas le 2.8) et le programme plante dés le départ (référence introuvable).

Résolution :
En ligne 4, remplacer Dim 'cnTest as new ADODB.Connection' par 'Dim cnTest as Object'. Ainsi plus besoin de référence en dur dans le projet VB.
BZY1 Messages postés 214 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 avril 2008
18 juil. 2005 à 10:37
ok désolé "Microsoft Data Access Components" j'avais pas fait gaff...
BZY1 Messages postés 214 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 avril 2008
18 juil. 2005 à 10:36
salut tu vas surement me trouver nul mais c'est quoi le mdac?
Rejoignez-nous