ir al indice de colaboraciones

Búsqueda Por Similitud Con SQL


Ejemplo hecho Con Una Base de Datos en Microsoft Access XP

Fecha: 19/Feb/2005 (18/02/2005)
Autor: Marcos Donalisio ([email protected])

 


Este ejemplo es muy sencillo lo unico que se hizo es establecer una conexión a la Base de Datos y Llenar Una Lista con Los datos Obtenidos mediante una Consulta SQL (Lenguaje Estructurado de Consulta).

La Consulta es Muy Simple y para que busque por similitud se utilizar la Clave LIKE. Esta palabra le dice a SQL que Compare la Columna Nombre con el Patron que nosotros le Pasamos al escribir en el TextBox, entonces si nosotros ponemos (Mar) con un Signo Porcentual pegado, sin los paréntesis, obtendríamos los siguientes Nombres (Marcos, Mariano) y todos aquellos que empiezen con Mar mas Cualquier cosa

Bueno Aquí esta el Código (Em Muy Sencillo), El Formulario cuenta con un Label (lblNombre), Una ListBox (lstNombre), y Un TextBox (txtNombre)

 

Public Class Form1
   Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

   Public Sub New()
      MyBase.New()

      'El Diseñador de Windows Forms requiere esta llamada.
      InitializeComponent()

      'Agregar cualquier inicialización después de la llamada a InitializeComponent()

   End Sub

   'Form reemplaza a Dispose para limpiar la lista de componentes.
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
      If disposing Then
         If Not (components Is Nothing) Then
            components.Dispose()
         End If
      End If
      MyBase.Dispose(disposing)
   End Sub

   'Requerido por el Diseñador de Windows Forms
   Private components As System.ComponentModel.IContainer

   'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
   'Puede modificarse utilizando el Diseñador de Windows Forms. 
   'No lo modifique con el editor de código.
   Friend WithEvents lblNombre As System.Windows.Forms.Label
   Friend WithEvents txtNombre As System.Windows.Forms.TextBox
   Friend WithEvents lstNombre As System.Windows.Forms.ListBox
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
      Me.lblNombre = New System.Windows.Forms.Label
      Me.txtNombre = New System.Windows.Forms.TextBox
      Me.lstNombre = New System.Windows.Forms.ListBox
      Me.SuspendLayout()
      '
      'lblNombre
      '
      Me.lblNombre.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
      Me.lblNombre.Location = New System.Drawing.Point(8, 24)
      Me.lblNombre.Name = "lblNombre"
      Me.lblNombre.Size = New System.Drawing.Size(72, 23)
      Me.lblNombre.TabIndex = 0
      Me.lblNombre.Text = "Nombre"
      '
      'txtNombre
      '
      Me.txtNombre.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
      Me.txtNombre.Location = New System.Drawing.Point(80, 24)
      Me.txtNombre.Name = "txtNombre"
      Me.txtNombre.Size = New System.Drawing.Size(176, 26)
      Me.txtNombre.TabIndex = 1
      Me.txtNombre.Text = ""
      '
      'lstNombre
      '
      Me.lstNombre.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
      Me.lstNombre.ItemHeight = 20
      Me.lstNombre.Location = New System.Drawing.Point(80, 64)
      Me.lstNombre.Name = "lstNombre"
      Me.lstNombre.Size = New System.Drawing.Size(176, 184)
      Me.lstNombre.TabIndex = 2
      '
      'Form1
      '
      Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
      Me.ClientSize = New System.Drawing.Size(304, 266)
      Me.Controls.Add(Me.lstNombre)
      Me.Controls.Add(Me.txtNombre)
      Me.Controls.Add(Me.lblNombre)
      Me.Name = "Form1"
      Me.Text = "Busqueda Por Similitud Con SQL"
      Me.ResumeLayout(False)

   End Sub

#End Region

   Private Conexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Clientes.mdb"

   Private Sub txtNombre_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtNombre.KeyUp
      Dim conn As OleDbConnection
      Dim da As OleDbDataAdapter
      Dim ds As DataSet
      Try
         Dim sql As String = "SELECT Nombre FROM Clientes WHERE Nombre LIKE '" & Me.txtNombre.Text & "%'"
         'El Porcentaje vendría a ser como el asterisco cuando uno hace una búsqueda
         'de algún archivo en Windows y También se llama Caracter Comodín
         'entonces si hacemos una Consulta de Este Nombre (Marc%) va a buscar
         'Todas aquellas palabras de la Columna que empiecen con Marc 
         'seguido de cualquier cosa
         conn = New OleDbConnection(Conexion) 'Creamos la Conexión
         conn.Open() 'Abrimos la Conexion
         da = New OleDbDataAdapter(sql, conn) 'Creamos el DataAdapter
         ds = New DataSet 'Creamos el DataSet
         da.Fill(ds, "Clientes") 'Llenamos el DataSet
         conn.Close() 'Cerramos Conexión
         conn.Dispose() 'Liberamos Recursos
         'puse esto porque me tiraba una excepción de que una ves que esta
         'establecido el DataSource no se pueden modificar los Items de la Lista
         Me.lstNombre.DataSource = Nothing
         Me.lstNombre.Items.Clear() 'Limpiamos la Lista

         Me.lstNombre.DataSource = ds.Tables("Clientes").DefaultView
         Me.lstNombre.ValueMember = "Nombre"
         Me.lstNombre.DisplayMember = "Nombre"
      Catch ex As Exception
         MessageBox.Show(ex.Message)
      End Try
   End Sub
End Class


Espacios de nombres usados en el código de este artículo:

System.Data.OleDb


ir al índice principal

Fichero con el código de ejemplo: Marcos_Busqueda_Por_Similitud_Con_Sql.zip - 24 KB