Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2004
rochi rochi is offline
Miembro
 
Registrado: nov 2004
Ubicación: mvd, uruguay
Posts: 57
Poder: 20
rochi Va por buen camino
Question

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
Responder Con Cita
  #2  
Antiguo 23-01-2005
Avatar de Dragon
Dragon Dragon is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cuba, Ciudad de La Habana.
Posts: 19
Poder: 0
Dragon Va por buen camino
Unhappy

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).
Responder Con Cita
  #3  
Antiguo 24-01-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:50:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi