FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola, gracias por tu sugerencia. En realidad hice algo bastante similar. Estoy trabajando con Firebird y los componentes IBX.
Para los datos uso un IBDataSet, y para las consultas un IBQuery. Pero tengo otro problema....lo comentaré brevemente y lo mas claro que pueda a ver si alguien puede ayudarme. IBQuery: realiza las consultas y toma como parámetro lo digitado en un TEDit. El código es: procedure TFABMProducto.edSearchChange(Sender: TObject); begin if Length(edSearch.Text) > 0 then if self.ComboBox.ItemIndex >= 0 then EjecQry else Application.MessageBox('No seleccionó criterio de búsqueda','Atención',MB_OK) else Application.MessageBox('No ingresó texto de búsqueda','Atención',MB_OK) end; procedure TFABMProducto.EjecQry; begin //nom_param es una propiedad, ya inicializada antes. DMDSProducto.ibqry.Close; DMDSProducto.ibqry.paramByName(nom_param).AsString:= UpperCase(edSearch.Text)+'%'; if Not DMDSProducto.ibqry.Prepared then DMDSProducto.ibqry.Prepare; DMDSProducto.ibqry.Open; end; IBQuery está asociado a un DataSource propio ds_qry e IBProducto asociado a uno diferente, ds. El resultado de esta consulta va a un DBLookUpListBox. A medida que voy digitando, el mismo se 'llena' con los resultados ejecutados por la consulta. Inicialización del DBLookListBox: DBLookupListBox.DataField := 'Nro_prod'; DBLookupListBox.KeyField := 'Nro_prod'; DBLookupListBox.ListField := 'Nom_prod'; O sea que el DBLookupListBox tiene el nombre de los productos. Por otro lado tengo los DBEdit, los cuales despliegan los campos del IBProducto (TIBDAtaset). Ahora bien, siempre que selecciono alguno de los nombres de la lista, el DBEdit correspondiente al código que tiene asociado al nombre seleccionado, cambia correctamente, como debe ser. Es decir, si selecciono un nombre cuyo código es 5 el DBEdit despliega 5, pero el nombre no lo cambia cuando debería, queda el que estaba al inicio de la consulta. Ejemplo:Supongamos que inicialmente tienen DBNro_Prod = 1 DBNom_prod = producto 1 Si me posiciono en la lista de nombres en el producto_n los valores son: DBNro_Prod = n DBNom_prod = producto 1 O sea, no hubo un cambio acompasado en el nombre del producto. Hice un Refresh en el evento ONClick del DBLookListBox para que refrescara los datos, pero no hace caso. ¿Qué estoy haciendo mal y/o que debería corregir? gracias, rochi |
#2
|
||||
|
||||
Hola a todos:
Yo estoy en lo mismo, tratando de hacer una busqueda en una tabla de como 700 registros y creo que el método de los filtros que habla Inexperto es lo que voy a usar, de hecho ya lo intente y no me sale. El Dbgrid pierde todos los registros y campos cuando pongo cualquier cosa en el Edit1, por favor Inexperto explica mejor tu solucion o dime si tengo que hacer algunos cambios a las propiedades de los objetos, ya lo intente con la propiedad Filtered de la Tabla pero nada de nada. Gracias por adelantado.
__________________
Si tienes un problema no te preocupes, porque si tiene solucion no hay de que preocuparce y si no la tiene pues menos hay que preocuparce.(De Aristoteles). |
#3
|
||||
|
||||
Los filtros tienen varios inconvenientes:
- Tienen que traerse todos los registros al lado del cliente para despues aplicar el filtro (demasiado tráfico) - Cada pulsación de tecla, tiene que realizar el filtrado de toda la tabla. El usuario al escribir se equivoca con facilidad, un locate es menos costoso. - No puedes usar comodines (el % o el *) dentro del filtro. La solución que propone el Autocompleta, tiene la ventaja de que puedes crear una consulta oculta siempre activa, seleccionando solo el código y el nombre del cliente, así que cuando escribes algo en el TEdit, simplemente se hace un "locate" en dicha query. Si lo asocias directamente con una tabla, al escribir algo en el Tedit, se seleccionará automaticamente el registro de esa tabla. Eventualmente puedes modificar la función para que devuelva el valor de otro campo, en ese caso, cambiarías el nombre de la función a: AutocompletaLookUp y además de tener el nombre, puedes devolver el código de dicho cliente. Está demás decir que tengo que hacer un poco de autobombo no?? Saludos Última edición por Lepe fecha: 24-01-2005 a las 11:00:32. |
|
|
|