2010-01-12 10 views
7

अनुप्रयोगों के लिए विजुअल बेसिक का उपयोग कर MySQL ODBC ड्राइवर का संस्करण ढूंढें, मैं कैसे पता लगा सकता हूं कि उपयोगकर्ता में मशीन पर MySQL ODBC ड्राइवर का कौन सा संस्करण स्थापित है?वीबीए के साथ, विंडोज

मेरे पास एक माइक्रोसॉफ्ट एक्सेस एप्लिकेशन है जो कनेक्शन बनाने के लिए MySQL ODBC ड्राइवर का उपयोग करता है। कनेक्शन स्ट्रिंग इस तरह दिखता है:

ODBC;DATABASE=mydatabase;DRIVER={MySQL ODBC 3.51 Driver}; 
    OPTION=3;PWD=password;PORT=3306;SERVER=server-db;UID=db-user; 

यह खोजने के काम कर रहा है जब तक यह प्रबंधक एक उपयोगकर्ता के पीसी, जो मेरे कनेक्शन स्ट्रिंग तोड़ दिया पर MySQL ODBC ड्राइवर के संस्करण 5.1 स्थापित किया गया था।

यदि मैं उपयोगकर्ता के Windows XP स्थापना पर स्थापित ड्राइवर का संस्करण जानता था, तो मैं इसे रन-टाइम पर कनेक्शन स्ट्रिंग में डाल सकता था। मैं कैसे पता लगा सकता हूं कि माइक्रोसॉफ्ट ओडीबीसी ड्राइवर का कौन सा संस्करण विंडोज में वीबीए का उपयोग कर उपयोगकर्ता की मशीन पर स्थापित है?

उत्तर

13

आप

HKEY_LOCAL_MACHINE\SOFTWARE\ 
    ODBC\ODBCINST.INI\ 
    ODBC Drivers\MySQL ODBC 3.51 Driver 


HKEY_LOCAL_MACHINE\SOFTWARE\ 
    ODBC\ODBCINST.INI\ 
    ODBC Drivers\MySQL ODBC 5.1 Driver 

के तहत रजिस्ट्री में पा सकते हैं जानकारी here पाया का उपयोग करना, आप नीचे दिए गए कोड का उपयोग कर इसे प्राप्त कर सकते हैं (मैं इसे पहुंच में परीक्षण 97)

