Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
Busqueda usando un DBLookupComboBox

Hola gentes, bueno tengo un problema en como realizar una busqueda.

El problema es como se realiza.
Lo que quiero hacer es que cuando selecciones una opcion del DBLookupComboBox, en el grid aparesca los resultados, y cuando lo deje en blanco esten todos los registros.

estoy usando un modulo de datos donde tengo los dataset, query. y tngo el formulario clientes donde tngo el datasource, clientedataset, provider. qe es para conectar el DBLookupComboBox.

nosotros damos de alta localidades y estas cuando vas a dar de alta un cliente aparece el campo localidad que atraves del DBLookupComboBox seleccionas cual queres.
la tabla clientes tiene un inner join con tabla localidades.

que es lo q tendria qe hacer?. que pongo en el qryclientes, y en que evento de DBLookupComboBox tngo que hacerlo muchas gracias vi un hilo que decia de como se realizaba la busqueda pero no entendi , estoy usando delphi 7 y ems interbase/firbird.

Desde ya muchas gracias espero que me entiendan
Responder Con Cita
  #2  
Antiguo 01-09-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola liito16, de hecho seguro que tienees un dataset para tus localidades y otro para clientes, para hacer lo que quieres debes utilizar el evento OnCloseUp del DBLookComboBox y hacer la consulta en tu qryClientes, tomando lo que tienes en ese momento en el DBLookComboBox:

Código Delphi [-]
procedure ....DBLookupComboBox1CloseUp(.............);
begin
 QryClientes.Close;
 QryClientes.SQL.Text := 'Select * From Clientes Where fk_cod='+ QuotedStr(QryLocal.fieldbyName('cod').AsString);
 QryClientes.Open;
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 01-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
es que cuando pongo qryclientes. salta
error [Error] Clientes.pas(80): Undeclared identifier: 'QryClientes'
[Error] Clientes.pas(80): Missing operator or semicolon
[Error] Clientes.pas(81): Missing operator or semicolon
[Error] Clientes.pas(81): Undeclared identifier: 'QryLocal'
[Error] Clientes.pas(81): Missing operator or semicolon
[Fatal Error] Videoclub.dpr(10): Could not compile used unit 'Clientes.pas'
Responder Con Cita
  #4  
Antiguo 01-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
solucione el problema de arriba y ahora cuando selecciono alguno para que muestre los resultados me tira:

project videoclub.exe raised exeption class edatabaseerror with message 'qrylocalidades':field 'cod ' not found
Responder Con Cita
  #5  
Antiguo 01-09-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por liito16 Ver Mensaje
project videoclub.exe raised exeption class edatabaseerror with message 'qrylocalidades':field 'cod ' not found
Hola de nuevo liito16, tienes que reemplazar por los campos que tienes en tus tablas, donde fk_cod sería el campo que se relaciona con tu tabla localidades y cod es el codigo de tu tabla localidades o el nombre que le hayas dado.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 01-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
Código SQL [-]
 mdmodulodedatos.QryClientes.SQL.Text := 'Select * From Clientes Where LOCALIDAD_NOMBRE='+ QuotedStr(mdmodulodedatos.Qrylocalidades.fieldbyName('LOCALIDAD_NRO').AsString);

asi lo deje yo y me tira ese error
no sera que en el qryclientes este poniendo algo mal?
lo puse en la propiedad SQL.
Código SQL [-]
select
  Clientes.*,
  localidades.nombre as localidad_nombre
from CLIENTES
inner join LOCALIDADES on clientes.localidad_nro = localidades.localidad_nro
 Where localidad_nro=:cod
Responder Con Cita
  #7  
Antiguo 01-09-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muestranos el codigo completo que tienes en el OnCloseUp y ¿que componentes estas utilizando a parte del ClientDataSet?.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 01-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
Código SQL [-]
  mdmodulodedatos.QryClientes.Close;
  mdmodulodedatos.QryClientes.SQL.Text := 'Select * From CLIENTES  Where LOCALIDAD_NOMBRE='+ QuotedStr(mdmodulodedatos.QryLocalidades.fieldbyName('LOCALIDAD_NRO').AsString);

  mdmodulodedatos.QryClientes.Open;

