Llenar un ComboBox II

Tengo aún pendiente la clase de LlenarCombo que comenté en una de las primeras entradas de este blog. La verdad es que he tenido Visual Basic muy abandonado. A ver si me pongo las pilas y termino la dichosa aplicación de Anime en VB2005 y hago la de gestión doméstica en VB2008 antes de que me arruine.

Pero, primero, lo prometido es deuda: ejercicio de egocentrismo concentrado y autopropaganda. O sea, my first class: LlenarComboBox. La idea, pequeño recordatorio, era rellenar unos combos o listboxes con la clave primaria y un campo descriptor de su tabla correspondiente y luego enlazar el combo (o listbox) al dataset tipado con el que vamos a trabajar mediante un bindingsource. De este modo, en el método de carga de datos del formulario tendría algo como esto:

  • Abrir conexión con la BDD.
  • Llenar los combos.
  • Llenar el dataset tipado con su tableadapter correspondiente, aprovechando la conexión abierta antes.
  • Cerrar la conexión.
  • Ligar el dataset con el bindingsoure y el selectedvalue del combo con el campo correspondiente.

Vale, no es ninguna maravilla de idea y habrá a quien le produzca sarpullidos la idea de usar un dataset tipado, pero es de las primeras cosas que hice en VB2005, cuando intentaba comprender cómo funciona su acceso a datos, que cuando vienes de VB6 y ADO es un infienno y lo que deseas es tirar el dataset a la basura y usar un recordset.

Viendo lo que quería que hicera la clase, lo que necesitaba era un método Conectar que me abriera la conexión, un método Desconectar que la cerrara, una propiedad para pasarle la cadena de conexión y un método que llenara el combo pasándole como parámetros el combo y el nombre de la tabla que contenía los datos. Simple y sencillo.

Luego me emocioné y ya no fue tan simple y sencillo, pero bueno… Por ejemplo, originalmente la única conexión que hacía era a una base de datos Access, pero la primavera pasada me hizo falta en el trabajo que se conectara a una base de datos SQL Server, así que modifiqué toda la clase para permitir conexiones tanto a través de OleDB como de SQL y, a la vez, dejar abierta la posibilidad de nuevas conexiones. Para distinguir las conexiones no me compliqué mucho la vida: he definido una estructura que tiene dos campos, el identificador de la base de datos (uso una enumeración porque soy muy perro) y una string con un texto identificativo de la cadena de conexión del tipo de conexión dado. En el constructor de la clase relleno un array de esta estructura con los casos posibles. La idea es bastante tonta: cuando le pase la cadena de conexión a la clase, miro. Si presente “Jet.OLEDB” es que voy a conectarme a una base de datos ACCESS, y así.

El resto de las variables privadas, como puede verse, son los objetos conexión necesarios, una string que contendrá la cadena de conexión y una variable del tipo enumeración antes definida que indicará el tipo de base de datos que corresponde a la cadena de conexión almacenada. En resumen, el código siguiente:

Imports System.Data
Imports System.Windows.Forms
Imports System.Xml

Public Class LlenarComboBox

#Region " Declaraciones "

    'Declaración de enumeraciones y estructuras previas
    Private Enum QueBase As Integer
        NoSel = -1
        Access
        SQL
    End Enum
    Private Structure TipoBDD
        Public Tipo As QueBase
        Public Presenta As String 'texto reconocible de la cadena 
        'de conexión que nos permita identificar el tipo de BDD
    End Structure
    'Declaración de variables
    Private _cnOleDb As OleDb.OleDbConnection
    Private _cnSQL As SqlClient.SqlConnection
    Private _Conexion As String 'La cadena de conexión
    Private _BDD As QueBase = QueBase.NoSel
    Private _TipoConexion() As TipoBDD
#End Region
'Relleno del array Tipo de Conexion al
'inicializar una instancia de la clase
    Public Sub New()
        ReDim _TipoConexion(2)
        _TipoConexion(0).Tipo = QueBase.Access
        _TipoConexion(0).Presenta = "Jet.OLEDB"
        _TipoConexion(1).Tipo = QueBase.SQL
        _TipoConexion(1).Presenta = "Initial Catalog" 'Server puro
        _TipoConexion(2).Tipo = QueBase.SQL
        _TipoConexion(2).Presenta = "AttachDbFilename" 'Archivo bdd
    End Sub

Y por hoy me temo que lo dejo, que es tarde. Mañana, las propiedades públicas y los métodos de conexión y desconexión. Hasta entonces, nos vemos en el Gentleman Loser.

Deja un comentario