Usar base de datos de SQL Server 2005 desde Visual Basic 6.0

Tanto una base normal como un fichero .mdf

 

Publicado el  26/May/2007
Revisado el 26/May/2007
Autor: Guillermo 'guille' Som

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.


 

Introducción:

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.

 

Requisitos para el ejemplo

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.

 

El código de ejemplo

En el código de ejemplo, te voy a mostrar las dos formas de acceder.

1.- Acceder a una base de una instancia

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

 

2- Acceder a una base de un fichero

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

 


Volver a la página del ADO y VB6

ir al índice del Guille