Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: cobein en Junio 05, 2012, 03:12:18 pm
-
Buenas, hace unos dias que estoy programando algo y como lo hago en varios lugares me tope con el problema de que hay varias versiones del conector de MySQL en los distintos lugares lo cual me obliga a modificar la cadena de coneccion, de "Driver={mySQL ODBC 3.51 Driver} a "Driver={mySQL ODBC 5.1 Driver} y la verdad me canse, hice un modulito que por ahora me parecio lo mejor como para solucionar este problema, lo dejo aca por si a alguno le sirve.
El modulo enumera los drivers disponibles basicamente como cuando abren "Origenes de Datos ODBC" del panel de control.
Option Explicit
'Based on Randy Birch's code
'http://vbnet.mvps.org/index.html?code/system/sqldatasources.htm
'VBnet/Randy Birch
Private Const SQL_MAX_DSN_LENGTH As Long = 32
Private Const SQL_MAX_DESC_LENGTH As Long = 128
Private Const SQL_SUCCESS As Long = 0
Private Const SQL_FETCH_NEXT As Long = 1
Private Const SQL_NULL_HANDLE As Long = 0
Private Const SQL_HANDLE_ENV As Long = 1
Private Const SQL_ATTR_ODBC_VERSION As Long = 200
Private Const SQL_OV_ODBC3 As Long = 3
Private Const SQL_IS_INTEGER As Long = (-6)
Private Declare Function SQLDataSources Lib "odbc32.dll" (ByVal hEnv As Long, ByVal fDirection As Integer, ByVal szDSN As String, ByVal cbDSNMax As Integer, pcbDSN As Integer, ByVal szDescription As String, ByVal cbDescriptionMax As Integer, pcbDescription As Integer) As Long
Private Declare Function SQLAllocHandle Lib "odbc32.dll" (ByVal HandleType As Integer, ByVal InputHandle As Long, OutputHandlePtr As Long) As Long
Private Declare Function SQLSetEnvAttr Lib "odbc32.dll" (ByVal EnvironmentHandle As Long, ByVal dwAttribute As Long, ByVal ValuePtr As Long, ByVal StringLen As Long) As Long
Private Declare Function SQLFreeHandle Lib "odbc32.dll" (ByVal HandleType As Integer, ByVal Handle As Long) As Long
Public Type tODBC
sServer As String
sDriver As String
End Type
'Example: Retrieve MySQL connection string
'Private Sub Form_Load()
' Debug.Print GetDriverConnection("mysql")
'End Sub
Public Function IsDriverAvailable(ByVal sHint As String) As Boolean
IsDriverAvailable = Not (GetDriverConnection(sHint) = vbNullString)
End Function
Public Function GetDriverConnection(ByVal sHint As String) As String
Dim tODBC() As tODBC
Dim i As Long
tODBC = GetUserSystemDSN
For i = 0 To UBound(tODBC)
If InStr(1, tODBC(i).sDriver, sHint, vbTextCompare) Then
GetDriverConnection = "{" & tODBC(i).sDriver & "}"
Exit Function
End If
Next
End Function
Public Function GetUserSystemDSN() As tODBC()
Dim hEnv As Long
Dim sServer As String
Dim sDriver As String
Dim nSvrLen As Integer
Dim nDvrLen As Integer
Dim lCount As Long
Dim tODBC() As tODBC
ReDim Preserve tODBC(0)
If SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv) <> 0 Then
If Not SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, SQL_IS_INTEGER) = 0 Then
Do
sServer = Space$(SQL_MAX_DSN_LENGTH)
sDriver = Space$(SQL_MAX_DESC_LENGTH)
If SQLDataSources(hEnv, SQL_FETCH_NEXT, sServer, SQL_MAX_DSN_LENGTH, nSvrLen, _
sDriver, SQL_MAX_DESC_LENGTH, nDvrLen) = SQL_SUCCESS Then
lCount = lCount + 1
ReDim Preserve tODBC(lCount)
With tODBC(lCount)
.sServer = Left$(sServer, nSvrLen)
.sDriver = Left$(sDriver, nDvrLen)
End With
Else
Exit Do
End If
Loop
End If
Call SQLFreeHandle(SQL_HANDLE_ENV, hEnv)
End If
GetUserSystemDSN = tODBC
End Function
-
Hola, que yo sepa se pueden tener las 2 versiones instaladas al mismo tiempo, por lo tanto no se deberia modificar la cadena, con instalar el odbc que necesites listo.
-
Creo que se pueden tener instalados las dos versiones. Pero yo recomendaría que obligues a usar una versión en especifico.
Aunque de igual manera pinta bien. Yo pensaba que era tipo algo para usar ODBC por apí y dejar los recordset :P
-
Si, el tema es que si la version del conector es diferente a la del programa, el mismo deja de funcionar... y esto no me parece logico, lo mismo si tenes que instalar una version en particular, digo seria bueno que el usuario pueda tener la ultima y mas actualizada sin que esto impida el uso del programa.
Saludos