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
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
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
'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
'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
Top Related