ese es el codigo que puse en el evento del bdlookupcombobox

utilizo el clientdataset que lo conecto con el provider y data source lo conecto con el client y el grid esta conectado con el data source el provider va a dataset clientes. para cada dblookupcombobox que utilizo creo uno de cada uno un data source, client, provider, y un qry porq es una consulta. espero que entiendas
Responder Con Cita
  #9  
Antiguo 01-09-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Ahora que he leído mejor tus anteriores respuestas, el problema esta en el parámetro cod de tu qrylocalidades el cual no lo encuentra, revisa bien esa parte, para que estas utilizando esa parametro, cuando le asignas valor a cod......

Cita:
Empezado por liito16 Ver Mensaje
utilizo el clientdataset que lo conecto con el provider y data source lo conecto con el client y el grid esta conectado con el data source el provider va a dataset clientes. para cada dblookupcombobox que utilizo creo uno de cada uno un data source, client, provider, y un qry porq es una consulta. espero que entiendas
Entiendo , ¿tus querys pertenecen a los componentes BDE, ADO, DBExpres....., a cual?.

Por la consulta que muestras mas arriba en el Where tienes que comparar por el campo LOCALIDAD_NRO de tu tabla clientes que es con el campo con el que se realcionan tus tablas y no por LOCALIDAD NOMBRE.

Código Delphi [-]
With mdmodulodedatos do
begin
  QryClientes.SQL.Text := 'Select * From CLIENTES  ';
                 'Where LOCALIDAD_NRO='+ QuotedStr(QryLocalidades.fieldbyName('LOCALIDAD_NRO').AsString);
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 01-09-2010 a las 20:51:18.
Responder Con Cita
  #10  
Antiguo 02-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
los qrys pertenecen a DBExpres,
y dsp el parametro se crea automaticamente en el qryclientes, y tngo que crear otro en el qrylocalidades?

en el parametro del qryclientes en propiedades pongo
name: cod
datatype: ftinteger
paramtype: ptInput

nose si tiene que ver pero los formularios vienen heredados de una plantilla que creamos.

Última edición por liito16 fecha: 02-09-2010 a las 00:43:21. Razón: Olvide de agregar algo
Responder Con Cita
  #11  
Antiguo 03-09-2010
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 lito16.

Cita:
Lo que quiero hacer es que cuando selecciones una opcion del DBLookupComboBox, en el grid aparesca los resultados, y cuando lo deje en blanco esten todos los registros.
Hice la prueba directamente con los IBDataSet (para simplificar) usando los eventos OnCloseUp y OnDropDown del DBLookupComboBox .
Hace exáctamente lo que especificas en la cita.

Código Delphi [-]
// (DBLookupComboBox -> Cliente ; DBGrid -> Localidades)
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  IBDataSetCliente.Open;
  IBDataSetLocalidad.Open;
  with DBLookupClientes do
  begin
    ListSource:= dsCliente;
    ListField:= 'NOMBRE';
    KeyField:= 'CLIENTE_ID';
  end;
end;

procedure TForm1.DBLookupClientesCloseUp(Sender: TObject);
begin
  if DBLookupClientes.Text > '' then
    with IBDataSetLocalidad do
    begin
      Close;
      SelectSQL.Text:= 'SELECT * FROM LOCALIDADES WHERE LOCALIDAD_ID = '+
           IBDataSetCliente.FieldByName('LOCALIDAD').AsString;
      Open;
    end;
end;

procedure TForm1.DBLookupClientesDropDown(Sender: TObject);
begin
  DBLookupClientes.KeyValue:='';
  with IBDataSetLocalidad do
  begin
    Close;
    SelectSQL.Text:= 'SELECT * FROM LOCALIDADES';
    Open;
  end;
end;
...

Espero haberte interpretado bíen...

Saludos.

