Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 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és196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 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és809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 25 juil. 2005 à 16:48
thx, j'adapte ça pour access et j'ajoute au pack !
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 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és809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 25 juil. 2005 à 16:00
oki, je vais corriger ça alors ...
FENETRES
Messages postés196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 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és809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 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és196Date d'inscriptionjeudi 15 juillet 2004StatutMembreDernière intervention14 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és809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 20 juil. 2005 à 07:12
Yes bien vu !
popuo
Messages postés1Date d'inscriptionjeudi 10 avril 2003StatutMembreDernière intervention20 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és214Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention12 avril 2008 18 juil. 2005 à 10:37
ok désolé "Microsoft Data Access Components" j'avais pas fait gaff...
BZY1
Messages postés214Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention12 avril 2008 18 juil. 2005 à 10:36
salut tu vas surement me trouver nul mais c'est quoi le mdac?
16 févr. 2006 à 14:25
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess]
"FullInstallVer"="2.53.6301.0"
26 juil. 2005 à 18:37
26 juil. 2005 à 10:22
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,
25 juil. 2005 à 16:48
25 juil. 2005 à 16:46
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
25 juil. 2005 à 16:00
25 juil. 2005 à 15:58
Car, suite à un précédent commentaire, il est question de ne pas référencer ADO dans le projet.
22 juil. 2005 à 19:57
22 juil. 2005 à 13:17
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.
20 juil. 2005 à 07:12
20 juil. 2005 à 07:10
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.
18 juil. 2005 à 10:37
18 juil. 2005 à 10:36