Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-12-2014
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Buscar en campo calculado

Buenas Tardes,

a la hora de mostrar la lista de registros de un DBLookupcombobox, necesito ver el contenido del campo nombre + apellidos.

Para ello he pensado que la solución sería crear un campo calculado llamado NombreCompleto

Lo he creado en la query y de cara al listado funciona perfectamente pero veo que a medida que escribo en el DBLookupcombobox no se hace la búsqueda en la lista como si se tratase de un campo normal.

Para solucionarlo he pegado un Edit encima y a medida que escribo en el ejecuto una sentencia SQL que busca en la query.

El problema es que puedo buscar por el nombre o por el apellido pero no en el contenido del campo NombreCompleto.

¿Existe algun truco para hacer esta busqueda?

Muchas Gracias
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #2  
Antiguo 26-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphitest.

Creo recordar que trabajas con ADO y Access, te pongo entonces ejemplos basados en la tabla Employee de dbdemos:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Consulta
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT FIRSTNAME + '' '' + LASTNAME AS FULLNAME, * FROM EMPLOYEE';
    Open;
  end;
  // configurar DBLookupComboBox
  with DBLookupComboBox1 do
  begin
    KeyField  := 'EMPNO';
    ListField := 'FULLNAME';
    ListSource:= DataSource1;
  end;
end;

Si quisieras realizar una búsqueda incremental desde el evento OnChange de un TEdit, sería similar:
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FIRSTNAME+'' ''+LASTNAME AS FULLNAME, * FROM EMPLOYEE');
    SQL.Add('WHERE FIRSTNAME +'' ''+LASTNAME LIKE :PARAM');
    Parameters.ParamByName('PARAM').Value:= Edit1.Text + '%';
    Open;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 27-12-2014
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Muchísimas Gracias Ecfisa,

funciona a la perfección.

Recuerdas bien, trabajo con ADO y Access

Me he quedado un poco atascado a la hora de adaptarlo porque me empeñe en no poner el * delante del from y me daba errores pero repasándolo en condiciones hace lo que necesitaba.

Aprovecho sólo para pedirte tu opinión acerca del uso del DBLookUpCombobox si no te importa. Ahora mismo lo uso para listar una tabla de clientes que contiene unos 150 registros y me funciona sin problemas, pero a medida que pase el tiempo y se incremente esa lista, por ejemplo si se da el caso de llegar a 500 registros ¿Seguiría siendo correcto hacer uso de el o tendría que plantearme otra cosa?

Gracias de Nuevo y Felices Fiestas para todos vosotros

Un fuerte abrazo
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #4  
Antiguo 28-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphitest.
Cita:
Empezado por Delphitest Ver Mensaje
...
Aprovecho sólo para pedirte tu opinión acerca del uso del DBLookupCombobox si no te importa. Ahora mismo lo uso para listar una tabla de clientes que contiene unos 150 registros y me funciona sin problemas, pero a medida que pase el tiempo y se incremente esa lista, por ejemplo si se da el caso de llegar a 500 registros ¿Seguiría siendo correcto hacer uso de el o tendría que plantearme otra cosa?
De nada

Trabajando de forma local, no vas a tener problemas ni con cifras cientos de veces superiores a la que comentas. Sin embargo puede ser distinto trabajando en red... Vas a encontrar una muy buena explicación al respecto en el libro: La cara oculta de Delphi 4 (cap. 27)


Saludos y feliz año
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 29-12-2014
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Buenas Noches,

siento reabrir este tema pero me pasa algo fuera de normal y no se como arreglarlo.

Todo va bien en cuanto al funcionamiento pero veo que en la lista que proporciona el DBLookupCombobox aparecen de forma aleatoria muchas filas en blanco que no forman parte de la consulta ni de la tabla original.

Si en lugar de hacer que la lista sea el campo FullName, pongo solo el nombre o los apellidos se ven los registros sin problemas y no hay lineas en blanco.

¿Alguien sabe qué puede estar pasando?

Gracias de nuevo
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #6  
Antiguo 30-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphitest.

Con seguridad que alguno de las columnas intervinientes tiene valor NULL. Cualquier concatenación en el que intervenga una columna con valor NULL, dará como resultado NULL.

Poniendo previamente en NULL un nombre de la tabla EMPLOYEE,
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT EMPNO, FIRSTNAME + '' '' + LASTNAME AS FULLNAME,');
    SQL.Add('SALARY FROM EMPLOYEE');
    Open;
  end;
end;
el código anterior dá este resultado:


La solución para que no aparezcan líneas vacías es evaluar los valores de ambos campos. Dado que no uso Access para mis trabajos, tuve que leer un poco para encontrar la equivalencia a la función COALESCE que según leí es SWITCH.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
  SQLSTR = 'SWITCH(FIRSTNAME IS NULL, ''----'', FIRSTNAME IS NOT NULL, FIRSTNAME)'
            + '+'' ''+' +
            'SWITCH(LASTNAME IS NULL, ''----'', LASTNAME IS NOT NULL, LASTNAME)';
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add(Format('SELECT EMPNO,%s AS FULLNAME, SALARY',[SQLSTR]));
    SQL.Add('FROM EMPLOYEE');
    SQL.Add(Format('ORDER BY %s',[SQLSTR]));
    Open;
  end;
end;
La diferencia luego de hacer click en Button1:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 30-12-2014
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Muchísimas Gracias Ecfisa por tu ayuda y por tomarte las molestias en buscar la solución de tantos problemas que planteamos.

No sabía que al concatenar dos campos si uno de ellos era Null automáticamente el total también lo sería, pensaba que se limitaba a no poner uno de ellos y por eso me llamó la atención.

Lo he comprobado y así es.

Como no son muchos registros voy a recorrerlos y completar esos apellidos que faltan para que todo aparezca bien y de ahora en adelante tomare la precaución de no dejar esos campos vacíos.

Mil gracias por tu tiempo y que el año nuevo te traiga lo que te mereces.

FELIZ 2015 para todos
__________________
Mi proyecto paso a paso (Parte I)
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta indice del campo de una grilla en campo calculado ericgs OOP 2 19-10-2012 17:25:15
Campo Calculado novato_erick SQL 1 14-06-2011 23:06:02
Campo Calculado!!! Ledian_Fdez OOP 1 03-10-2007 22:10:01
Pasar un campo calculado a un campo del mismo DbGrid maravert Conexión con bases de datos 3 12-05-2006 00:31:30
Campo de bd calculado davidgaldo MS SQL Server 3 20-05-2005 15:50:22


La franja horaria es GMT +2. Ahora son las 00:03:58.


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