Última edición por ecfisa fecha: 03-09-2010 a las 10:00:03.
Responder Con Cita
  #12  
Antiguo 03-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
Influye algo que use los componentes de DBexPRESS, SQLDATASET? eso son los que estoy usando
Responder Con Cita
  #13  
Antiguo 03-09-2010
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 liito.

No he trabajado con DBexPRESS, pero supongo que la lógica del programa es la misma para cualquier
base de datos o componentes con los que trabajes.

.Al abrir el combo asignas la propiedad KeyValue a '' para limpiar lo que está en la propiedad Text
y mostras todos los registros el el DBGrid.
.Al cerrarlo, verificas si hizo una seleccion (if KeyValue >''...) y si es así mostras en el DBGrid los registros
que indique la consulta acorde a la seleccion del DBLookupComboBox.

No tomes al pié de la letra el código que puse. Fué solo una prueba que realizé a fín de ejemplificar que eventos del
DBLookupComboBox usar, para que funcione del modo que pediste.

Saludos.

Última edición por ecfisa fecha: 03-09-2010 a las 20:36:23.
Responder Con Cita
  #14  
Antiguo 04-09-2010
liito16 liito16 is offline
Miembro
 
Registrado: ago 2010
Posts: 34
Poder: 0
liito16 Va por buen camino
Solucion

Gente comparto la solucion a mi problema,

Los componentes que use como el query y dataset estan en DBExpress.

tube que agregar el modulo de datos creado en el dataset llamado dsetclientes en la propiedad commandtext

Código SQL [-]
where (clientes.localidad_nro=:LOCALIDAD) or (0=:LOCALIDAD)

ademas de las lineas que ya tenia este dataset como el select from y order by,
acomodar los dos parametros creados por medio de la propiedad params, que fue ponerle datatype ftInteger.

y en el clientedataset, llamado clidatos poner en la propiedad Params los dos parametros creados y ponerle el mismo nombre y el mismo datatype.

agregar en el formulario Clientes Un dblookupcombobox y en datasource y datafield nada. y en el listsource conectarlo con el query localidades llamado qrylocalidades que se encuentra en el modulo de datos,

dsp ir al formulario Clientes y en el evento OnShow

Código:
 
 with clidatos do
  begin
     Close;
     params.ParamByName('LOCALIDAD').AsInteger:=0;
     Open;
  end;
y dsp en el evento del combobox - OnExit

Código:
  with Clidatos do begin
    close;    Params.ParamByName('LOCALIDAD').AsInteger:=dbcLocalidadFiltro.KeyValue;
    open;
  end;
  chkTodos.Checked:=False;
agrege un Chekbox para poder ver todos los clientes en el cual en el evento OnClic puse:
Código:
  dbcLocalidadFiltro.KeyValue:=null;
  if chkTodos.Checked then begin
    with clidatos do
    begin
     Close;
     params.ParamByName('LOCALIDAD').AsInteger:=0;
     Open;
    end;
  end;
para cuando presione si quiere ver en el combo aparesca en blanco y se vean todos los clientes

ademas en la propiedad de estos dos componentes puse TabStop false para que si el usuario apretara tab no pase por estos dos componentes. ya que es un filtro que si quiere hacerlo lo hace.

Hoy en la facu le pregunte al profesor como se hacia y me explico.
Muchas gracias por ayudarme y comparto con ustdes la solucion que use espero que me entiendan .
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
Búsqueda con DBLookupComboBox Viky Varios 0 16-03-2009 14:17:38
Imprimir usando un DBLookupComboBox esimon Impresión 0 05-10-2007 20:39:19
Ayuda en busqueda usando ADO Victor Vega SQL 6 06-09-2007 06:21:35
Busqueda usando un DBLookupComboBox esimon OOP 19 08-10-2006 22:31:42
Búsqueda usando un índice con ADO. vpepen Conexión con bases de datos 9 03-02-2005 14:32:32


La franja horaria es GMT +2. Ahora son las 02:52:52.


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