busqueda en un datagrid textbox y commandbutton

6
Ejemplo 1 Formulario para buscar en un DataGrid mediante un TextBox y Commandbuttons. El ejemplo para buscar , utiliza el método Find del recordset. Para buscar en el DataGrid, se debe indicar que campo se va a tener en cuenta para la busqueda. Dichos campos se añaden en un control Combobox Nota: asi como está hecho el ejemplo, solo se puede buscar y especificar un campo que sea de tipo string, si no dará error en el método Find, por ejemplo si se busca en un campo de tipo Numérico También hay un CheckBox para indicar de que forma buscar, es decir buscar el registro teniendo en cuanta la palabra completa, o parte de la cadena Formulario Ejemplo para buscar en un DataGrid con el método Find del recordset Controles: 1) La referencia a Ado 2) Un control DataGrid (DataGrid1) 3) Un control Textbox (Text1) _ 4) Dos CommandButon (Command1 y Command2) 5) Un Combobox (Combo1 - Para los campos) 6) Un CheckBox 7) Indicar en la constantesCONNECTION_STRING la cadena de conexión para la b ase de datos 8) Indicar en el FormLoad, la consulta Sql para el recordset

Upload: jorge-perez

Post on 30-Jun-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Busqueda en un DataGrid TextBox y Commandbutton

Ejemplo 1Formulario para buscar en un DataGrid mediante un TextBox y Commandbuttons.El ejemplo para buscar , utiliza el método Find del recordset. Para buscar en el DataGrid, se debe indicar que campo se va a tener en cuenta para la busqueda. Dichos campos se añaden en un control ComboboxNota: asi como está hecho el ejemplo, solo se puede buscar y especificar un campo que sea de tipo string, si no dará error en el método Find, por ejemplo si se busca en un campo de tipo NuméricoTambién hay un CheckBox para indicar de que forma buscar, es decir buscar el registro teniendo en cuanta la palabra completa, o parte de la cadena Formulario

 Ejemplo para buscar en un DataGrid con el método Find del recordset  

Controles: 1) La referencia a Ado2) Un control DataGrid (DataGrid1)  3) Un control Textbox (Text1) _  4) Dos CommandButon (Command1 y Command2)  5) Un Combobox (Combo1 - Para los campos) 6) Un CheckBox  7) Indicar en la constantesCONNECTION_STRING la cadena de conexión para la base de  datos   8) Indicar en el FormLoad, la consulta Sql para el recordset  

Código fuente en el formulario

'ConnectionString  Private Const s_CONNECTION_STRING As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Archivos de programa" & "\Microsoft Visual Studio\VB98\" & "NWIND.MDB;Persist Security Info=False"  

'Colores de fondo para los textbox mientras se busca  Private Const COLOR_TEXTBOX_NO_FOUND As Long = &H8080FF  Private Const COLOR_TEXTBOX_FOUND As Long = &HC0FFFF  

Page 2: Busqueda en un DataGrid TextBox y Commandbutton

Private Const COLOR_TEXTBOX_NORMAL As Long = vbWhite    'Variable de tipo Recordset y con evento  Private WithEvents Recordset As ADODB.Recordset  

'Botón para buscar hacia atrás  Private Sub Command1_Click()        'Si llega al final posiciona el recordset en el último registro  If Recordset.EOF Then  Recordset.MoveLast  End If  'Habilita y deshabilita los command de buscar  If Recordset.BOF Or Recordset.AbsolutePosition <= 1 Then Command1.Enabled = False  Command2.Enabled = True  Command2.SetFocus  Exit Sub  End If        Dim Anterior As Long  'guarda la posición del Registro anterior  Anterior = Recordset.AbsolutePosition   'Mueve el cursor  Recordset.Move 0, Recordset.Bookmark - 1        'Busca en cualquier parte de la cadena  If Check1.Value = 0 Then  Recordset.Find Combo1.Text & " LIKE '*" + Text1.Text + "*'", , adSearchBackward   'Busca la cadena completa  ElseIf Check1.Value = 1 Then  Recordset.Find Combo1.Text & "='" + Text1.Text + "'", , adSearchBackward  End If         Command2.Enabled = True  'Si llega al principio, selecciona la última fila encontradaIf Recordset.BOF Then  Recordset.AbsolutePosition = Anterior  Command1.Enabled = False  Command2.SetFocus  End If  End Sub  

'Botón para buscar hacia adelante  Private Sub Command2_Click()  ‘Si llega al principio posiciona el recordset en el primer registroIf Recordset.BOF Then  Recordset.MoveFirst  End If      'Habilita y deshabilita los botones para buscar  If Recordset.EOF Or Recordset.AbsolutePosition >= Recordset.RecordCount Then  Command2.Enabled = False  Command1.Enabled = True  Command1.SetFocus  Exit Sub  End If  

