En este artículo te explico cómo usar una base de datos de SQL Server 2005 con Visual Basic 6.0, tanto desde un fichero .mdf como en una base de una instancia de SQL Server 2005 o SQL Server 2005 Express.
Cuando instalas SQL Server 2005 (tanto la versión completa como la versión Express), se añade un nuevo proveedor de bases de datos OLEDB: SQLNCLI. Ese proveedor lo tendrás que usar en tus cadenas de conexión en lugar de SQLOLEDB que es el que usarás para acceder a una base de datos de SQL Server 2000 con Visual Basic 6.0.
En este ejemplo vamos a usar un control FlexGrid para
asignar un Recordset y mostrar los datos directamente.
Por tanto, tendrás que crear un nuevo proyecto de Visual Basic 6.0 y agregar
ese componente, el cual se muestra como: Microsoft Hierarchical
FlexGrid Control 6.0 (SP4) (OLEDB) y en realidad es el control
MSHFLXGD.OCX.
También tendrás que añadir una referencia a la librería de OLEDB, en mi caso he usado Microsoft ActiveX Data Objects 2.8 Library, pero supongo que con otra versión anterior funcionará, pero no lo he probado, y como esa referencia está disponible después de instalar el SQL Server 2005 Express, pues... ¿para qué complicarnos?
Dependiendo de la forma en que quieras acceder a la base de datos, necesitarás (como es de suponer) una base de datos de SQL Server 2005, por ejemplo la base de datos "pubs".
Si lo que pretendes es acceder a un fichero con la extensión .mdf, pues tendrás que tener el fichero al que quieres acceder. Es decir una base de datos de SQL Server 2005 en un fichero físico, el cual puedes guardar en el mismo directorio del ejecutable o donde más te plazca, que esa es una de las ventajas de SQL Server 2005: el poder usar un fichero de base de datos directamente, con lo que no necesitas distribuir una base de tipo Access.
En el código de ejemplo, te voy a mostrar las dos formas de acceder.
En el caso de la base de datos "pubs", la cadena de conexión será la siguiente:
Provider=SQLNCLI; Initial Catalog=pubs; Data Source=(local)\SQLEXPRESS; integrated security=SSPI; persist security info=True;
En este caso, la base de datos se supone que está en la instancia
SQLEXPRESS del servidor del equipo actual, si no es así, tendrás que cambiar
el valor de Data Source.
La base de datos es pubs, si no fuera esa, cambia el nombre asignado a
Initial Catalog.
La autenticación usada es la de Windows, si no fuera esa, tendrás que
indicar el usuario y el password y cambiar adecuadamente el valor de
Integrated Security, aquí tienes un ejemplo de
cómo "formar" una cadena de conexión a una base de datos de SQL
Server.
Suponiendo que la conexión a la base de datos la hacemos desde el evento Click de un botón y que la cadena de selección es SELECT * FROM authors, para mostrar los datos en el control FlexGrid (llamado MSHFlexGrid1), el código sería el siguiente:
Private Sub btnConectar_Click() ' La conexión a la base de datos Dim cn As ADODB.Connection Set cn = New ADODB.Connection ' Para la cadena de selección Dim sSelect As String ' Para una base de datos normal: sSelect = "SELECT * FROM authors" cn.Open "Provider=SQLNCLI; " & _ "Initial Catalog=pubs; " & _ "Data Source=(local)\SQLEXPRESS; " & _ "integrated security=SSPI; persist security info=True;" ' El recordset para acceder a los datos Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset ' Abrir el recordset de forma estática, no vamos a cambiar datos rs.Open sSelect, cn, adOpenStatic ' Permitir redimensionar las columnas MSHFlexGrid1.AllowUserResizing = flexResizeColumns ' Asignar el recordset al FlexGrid Set MSHFlexGrid1.DataSource = rs rs.Close cn.Close End Sub
Para acceder a una base de datos que está en un fichero, necesitarás indicar la ruta (path) en la que está ese fichero con la extensión .mdf. En este ejemplo, esa ruta está en la variable sBase.
La cadena de conexión sería la siguiente:
Provider=SQLNCLI; AttachDBFileName= ruta completa del fichero de la base de datos; Data Source=(local)\SQLEXPRESS; integrated security=SSPI; persist security info=True;
Como es de suponer, el nombre (y el directorio completo) de la base de datos es lo que tienes que asignar a AttachDBFileName. Además debes indicar en Data Source el nombre de la instancia de SQLEXPRESS que se usará para acceder a esa base de datos, al menos debes indicar una instancia válida.
En el siguiente código tienes cómo usar una base de datos llamada PruebaPrecios.mdf que está en un directorio llamado bases del disco E. Esa base de datos debe tener una tabla llamada Clientes que es la que se usa en el siguiente ejemplo, que como en el código del ejemplo anterior, se ejecuta desde el evento Click de un botón y asigna los datos al FlexGrid que tenemos en el formulario.
Private Sub btnConectar_Click() ' La conexión a la base de datos Dim cn As ADODB.Connection Set cn = New ADODB.Connection ' Para la cadena de selección Dim sSelect As String ' Para usar un fichero directamente: Dim sBase As String ' Poner aquí el path y el nombre de la base sBase = "E:\bases\PruebaPrecios.mdf" ' Y la cadena de selección adecuada sSelect = "SELECT * FROM Clientes" ' cn.Open "Provider=SQLNCLI; " & _ "AttachDBFileName=" & sBase & "; " & _ "Data Source=(local)\SQLEXPRESS; " & _ "integrated security=SSPI; persist security info=True;" ' El recordset para acceder a los datos Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset ' Abrir el recordset de forma estática, no vamos a cambiar datos rs.Open sSelect, cn, adOpenStatic ' Permitir redimensionar las columnas Me.MSHFlexGrid1.AllowUserResizing = flexResizeColumns ' Asignar el recordset al FlexGrid Set Me.MSHFlexGrid1.DataSource = rs rs.Close cn.Close End Sub
Y eso es todo, recuerda que la parte importante es saber el nombre del
proveedor OLEDB que tenemos que usar, que en el caso de SQL Server 2000 es
SQLOLEDB y en el caso de SQL Server 2005 es SQLNCLI.
Además debes indicar el nombre de la instancia de SQL Server adecuada, pero
por lo general podrás usar el nombre que te he mostrado en el código de
ejemplo.
Por lo demás, el código a usar una vez que hemos conectado será el que habitualmente usemos en nuestras aplicaciones de acceso a datos.
Espero que te sea de utilidad.
Nos vemos.
Guillermo