Conexion VB - SQL SERVER

juanoyuela
22 de Julio del 2004
Hola, que debo hacer si quiero conectarme via ODBC desde Visual Basic 5.0 a una base de datos de SQL SERVER?

semperfimxl
22 de Julio del 2004
'++++++++++++++++++++++

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


semperfimxl
22 de Julio del 2004
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)...

juanoyuela
22 de Julio del 2004
Muchas Gracias...