Private Sub Command0_Click()  
    If RegKeyExists("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ 
           ODBC Drivers\MySQL ODBC 3.51 Driver") Then 
     MsgBox "3.51" 
    ElseIf RegKeyExists("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ 
           ODBC Drivers\MySQL ODBC 5.1 Driver") Then 
     MsgBox "5.1" 
    Else 
     MsgBox "None" 
    End If 
End Sub 


'returns True if the registry key i_RegKey was found 
'and False if not 
Function RegKeyExists(i_RegKey As String) As Boolean 
    Dim myWS As Object 

    On Error GoTo ErrorHandler 
    'access Windows scripting 
    Set myWS = CreateObject("WScript.Shell") 
    'try to read the registry key 
    myWS.RegRead i_RegKey 
    'key was found 
    RegKeyExists = True 
    Exit Function 

ErrorHandler: 
    'key was not found 
    RegKeyExists = False 
End Function 
+0

मैं आपके द्वारा निर्दिष्ट स्थान पर रजिस्ट्री को देखने के लिए वीबीए का उपयोग कैसे कर सकता हूं? –

+0

एक्सेस में काम करने वाली रजिस्ट्री की जांच के लिए आपको यहां http://stackoverflow.com/questions/2020181/find-version-of-access/2020919#2020919 स्क्रिप्ट मिलेगी। – Fionnuala

+0

वह स्क्रिप्ट VB.NET का उपयोग करती है, जो हमेशा वीबीए में अनुवाद नहीं करती है। यह कैसे काम करेगा? –

4

यहां कुछ संभावित विचार दिए गए हैं:

1 आप रजिस्ट्री की जांच कर सकते हैं और विशिष्ट कुंजी की तलाश कर सकते हैं, उदाहरण के लिए: [HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर ई \ ओडीबीसी \ ODBCINST.INI \ MySQL ओडीबीसी 3.51 चालक]

2. आप myodbc.dll के लिए अपने c: \ windows \ system32 फ़ोल्डर को देख सकते हैं, और उसके बाद संस्करण जानकारी जांच सकते हैं। http://www.vb-helper.com/howto_file_version_info.html

1

आप दर मामले के आधार आप कुंजी मान के माध्यम से पुनरावृति कर सकते हैं, जैसे द्वारा एक मामले पर संस्करणों से निपटने से बचना चाहते हैं ..

इस समारोह की गणना करने में बनाया गया है: यहाँ कैसे संस्करण की जांच करने के लिए पर एक लिंक भी है ओडीबीसी ड्राइवरों के लिए regkeys के माध्यम से और बस कहीं भी mysql के अस्तित्व की जांच करें, अगर नहीं, तो यह उपयोगकर्ता को चेतावनी देगा, फिर उन्हें डाउनलोड पेज पर ले जाएं, और उन्हें अपने आर्किटेक्चर (32/64)

के लिए सही संस्करण प्राप्त करने के लिए याद दिलाएं
Public Function CheckMySQL() 

    Dim arrEntryNames() 
    Dim arrValueTypes() 
    Dim rPath As String 
    rPath = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers" 

    Call EnumerateRegEntries(rPath, arrEntryNames, arrValueTypes) 

    If Not IsEmpty(arrEntryNames) Then 
     For Each strAsk In arrEntryNames 
      If (InStr(strAsk, "MySQL")) Then 
       strFound = strFound & strAsk & ", " 
      End If 
     Next 
    End If 

    If (Len(strFound) = 0) Then 
     #If Win64 Then 
      MsgBox "You need MySQL Driver *64 bit* - Press OK to get it!" 
     #Else 
      MsgBox "You need MySQL Driver *32 bit* - Press OK to get it!" 
     #End If 

     ActiveWorkbook.FollowHyperlink Address:="http://goo.gl/vbm6g", NewWindow:=True 

     CheckMySQL = False 
    Else 
     CheckMySQL = True 
    End If 

End Function 

और आपको reg कुंजी की गणना करने के लिए इसकी आवश्यकता होगी (इस पर अधिक देखने के लिए http://technet.microsoft.com/en-us/library/ee176771.aspx):

Public Sub EnumerateRegEntries(strKeyPath, arrEntryNames, arrValueTypes) 
    Const HKEY_CLASSES_ROOT = &H80000000& 
    Const HKEY_CURRENT_USER = &H80000001& 
    Const HKEY_LOCAL_MACHINE = &H80000002& 
    Const HKEY_USERS = &H80000003& 
    Const HKEY_CURRENT_CONFIG = &H80000005& 

    Dim objReg As Object 
    Dim strComputer As String 

    strComputer = "." 
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default:StdRegProv") 

    objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrEntryNames, arrValueTypes 


End Sub 
+1

नोट: 'ActiveWorkbook.FollowHyperlink' एक्सेल के लिए है। 'FollowHyperlink' एक्सेस में ठीक काम करता है। युक्ति: मिली सही स्ट्रिंग को वापस करने के लिए कोड अपडेट करें, उदाहरण के लिए: 'अगर (इनएसआरटी (स्ट्रैस्क," माईएसQL ")> 0 और इनएसआरटी (स्ट्रैस्क," यूनिकोड ")> 0) फिर स्ट्रफ़ाउंड = स्ट्रैस्क modLog.Log LOGNAME, "मिले मिलान MySQL चालक:" और strFound, LOG_INFO समाप्ति If' और 'वरना CheckMySQL = strFound अंत तो ' – rangoy