Page 3: Busqueda en un DataGrid TextBox y Commandbutton

Dim Anterior As Long  'Almacena la fila actual  Anterior = Recordset.AbsolutePosition  'Mueve un registro hacia atrás  Recordset.Move 0, Recordset.Bookmark + 1  

      'Busca en cualquier parte de la cadena  If Check1.Value = 0 Then  Recordset.Find Combo1.Text & " LIKE '*" + Text1.Text + "*'", , adSearchForward  'Busca la cadena completa  ElseIf Check1.Value = 1 Then  Recordset.Find Combo1.Text & "='" + Text1.Text + "'", , adSearchForward  End If  

      Command1.Enabled = True  

      If Recordset.EOF Then  Command2.Enabled = FalseCommand1.SetFocus  Recordset.AbsolutePosition = Anterior  End If  End Sub  

    

Private Sub Form_Load()  'Variable para la conexión de Ado  Dim db As ADODB.Connection  

      'Nuevo objeto Connection  Set db = New ADODB.Connection  

      db.CursorLocation = adUseClient  

      'Abre la base de datos pasando la cadena de conexión  db.Open s_CONNECTION_STRING  

      'crea un Recordset  Set Recordset = New Recordset  

      'Abre el Recordset con la consulta Sql  Recordset.Open "Select [NombreContacto]," & "[NombreCompañía]," & "[CargoContacto] " & "From Proveedores Order By NombreContacto Asc", db, adOpenStatic, adLockOptimistic  

      Dim i As Integer  

      'Recorre los campos del recordset para añadirlos al combobox   'Nota: los campos deben ser de tipo String  For i = 0 To Recordset.Fields.Count - 1  Combo1.AddItem Recordset.Fields.Item(i).Name  Next i

      'Selecciona el campo 1Combo1.ListIndex = 0  

       'Engancha el recordset al datagrid  Set DataGrid1.DataSource = Recordset  

Page 4: Busqueda en un DataGrid TextBox y Commandbutton

'Opcional . esto hace que se seleccione la fila completa en el DataGrid  DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell  

      Text1 = ""  'caption de los controles  Command1.Caption = "<< Buscar Anterior”  Command2.Caption = "Buscar Siguiente >>"  Check1.Caption = "Buscar palabra completa"  End Sub  

  Private Sub Text1_Change()  

      If Text1 <> "" Then  

                  'Habilita los botones para buscar hacia atrás y hacia adelante  Command1.Enabled = True  Command2.Enabled = True          Dim Actual As Long   'almacena la fila actual, por si no so se encontró vuelve a posicionar el recordset en dicha fila  If Not Recordset.EOF And Not Recordset.BOF Then   Actual = Recordset.AbsolutePosition  End If             'Busca en cualquier parte de la cadena  If Check1.Value = 0 Then  Recordset.Find Combo1.Text & " LIKE '*" & Text1.Text & "*'", , adSearchForward   'Busca la Cadena completa  ElseIf Check1.Value = 1 Then  Recordset.Find Combo1.Text & "='" & Text1.Text & "'", , adSearchForward  End If  

          'Color del fondo del textbox  If Not Recordset.EOF And Not Recordset.BOF Then  Text1.BackColor = COLOR_TEXTBOX_FOUND  Else  Text1.BackColor = COLOR_TEXTBOX_NO_FOUNDEnd If  

          If Recordset.BOF Or Recordset.EOF Then  Recordset.AbsolutePosition = Actual  End If   'Si el textbox está vacío, posiciona el recordset en el primer registro  Else  

          Command1.Enabled = False  Command2.Enabled = False  

      Recordset.MoveFirst  

          Set DataGrid1.DataSource = Recordset  'Color de fondo del textbox cuando está vacío  Text1.BackColor = COLOR_TEXTBOX_NORMALEnd If End Sub

  

Page 5: Busqueda en un DataGrid TextBox y Commandbutton

'Evento que se dispara cuando se cambia de posición en el recordset  Private Sub Recordset_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)  

    'Muestra en el caption del formulario el número registro actual  Me.Caption = " Registro actual: " & CStr(Recordset.AbsolutePosition)  End Sub  

  'Cuando se produce un error en el recordset se dispara este evento  Private Sub Recordset_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)  

'Mostramos el error  MsgBox " Descripción del Error :" & Description, vbCritical  End Sub  

  'Cierra el recordset y Descarga la referencia  Private Sub Form_Unload(Cancel As Integer)  

      'Cierra  If Recordset.State = adStateOpen Then  Recordset.Close  End If  

 'descarga  If Not Recordset Is Nothing Then  Set Recordset = Nothing  End If  End Sub