Conexion VB - SQL SERVER
Hola, que debo hacer si quiero conectarme via ODBC desde Visual Basic 5.0 a una base de datos de SQL SERVER?
'++++++++++++++++++++++
1) Conexion directa al SQL SERVER (sin usar DSN's)...
Set oConnection = New Connection
With oConnection
.Provider = "sqloledb"
.Properties("Data Source").Value = "SQL_SERVER_NAME"
.Properties("Initial Catalog").Value = "BaseDeDatosDefault"
.Properties("User ID").Value = "Usuario"
.Properties("Password").Value = "Password"
.Open
End With
'+++++++++++++++++++++++
2) Conexion utilizando DSN (tienes que generar el DSN hacia el SQLServer en tu control-panel)...
Dim cString as String
Set oConnection = New Connection
cString = "DSN=" & "DSN_Name" & _
";UID=" & "Usuario" & _
";PWD=" & "Password" & _
";DATABASE=" & "BaseDeDatosDefault"
oConnection.ConnectionString = cString
oConnection.Open
'+++++++++++++++++++++++++
En lugar de escribir todo el codigo del metodo elegido cada vez que vas a abrir la conexion, puedes poner dicho codigo en una funcion global (en un modulo) y llamar a dicha funcion.
Ejemplo con el metodo 1:
Public Function ConectarSQL() as Connection
On Error GOTO Error_Coneccion
Set ConectarSQL = New Connection
With ConectarSQL
.Provider = "sqloledb"
.Properties("Data Source").Value = "SQL_SERVER_NAME"
.Properties("Initial Catalog").Value = "BaseDeDatosDefault"
.Properties("User ID").Value = "Usuario"
.Properties("Password").Value = "Password"
.Open
End With
Exit Function
Error_Coneccion:
Msgbox "Error (" & Err.Number & ")" & vbcrlf & _
Err.Descripcion & vbcrlf & _
"Al Conectar A SQL SERVER"
Set ConectarSQL = Nothing
Exit Function
End Function
'++++
Ejemplo con el metodo 2:
Public Function ConectarSQL() as Connection
ON ERROR GOTO Error_Coneccion
Dim cString as String
Set ConectarSQL = New Connection
cString = "DSN=" & "DSN_Name" & _
";UID=" & "Usuario" & _
";PWD=" & "Password" & _
";DATABASE=" & "BaseDeDatosDefault"
ConectarSQL.ConnectionString = cString
ConectarSQL.Open
Exit Function
Error_Coneccion:
Msgbox "Error (" & Err.Number & ")" & vbcrlf & _
Err.Descripcion & vbcrlf & _
"Al Conectar A SQL SERVER"
Set ConectarSQL = Nothing
Exit Function
End Function
'+++
Ya en tu codigo, solo basta llamar a la funcion y probar si la coneccion retorno una coneccion o si retorna NOTHING, en cuyo caso, la coneccion fue erronea...
Por ejemplo:
Dim oRecordset as Recordset
Dim oConeccion as Connection
SET oConeccion = ConectarSQL
If oConeccion is nothing then
exit sub
endif
Set oRecordset = New Recordset
oRecordset.open "SELECT * FROM Tabla1", oConeccion, adOpenKeyset , adLockOptimistic
If not (orecordset.eof) then
oRecordset.MoveLast
EndIf
....
oRecordset.Close
oConeccion.Close
set oConeccion = nothing
set oRecordset = nothing
End Sub
1) Conexion directa al SQL SERVER (sin usar DSN's)...
Set oConnection = New Connection
With oConnection
.Provider = "sqloledb"
.Properties("Data Source").Value = "SQL_SERVER_NAME"
.Properties("Initial Catalog").Value = "BaseDeDatosDefault"
.Properties("User ID").Value = "Usuario"
.Properties("Password").Value = "Password"
.Open
End With
'+++++++++++++++++++++++
2) Conexion utilizando DSN (tienes que generar el DSN hacia el SQLServer en tu control-panel)...
Dim cString as String
Set oConnection = New Connection
cString = "DSN=" & "DSN_Name" & _
";UID=" & "Usuario" & _
";PWD=" & "Password" & _
";DATABASE=" & "BaseDeDatosDefault"
oConnection.ConnectionString = cString
oConnection.Open
'+++++++++++++++++++++++++
En lugar de escribir todo el codigo del metodo elegido cada vez que vas a abrir la conexion, puedes poner dicho codigo en una funcion global (en un modulo) y llamar a dicha funcion.
Ejemplo con el metodo 1:
Public Function ConectarSQL() as Connection
On Error GOTO Error_Coneccion
Set ConectarSQL = New Connection
With ConectarSQL
.Provider = "sqloledb"
.Properties("Data Source").Value = "SQL_SERVER_NAME"
.Properties("Initial Catalog").Value = "BaseDeDatosDefault"
.Properties("User ID").Value = "Usuario"
.Properties("Password").Value = "Password"
.Open
End With
Exit Function
Error_Coneccion:
Msgbox "Error (" & Err.Number & ")" & vbcrlf & _
Err.Descripcion & vbcrlf & _
"Al Conectar A SQL SERVER"
Set ConectarSQL = Nothing
Exit Function
End Function
'++++
Ejemplo con el metodo 2:
Public Function ConectarSQL() as Connection
ON ERROR GOTO Error_Coneccion
Dim cString as String
Set ConectarSQL = New Connection
cString = "DSN=" & "DSN_Name" & _
";UID=" & "Usuario" & _
";PWD=" & "Password" & _
";DATABASE=" & "BaseDeDatosDefault"
ConectarSQL.ConnectionString = cString
ConectarSQL.Open
Exit Function
Error_Coneccion:
Msgbox "Error (" & Err.Number & ")" & vbcrlf & _
Err.Descripcion & vbcrlf & _
"Al Conectar A SQL SERVER"
Set ConectarSQL = Nothing
Exit Function
End Function
'+++
Ya en tu codigo, solo basta llamar a la funcion y probar si la coneccion retorno una coneccion o si retorna NOTHING, en cuyo caso, la coneccion fue erronea...
Por ejemplo:
Dim oRecordset as Recordset
Dim oConeccion as Connection
SET oConeccion = ConectarSQL
If oConeccion is nothing then
exit sub
endif
Set oRecordset = New Recordset
oRecordset.open "SELECT * FROM Tabla1", oConeccion, adOpenKeyset , adLockOptimistic
If not (orecordset.eof) then
oRecordset.MoveLast
EndIf
....
oRecordset.Close
oConeccion.Close
set oConeccion = nothing
set oRecordset = nothing
End Sub
Ahora bien, releyendo tu pregunta...
Si lo que necesitas es utilizar una base de datos de access y conectar al sql via ODBC (DSN), entonces aplica lo siguiente....
Necesitas vincular cada tabla en tu base de datos MDB para accesarla de manera tradicional.. Esto lo puedes hacer manualmente desde el mismo ACCESS o bien puedes hacerlo por codigo ....
Este seria el codigo para vincular cada tabla...
'++++++++++
Dim cString as String
Dim oDatabase as Database
Dim oTablaDef as TableDef
set oDatabase = OpenDatabase("C:Tu_Archivo_MDB.mdb")
cString = "ODBC;DSN=" & "DSN_Name" & _
"UID=" & "Usuario" & _
"PWD=" & "Password" & _
"DATABASE=" & "BaseDeDatosDefault"
Set oTablaDef = oDatabase.CreateTableDef("Tabla1", dbAttachSavePWD, "dbo.Tabla1", cString)
oDatabase.TableDefs.Append oTablaDef
'+++++++++++++++
Por supuesto, antes de vincular cada tabla, es necesario que verifiques si no existe previamente la misma en tu archivo MDB; si existiese, sera necesario eliminarla primero o se generara un error al tratar de agregarla nuevamente.
Ojo: el atributo dbAttachSavePWD especificado al crear la tabla vinculada permite que el usuario y password que especificas se guarden con el vinculo al agregar la tabla en tu MDB; de esa manera no se abre la ventana de ODBC solicitando el password a tu usuario cada vez que se abre un recordset correspondiente a dicha tabla...
Una vez vinculadas, sigues utilizando tu MDB como lo haces normalmente; solo considera que no vas a tener disponible el metodo .SEEK y la propiedad .INDEX (en caso de que actualmente los utilices)...
Si lo que necesitas es utilizar una base de datos de access y conectar al sql via ODBC (DSN), entonces aplica lo siguiente....
Necesitas vincular cada tabla en tu base de datos MDB para accesarla de manera tradicional.. Esto lo puedes hacer manualmente desde el mismo ACCESS o bien puedes hacerlo por codigo ....
Este seria el codigo para vincular cada tabla...
'++++++++++
Dim cString as String
Dim oDatabase as Database
Dim oTablaDef as TableDef
set oDatabase = OpenDatabase("C:Tu_Archivo_MDB.mdb")
cString = "ODBC;DSN=" & "DSN_Name" & _
"UID=" & "Usuario" & _
"PWD=" & "Password" & _
"DATABASE=" & "BaseDeDatosDefault"
Set oTablaDef = oDatabase.CreateTableDef("Tabla1", dbAttachSavePWD, "dbo.Tabla1", cString)
oDatabase.TableDefs.Append oTablaDef
'+++++++++++++++
Por supuesto, antes de vincular cada tabla, es necesario que verifiques si no existe previamente la misma en tu archivo MDB; si existiese, sera necesario eliminarla primero o se generara un error al tratar de agregarla nuevamente.
Ojo: el atributo dbAttachSavePWD especificado al crear la tabla vinculada permite que el usuario y password que especificas se guarden con el vinculo al agregar la tabla en tu MDB; de esa manera no se abre la ventana de ODBC solicitando el password a tu usuario cada vez que se abre un recordset correspondiente a dicha tabla...
Una vez vinculadas, sigues utilizando tu MDB como lo haces normalmente; solo considera que no vas a tener disponible el metodo .SEEK y la propiedad .INDEX (en caso de que actualmente los utilices)...
