Acceder a base de datos SQL Server con Visual Basic

Estoy construyendo una hoja excel que tiene varias macros asociadas. Ahora quiero crear una en la que al pulsar un botón recupere ciertos datos almacenados en una base de datos SQL Server.
He estado mirando en internet cómo puedo hacer esto y he visto ejemplos del tipo:
Const MS_SQL_SERVER = "SQLOLEDB.1"
Set BBDD = New ADODB.Connection
BBDD.IsolationLevel = adXactCursorStability
BBDD.CursorLocation = adUseServer
BBDD.Mode = adModeReadWrite
BBDD.ConnectionString = "Provider=" & MS_SQL_SERVER & ";Persist Security Info=False;User ID=" & User & ";Initial Catalog=" & Catalog & ";Data Source=" & Server & ";Password=" & Password
BBDD. Open
Sin embargo, al intentar poner este código en la segunda línea me da el error: 'User-defined type not defined'.
Por favor, nunca he hecho una conexión de este tipo, ¿podrías explicarme cómo puedo hacerlo?

1 respuesta

Respuesta
1
Crea una conexión UDL como indico en este documento.
http://sites.google.com/site/expertmrtool/home/archivos-de-ayuda-para-vb6
Y te debería funcionar.
Hola,
Me ha parecido muy interesante el documento y he generado el ConnectionString como me lo has dicho, pero el error que tengo viene de mucho antes.
La línea que no me reconoce es: Set BBDD = New ADODB.Connection y el error que me da es : 'User-defined type not defined'. ¿Hay que configurar alguna propiedad en el editor para que me reconozca este tipo de conexiones?
He testeado el acceso a la base de datos, según tu documento y me ha resultado correcta.
Muchas gracias,
Debes tener las referencias de ADO si no no te las cogerá, quizás te falten. Por si acaso
Instala los MDAC que te los puede bajar de la web de microsoft.
He conseguido que me reconozca la variable añadiendo en el menu Tools > References, el valor Microsoft ActiveX Data Objects 2.0 Library y Microsoft ActiveX Data Objects Recorsets 2.8 Library.
De todas formas, me gustaría saber la diferencia de acceder a base de datos de las siguientes maneras:
1º) Con el código de la pregunta inicial:
Const MS_SQL_SERVER = "SQLOLEDB.1"
Set BBDD = New ADODB.Connection
BBDD.IsolationLevel = adXactCursorStability
BBDD.CursorLocation = adUseServer
BBDD.Mode = adModeReadWrite
BBDD.ConnectionString = "Provider=" & MS_SQL_SERVER & ";Persist Security Info=False;User ID=" & User & ";Initial Catalog=" & Catalog & ";Data Source=" & Server & ";Password=" & Password
BBDD.Open
2º) De la forma:
 With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
      "ODBC;DSN=NombreDNS;Description=BBDD Descripcion;UID=NombreUsuario;;APP=Microsoft Office 2003;WSID=NombreWSID;DATABASE=NombreBD;LA" _
    '    ), Array("NGUAGE=Español;Network=XXXXXXXX;Address=XX.XXX.XXX.XXX,puerto")), _
    '    Destination:=Range("I1"))
......
End With
Muchas gracias
La diferencia es la tecnología.
En el primer caso utilizas las DLL de ADO y en el segundo las de ODBC. Son tecnologías diferentes que sirven para lo mismo. ADO es más moderna y es la recomendada por Microsoft.
ODBC fue el primer sistema capaz de establecer una interfaz común de hablar con las distintas BBDD del mercado pero se ha sustituido por ADO que es más moderno y más capaz.
A efectos prácticos si es una BBDD pequeña no hay ninguno. En BBDD grandes ADO da más juego, dispone de más funcionalidad y es más rápido pero eso es todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas