Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DbLookup (https://www.clubdelphi.com/foros/showthread.php?t=74137)

mblascog 01-06-2011 08:32:44

DbLookup
 
Buenas, quisiera implementar algo que veo a menudo y nunca he encontrado la manera de hacerlo. Me gustaría que al posicionarme en un lookup se autodesplegara y conforme vaya introduciendo texto se fuera posicionando en el desplegable para poderlo seleccionar.
Es algo parecido a un AutoComplete, pero lo he intentado en un dbLookUpComboBox del propio Delphi, con el dbLookUpComboEdit de la Jedi, y no soy capaz ni de editar ni de autodesplegarse.

Muchas gracias

ecfisa 01-06-2011 09:23:08

Hola mblascog.

El TDBLookupComboBox no es muy complicado de usar, sólo tenés que asignar ciertas propiedades:

ListSource: Va el DataSource que apunta al DataSet cuyos datos querés que despliegue y muestre.
ListField: Va el campo que queres que se muestre al desplegar y por el cuál se hace la elección.
KeyField: Va el campo que devuelve del DataSet al que apunta el DataSource ingresado en ListSource.

Hasta aquí tenemos un Combo que nos desplaza al escribir y si hacemos click sobre la flecha invertida se despliega mostrándonos el contenido.

Pero podemos hacer algo más. Supongamos que tenemos dos DataSet con sus respectivos DataSource, llamados por ejemplo:
tbPersonas, dsPersonas y tbCiudades, dsCiudades.

tbPersonas tiene los siguientes campos:
ID_PERSONA
NOMBRE_PERSONA
REF_CIUDAD

Y tbCiudades los siguientes:
ID_CIUDAD
NOMBRE_CIUDAD

Si estamos ingresando personas y queremos elegir la ciudad de la que es oriunda, desde una lista de ciudades ya ingresadas, haríamos en el DBLookupComboBox:

ListSource: dsCiudades
ListField: NOMBRE_CIUDAD
KeyField: ID_CIUDAD
( Hasta acá nos mostrará los nombres de las ciudades con el comportamiento que buscas )

Y para que también nos ingrese ID_CIUDAD en el campo REF_CIUDAD de tbPersonas, llenamos en el DBLookupComboBox las siguientes propiedades:
DataSource: dsPersonas (DataSet que recibe la elección)
DataField: REF_PERSONAS (Campo que recibe la elección)
Ahora, cada vez que hagamos una selección en el DBLookupComboBox, se modificará el campo REF_CIUDAD de dsPersonas estableciendo la relación: REF_CIUDAD -> ID_CIUDAD.

Aunque no es el ejemplo, también se podría asignar el nombre de la ciudad si el campo emisor y receptor declarados en KeyField y DataField respectivamente, fueran de tipo TStringField.

Como te darás cuenta si no asignas las propiedades DataSource y DataField, sólo mostrará lo ingresado en ListField sin modificar nada.

Espero que la explicación te aclare un poco el panorama...

Saludos. :)

Casimiro Notevi 01-06-2011 10:06:17

Por favor, mblascog, recuerda seguir nuestras normas, una de ellas se refiere a poner títulos descriptivos a las preguntas. Gracias por tu colaboración.

Delfino 01-06-2011 12:10:09

Cita:

Empezado por mblascog (Mensaje 402125)
pero lo he intentado en un dbLookUpComboBox del propio Delphi, con el dbLookUpComboEdit de la Jedi, y no soy capaz ni de editar ni de autodesplegarse.

El de las JVCL por lo menos seguro que hace lo pides..

mblascog 02-06-2011 09:18:34

Lo volveré a probar. Ja diré alguna cosa
Muchísimas gracias

mblascog 03-06-2011 09:02:56

Buenas, estoy convencida que llevais la razón, pero a mi sigue sin desplegarse el dbLookupComboEdit.

Tengo una tabla de Artículos, por ejemplo:
- melocotones
- naranjas
- peras
- pomelos

En el dbLookupComboEdit tengo asignadas las siguientes propiedades:
- DataField: descripción
- DataSource: dstDetalle
- LookupDisplay: descripción
- LookupField: id
- LookupSource: dstArticulos

Y me gustaría que al escribir 'p', automáticamente se desplegara y en la lista apareciera: peras, pomelos

Y esto no sucede. Algo me falla, pero no veo qué.

Muchas gracias

ecfisa 03-06-2011 10:01:21

Hola mblascog.

Desconozco el componente dbLookUpComboEdit, pero te adjunto un demo muy simple, pero funcional, con un DBLookupComboBox.
Para que no tengas ningún tipo de incompatibilidad, con el tipo de base de datos, también va incluida la tabla.

Asigné algunas propiedades en tiempo ejecución ya que desconozco donde vas a descargar el ejemplo, pero normalmente todas se asignan desde el Object Inspector en tiempo de diseño.

Descomprimí los archivos en una carpeta y probalo.

Espero que con el demo te sea más sencillo entender el funcionamiento.

Saludos. :)

mblascog 03-06-2011 20:04:52

Muchas gracias ecfisa, pero no puedo abrir el fichero el demo que has adjuntado

ecfisa 03-06-2011 22:28:27

Hola mblascog.

No tengo ningún problema para abrirlo, te cuento que durante un tiempo tuve el mismo problema y era el Internet Explorer.
Probé quitando plugins, aceleradores y nada...me fué imposible hacerlo funcionar. Lo solucioné usando Mozilla Firefox.

Un saludo.

mblascog 04-06-2011 10:55:13

Hola egfisa,
Curioso el tema, que se pueda abrir el fichero si lo descargas en Firefox, y con IE no.

No me habré explicado bien. Lo que yo pretendo hacer es lo siguiente:
al teclear, siguiendo tu ejemplo, la 'c' en tu dbLookupComboBox, quisiera que se desplegara automáticamente y visualizara Chile, Colombia, Cuba

La aplicación que estoy desarrollando es un punto de venta. La introducción de los artículos se realiza con el lector de códigos de barras, pero a veces hay que buscar el artículo manualmente, por ello necesito teclar la descripción, que se abra el desplegable, sin haber de usar el ratón, con las teclas arriba y abajo.

Espero haberme explicado bien ahora.

Muchas gracias

Casimiro Notevi 04-06-2011 11:17:32

Entonces no te conviene un "demasiado" usar ese componente, te interesa más un simple edit en el que en su evento onchange se realice un nuevo select dependiendo de lo tecleado.

ecfisa 04-06-2011 12:44:38

Hola mblascog.

Ahora sí te entendí. :)

Basta con agregar al evento OnKeyPress del DBLookupComboBox lo siguiente:
Código Delphi [-]
procedure TForm1.DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  DBLookupComboBox1.DropDown;
end;

Saludos.

mblascog 04-06-2011 17:44:18

Perfecto. Lo he conseguido, implementando el evento OnKeyPress. Muchas gracias egfisa y Casimiro Notevi

satelit 12-02-2014 21:06:56

Disculpen pero quisiera levantar la observación de Casimiro Notevi.
Trabajo en una aplicación en la que necesito que al ingresar un texto realizar una consulta con Like y se despliegue como lo hace el combobox
Cita:

Empezado por Casimiro Notevi (Mensaje 402574)
Entonces no te conviene un "demasiado" usar ese componente, te interesa más un simple edit en el que en su evento onchange se realice un nuevo select dependiendo de lo tecleado.

Mas o menos como haz mencionado Casimiro Notevi.


La franja horaria es GMT +2. Ahora son las 19:09:38.

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