Formulario Para Buscar en Un DataGrid Mediante Un TextBox y Commandbuttons VB6

download Formulario Para Buscar en Un DataGrid Mediante Un TextBox y Commandbuttons VB6

of 7

Transcript of Formulario Para Buscar en Un DataGrid Mediante Un TextBox y Commandbuttons VB6

Pero he encontrado lo que queria en una sola linea y ademas que funciona con DAO:

Private Sub Text1_Change()

Data1.RecordSource = "select * from Productos where NombreProducto like '" & Text1.Text & "*';"Data1.Refresh

End Sub

Esto lo uni con un datagrid, y me va limpiando el datagrid a medida que voy hallando el producto deseado, mientras escribo.Ejemplo 1Formulario para buscar en un DataGrid mediante un TextBox y Commandbuttons.El ejemplo para buscar , utiliza el mtodo 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 aaden 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 mtodo Find, por ejemplo si se busca en un campo de tipo NumricoTambin hay un CheckBox para indicar de que forma buscar, es decir buscar el registro teniendo en cuanta la palabra completa, o parte de la cadenaFormulario

Cdigo fuente en el formularioTexto planoCopiar cdigo fuenteImprimir1. Option Explicit 2. 3. '*********************************************************************************** 4. ' Ejemplo para buscar en un DataGrid con el mtodo Find del recordset 5. 6. 'Controles : 1 - La referencia a Ado _ 7. 2 - Un control DataGrid ( DataGRid1 ) _ 8. 3 - Un control Textbox (Text1) _ 9. 4 - Dos CommandButon ( Command1 y Command2 ) _ 10. 5 - Un Combobox ( Combo1 - Para los campos ) _ 11. 6 - Un CheckBox _ 12. 7 - Indicar en la constante s_CONNECTION_STRING la _ 13. cadena de conexin para la base de datos _ 14. 8 - Indicar en el FormLoad, la consulta Sql para el recordset 15. 16. 17. 18. '*********************************************************************************** 19. 20. '*********************************************************************************** 21. 22. ' ConnectionString 23. Private Const s_CONNECTION_STRING As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 24. "Data Source=C:\Archivos de programa" & _ 25. "\Microsoft Visual Studio\VB98\" & _ 26. "NWIND.MDB;Persist Security Info=False" 27. 28. ' Colores de fondo para los textbox mientras se busca 29. Private Const COLOR_TEXTBOX_NO_FOUND As Long = &H8080FF 30. Private Const COLOR_TEXTBOX_FOUND As Long = &HC0FFFF 31. Private Const COLOR_TEXTBOX_NORMAL As Long = vbWhite 32. '*********************************************************************************** 33. 34. 35. ' Variable de tipo Recordset y con evento 36. Private WithEvents Recordset As ADODB.Recordset 37. 'Botn para buscar hacia atrs 38. Private Sub Command1_Click() 39. 40. ' Si llega al final posiciona el recordset en el ltimo registro 41. If Recordset.EOF Then 42. Recordset.MoveLast 43. End If 44. ' Habilita y deshabilita los command de buscar 45. If Recordset.BOF Or Recordset.AbsolutePosition = Recordset.RecordCount Then 83. Command2.Enabled = False 84. Command1.Enabled = True 85. Command1.SetFocus 86. Exit Sub 87. End If 88. 89. Dim Anterior As Long 90. ' Almacena la fila actual 91. Anterior = Recordset.AbsolutePosition 92. ' Mueve un registro hacia atrs 93. Recordset.Move 0, Recordset.Bookmark + 1 94. 95. ' Busca en cualquier parte de la cadena 96. If Check1.Value = 0 Then 97. Recordset.Find Combo1.Text & " LIKE '*" + Text1.Text + "*'", , adSearchForward 98. ' Busca la cadena completa 99. ElseIf Check1.Value = 1 Then 100. Recordset.Find Combo1.Text & "='" + Text1.Text + "'", , adSearchForward 101. End If 102. 103. Command1.Enabled = True 104. 105. If Recordset.EOF Then 106. Command2.Enabled = False 107. Command1.SetFocus 108. Recordset.AbsolutePosition = Anterior 109. End If 110. 111. End Sub 112. 113. 114. Private Sub Form_Load() 115. 116. ' Variable para la conexin de Ado 117. Dim db As ADODB.Connection 118. 119. ' Nuevo objeto Connection 120. Set db = New ADODB.Connection 121. 122. db.CursorLocation = adUseClient 123. 124. ' Abre la base de datos pasando la cadena de conexin 125. db.Open s_CONNECTION_STRING 126. 127. ' crea un Recordset 128. Set Recordset = New Recordset 129. 130. ' Abre el Recordset con la consulta Sql 131. Recordset.Open "Select [NombreContacto]," & _ 132. "[NombreCompaa]," & _ 133. "[CargoContacto] " & _ 134. "From Proveedores Order By NombreContacto Asc", _ 135. db, adOpenStatic, adLockOptimistic 136. 137. Dim i As Integer 138. 139. 'Recorre los campos del recordset para aadirlos al combobox 140. 'Nota: los campos deben ser de tipo String 141. For i = 0 To Recordset.Fields.Count - 1 142. Combo1.AddItem Recordset.Fields.Item(i).Name 143. Next i 144. 145. ' Selecciona el campo 1 146. Combo1.ListIndex = 0 147. 148. 149. ' Engancha el recordset al datagrid 150. Set DataGrid1.DataSource = Recordset 151. 152. ' Opcional . esto hace que se seleccione la fila completa en el DataGrid 153. DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell 154. 155. Text1 = "" 156. 'caption de los controles 157. Command1.Caption = "Quitar Filtro" 158. Command1.Caption = " > " 160. Check1.Caption = " Buscar palabra completa" 161. 162. End Sub 163. 164. 165. Private Sub Text1_Change() 166. 167. If Text1 "" Then 168. 169. ' Habilita los botones para buscar hacia atrs y hacia adelante 170. Command1.Enabled = True 171. Command2.Enabled = True 172. 173. Dim Actual As Long 174. ' almacena la fila actual, por si no so se encontr vuelve a posicionar _ 175. el recordset en dicha fila 176. If Not Recordset.EOF And Not Recordset.BOF Then 177. Actual = Recordset.AbsolutePosition 178. End If 179. 180. ' Busca en cualquier parte de la cadena 181. If Check1.Value = 0 Then 182. Recordset.Find Combo1.Text & " LIKE '*" & Text1.Text & "*'", , adSearchForward 183. ' Busca la Cadena completa 184. ElseIf Check1.Value = 1 Then 185. Recordset.Find Combo1.Text & "='" & Text1.Text & "'", , adSearchForward 186. End If 187. 188. ' Color del fondo del textbox 189. If Not Recordset.EOF And Not Recordset.BOF Then 190. Text1.BackColor = COLOR_TEXTBOX_FOUND 191. Else 192. Text1.BackColor = COLOR_TEXTBOX_NO_FOUND 193. End If 194. 195. If Recordset.BOF Or Recordset.EOF Then 196. Recordset.AbsolutePosition = Actual 197. End If 198. ' Si el textbox est vaco, posiciona el recordset en el primer registro 199. Else 200. 201. Command1.Enabled = False 202. Command2.Enabled = False 203. 204. Recordset.MoveFirst 205. 206. Set DataGrid1.DataSource = Recordset 207. ' Color de fondo del textbox cuando est vaco 208. Text1.BackColor = COLOR_TEXTBOX_NORMAL 209. 210. End If 211. 212. End Sub 213. 214. ' Evento que se dispara cuando se cambia de posicin en el recordset 215. Private Sub Recordset_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _ 216. ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ 217. ByVal pRecordset As ADODB.Recordset) 218. 219. ' Muestra en el caption del formulario el nmero registro actual 220. Me.Caption = " Registro actual: " & CStr(Recordset.AbsolutePosition) 221. 222. End Sub 223. 224. ' Cuando se produce un error en el recordset se dispara este evento 225. Private Sub Recordset_Error(ByVal ErrorNumber As Long, Description As String, _ 226. ByVal Scode As Long, ByVal Source As String, _ 227. ByVal HelpFile As String, ByVal HelpContext As Long, _ 228. fCancelDisplay As Boolean) 229. ' Mostramos el error 230. MsgBox " Descripcin del Error :" & Description, vbCritical 231. End Sub 232. 233. ' Cierra el recordset y Descarga la referencia 234. Private Sub Form_Unload(Cancel As Integer) 235. 236. ' Cierra 237. If Recordset.State = adStateOpen Then 238. Recordset.Close 239. End If 240. 241. ' descarga 242. If Not Recordset Is Nothing Then 243. Set Recordset = Nothing 244. End If 245. End Sub

Ejemplo 2Otro ejemplo ( de la ayuda de vb )Este cdigo fuente de ejemplo es mas simple que el anterior, y est sacado de la ayuda de visual basic. El formulario , usa ado y un control datagrid. El DataGrid se conecta a la base de datos Biblio.mdb para cargar los registros de la tabla Authors en la grilla. Al presionar un commandbutton, se pide mediante un inputbox, que se ingrese un valor para el nombre del campo "author" a buscar con el mtodo Find .Descargar proyecto y artculo original