Búsqueda Por Similitud Con SQL
Fecha: 19/Feb/2005 (18/02/2005)
|
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
Fichero con el código de ejemplo: Marcos_Busqueda_Por_Similitud_Con_Sql.zip - 24 KB