Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2010
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
ayuda combobox anidado

hola a todos.. espero que esten bien... tengo una nueva pregunta jeje
tengo dos combobox:
Código Delphi [-]
combobox1         combobox2
bebidas              jugos
licores                cervezas
                         gaseosa
                         vino

lo que quiero hacer es que si en el combobox esta puesto bebidas solo me muestre en el 2do combobox cervezas, jugos y no toda la lista y si es licores: cervezas, vino

la info la saco de una BD hecha en firebird

gracias espero me puedan ayudar otra vez
cuidense
Responder Con Cita
  #2  
Antiguo 26-10-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 Rofocale.

Una forma podría ser:
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0 then
  begin
    if ComboBox2.Items.IndexOf('JUGOS')= -1 then
      ComboBox2.Items.Add('JUGOS');
    if ComboBox2.Items.IndexOf('GASEOSAS')= -1 then
      ComboBox2.Items.Add('GASEOSAS');
    ComboBox2.Items.Delete(ComboBox2.Items.IndexOf('CERVEZA'));
    ComboBox2.Items.Delete(ComboBox2.Items.IndexOf('VINO'));
  end
  else
  begin
    if ComboBox2.Items.IndexOf('CERVEZA')= -1 then
      ComboBox2.Items.Add('CERVEZA');
    if ComboBox2.Items.IndexOf('VINO')= -1 then
      ComboBox2.Items.Add('VINO');
    ComboBox2.Items.Delete(ComboBox2.Items.IndexOf('JUGOS'));
    ComboBox2.Items.Delete(ComboBox2.Items.IndexOf('GASEOSAS'));
  end;
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 26-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Necesitas un campo tipo asi con solo definir el tipo saldra lo que necesitas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 26-10-2010
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
si las categorias en los combobox crecen osea les inserto mas, el codigo seria enorme.. otra forma de hacerlo si es que en cada combobox hubiera unas 60 categorias ?

gracias
Responder Con Cita
  #5  
Antiguo 26-10-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
Cita:
Empezado por Rofocale Ver Mensaje
si las categorias en los combobox crecen osea les inserto mas, el codigo seria enorme.. otra forma de hacerlo si es que en cada combobox hubiera unas 60 categorias ?

gracias
Bueno, yo sólo me limité a responder a tu consulta, no sabía si era para un ejercicio...
¡ No quiero ni imaginar 60 items en cada ComboBox con ese código... cinco días tecleando!!!

Me parece que si la lista puede crecer de forma indefinida, es más fácil hacer las inserciones, relaciones y mantenimiento
usando dos TDataSet.

Saludos.

Última edición por ecfisa fecha: 26-10-2010 a las 19:31:28.
Responder Con Cita
  #6  
Antiguo 27-10-2010
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
lo se.. solo que estoy practicando y queria una forma de anidar 2 combobox con codigo pero de una mejor manera de la que se muestra arriba porque el codigo se agrandaria demasiado si en un combobox se listara items
Responder Con Cita
  #7  
Antiguo 27-10-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Pues como te dice ecfisa,tendrás que hacerte dos tablas, maestro y otra detalle, en la primera pondrás las familias de bebidas y en la segunda rellenaras la bebida con la familia a la que pertenece, entonces enlazas estas tablas con un adoquery1 a un dblookcombobox, por ejemplo, y cuando selecciones la familia en el primero que te filtre en el segundo las bebidas que pertenecen a esa familia.

Un saludo.
Responder Con Cita
  #8  
Antiguo 28-10-2010
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
de esta manera utilizo el codigo para cargar leer los datos desde la base de datos y cargarlos a los combobox.. ahora quiero filtrar de la tabla categoria que hay bebidas y licores y en la tabla unidades hay cervezas,jugos,vinos,gaseosas

se que es una manera facil como me han dicho haciendo un maestro/detalle.. pero estoy practicando y lo estoy haciendo con codigo.. utilizo combobox en vez de dbcombobox y bueno no se como poder hacer el anidamiento mediante codigo

alguna idea ? gracias

Código Delphi [-]
    with dmDatos.qryConsulta do begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT nombre FROM categorias WHERE tipo = ''A'' ORDER BY nombre');
        Open;
        cmbCategorias.Properties.Items.Clear;
        cmbCategBusq.Properties.Items.Clear;
        while (not Eof) do begin
            cmbCategorias.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
            cmbCategBusq.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
            Next;
        end;
        Close;
    end;
    with dmDatos.qryConsulta do begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT nombre FROM unidades WHERE tipo = ''A'' ORDER BY nombre');
        Open;
        cmbTipo.Properties.Items.Clear;
        cmbTipoBusq.Properties.Items.Clear;
        while (not Eof) do begin
            cmbTipo.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
            cmbTipoBusq.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
            Next;
        end;
        Close;
    end;
Responder Con Cita
  #9  
Antiguo 28-10-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 Rofocale.

No pusiste la estructura de los datos, así que voy a tratar de inferir ...
Supongamos que declaraste:
Código SQL [-]
CREATE DOMAIN IN_AB CHAR(1) CHECK(VALUE IN('A','B')) NOT NULL;
CREATE DOMAIN VARCHAR20 VARCHAR(20) NOT NULL;

CREATE TABLE TBCATEGORIAS(
  Categoria IN_AB,
  Nombre VARCHAR20
);

CREATE TABLE TBUNIDADES(
  Categoria IN_AB,
  Nombre VARCHAR20
);

Y tenes ingresado:
TBCATEGORIAS
------------
A BEBIDAS
B LICORES

TBUNIDADES
----------
A GASEOSAS
A JUGOS
B VINOS
B LICORES
A LICUADOS
B AGUARDIENTES

Siendo cbCategorias y cbUnidades de tipo TComboBox, una forma de hacerlo puede ser:
Código Delphi [-]
procedure TForm1.FiltrarComboBox;
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT CATEGORIA, NOMBRE FROM TBCATEGORIAS C1, TBUNIDADES C2 '+
     'WHERE (C1.CATEGORIA = C2.CATEGORIA) AND '+
     'C2.CATEGORIA = (SELECT CATEGORIA FROM TBCATEGORIAS WHERE NOMBRE = '+
     QuotedStr(cbCategorias.Text)+')';
    Open;
    cbUnidades.Clear;
    while not Eof do
    begin
      cbUnidades.Items.Add(FieldByName('NOMBRE').AsString);
      Next;
    end;
    cbUnidades.ItemIndex:= 0;
    Close
  end;
end;

Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
begin
 with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM TBCATEGORIAS ORDER BY NOMBRE';
    Open;
    while not Eof do
    begin
      cbCategorias.Items.Add(FieldByName('NOMBRE').AsString);
      Next;
    end;
    cbCategorias.ItemIndex:= 0;
    Close;
    SQL.Text:= 'SELECT * FROM TBUNIDADES ORDER BY NOMBRE';
    Open;
    while not Eof do
    begin
      cbUnidades.Items.Add(FieldByName('NOMBRE').AsString);
      Next;
    end;
    cbUnidades.ItemIndex:= 0;
    Close;
  end;
  FiltrarComboBox
end;

Código Delphi [-]
procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
  FiltrarComboBox;
end;

Saludos.
Responder Con Cita
  #10  
Antiguo 12-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
Filtro

Código Delphi [-]
procedure TfrmArticulos.FiltrarComboBox;
begin
  with dmDatos.qryConsulta do
  begin
    Close;
    SQL.Text:= 'SELECT nombre, nombre2 FROM categorias c1, unidades c2 '+
     'WHERE (c1.nombre = c2.nombre2) AND '+
     'c2.nombre2 = (SELECT nombre FROM categorias WHERE nombre = '+
     QuotedStr(cmbCategorias.Text)+')';
    Open;
     cmbUnidadTipo.Clear;
    while not Eof do
    begin
      cmbUnidadTipo.Properties.Items.Add(FieldByName('nombre').AsString);
      Next;
    end;
    cmbUnidadTipo.ItemIndex:= 0;
    Close
  end;
end;


Código Delphi [-]

procedure TfrmArticulos.FormShow(Sender: TObject);
begin
 
   with dmDatos.qryConsulta do
   begin
    Close;
    SQL.Add('SELECT nombre FROM categorias ORDER BY nombre');
    Open;
    while not Eof do
    begin
      cmbCategorias.Properties.Items.Add(FieldByName('nombre').AsString);
      cmbCategBusq.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
      Next;
    end;
    cmbCategorias.ItemIndex:= 0;
    Close;
    SQL.Text:= 'SELECT nombre FROM unidades ORDER BY nombre';
    Open;
    while not Eof do
    begin
      cmbUnidadTipo.Properties.Items.Add(FieldByName('nombre').AsString);
      cmbUnidadTipoBusq.Properties.Items.Add(Trim(FieldByName('nombre').AsString));
      Next;
    end;
    cmbUnidadTipo.ItemIndex:= 0;
    Close;
  end;
  FiltrarComboBox;


end;


Código Delphi [-]
procedure TfrmArticulos.cmbCategoriasPropertiesChange(Sender: TObject);
begin
FiltrarCombobox;
end;

Hola estoy retomando el ejemplo de hace tiempo.. debido a que estuve ocupado trabajando
ahora lo he probado y no filtra el combobox sigue apareciendome todo en el segundo combobox
espero puedas ayudarme
Responder Con Cita
  #11  
Antiguo 12-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
siendo
]
Código Delphi [-]
categorias       unidades
clave              clave
nombre           nombre
fecha             fecha
                    nombre2


combobox1-categorias                     combobox2-unidades
nombre                             nombre               nombre2
----------                      -------------      ---------
bebidas                           gaseosa             bebidas
licores                            gaseosa             bebidas
                                    cerveza              licores
Responder Con Cita
  #12  
Antiguo 13-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
alguien que pueda saber por ahi como puedo filtrar los datos de 2 combobox ? mediante codigo tal como menciono arriba ?
gracias de antemano
Responder Con Cita
  #13  
Antiguo 13-05-2011
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 Rofocale.
Cita:
Hola estoy retomando el ejemplo de hace tiempo.. debido a que estuve ocupado trabajando
ahora lo he probado y no filtra el combobox sigue apareciendome todo en el segundo combobox
espero puedas ayudarme
Y tenés razón, no hacía el filtrado.

Cambié los nombres de los campos de las tablas anteriores, quedaron así:
TABLA CATEGORIAS
CCATEGORIA CHAR(1)
CNOMBRE VARCHAR(20)

TABLA UNIDADES
UCATEGORIA CHAR(1)
UNOMBRE VARCHAR(20)


En mi prueba usé estos datos:
TABLA CATEGORIAS
CAT - NOMB.
-----------------------
A - BEBIDAS
B - LICORES

TABLA UNIDADES
CAT - NOMB.
--------------------
A - GASEOSAS
A - JUGOS
B - VINOS
A - LICUADOS
B - LICORES
B - CHAMPAGNES
A - AGUA MINERAL
B - CERVEZAS


El código Delphi:
Código Delphi [-]
...
procedure TForm1.FiltrarComboBox;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT UNOMBRE FROM UNIDADES, CATEGORIAS');
  IBQuery1.SQL.Add('WHERE UCATEGORIA = CCATEGORIA AND UCATEGORIA =');
  IBQuery1.SQL.Add('(SELECT CCATEGORIA FROM CATEGORIAS WHERE CNOMBRE =:NOMB)');
  IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
  IBQuery1.Open;
  cbUnidades.Clear;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('UNOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY CNOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbCategorias.Items.Add(IBQuery1.FieldByName('CNOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbCategorias.ItemIndex:= 0;
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY UNOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('UNOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close;
  FiltrarComboBox
end;

procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
  FiltrarComboBox;
end;

Al seleccionar la categoria en cbCategorias filtra el combo cbUnidades acorde a la categoría seleccionada.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-05-2011 a las 04:07:18.
Responder Con Cita
  #14  
Antiguo 14-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
no me filtra me siguen apareciendo en el combobox unidades.. los datos de forma triplicada

necesito ayuda
Responder Con Cita
  #15  
Antiguo 14-05-2011
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 Rofocale.

Acabo de probarlo de nuevo y funciona perfectamente.

¿ Estas seguro que asignaste el evento OnChange a cbCategorias y dentro de él llamas a FiltrarComboBox ?

Por otro lado, ¿Reproduciste la totalidad del ejemplo (incluídas las tablas) o sólo copiaste/pegaste sobre tus datos ? por que si es del último modo y los datos difieren bíen podría no funcionar.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-05-2011 a las 16:20:51.
Responder Con Cita
  #16  
Antiguo 14-05-2011
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 de nuevo.

Para disipar toda duda y ante la imposibilidad de enviarte la base de datos te adjunto imágenes del funcionamiento:
BEBIDAS:


LICORES:


Nota: Puse la propiedad del segundo combo a csSimple y lo estiré para una mejor visualización.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #17  
Antiguo 14-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
hola mira en mi table categorias y unidades tengo lo sgte

categorias
----------

clave
nombre
fecha
ccategorias


unidades
-----------
clave
nombre
fecha
nombre2 ( este ultimo es como si fuera en el tuyo ucategorias)



Código Delphi [-]
procedure TfrmArticulos.FiltrarComboBox;
begin
  with dmDatos.qryConsulta do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT u.nombre AS unombre FROM unidades u ,categorias c');
    SQL.Add('WHERE u.nombre2 = c.ccategorias AND u.nombre2 =');
    SQL.Add('(SELECT c.ccategorias FROM categorias c WHERE c.nombre = :nomb)');
    ParamByName('nomb').AsString := cmbCategorias.Text;
    Open;
    cmbUnidadTipo.Clear;
    while not dmDatos.qryConsulta.Eof do
    begin
      cmbUnidadTipo.Properties.Items.Add(FieldByName('unombre').AsString);
      Next;
    end;
    cmbUnidadTipo.ItemIndex:= 0;
    Close
  end;
end;

ah y uso combobox de devexpress seria en el evento propertieschange
Código Delphi [-]
procedure TfrmArticulos.cmbCategoriasPropertiesChange(Sender: TObject);
begin
FiltrarCombobox;
end;
y en el formshow

Código Delphi [-]
begin
   with dmDatos.qryConsulta do
   begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM categorias ' ORDER BY nombre');
    Open;
    while not Eof do
    begin
      cmbCategorias.Properties.Items.Add(FieldByName('nombre').AsString);
   
      Next;
    end;
    cmbCategorias.ItemIndex:= 0;
    Close;
    end;
    with dmDatos.qryConsulta do
    begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM unidades  ORDER BY nombre');
    Open;
    while not Eof do
    begin
      cmbUnidadTipo.Properties.Items.Add(FieldByName('nombre').AsString);
      
      Next;
    end;
    cmbUnidadTipo.ItemIndex:= 0;
    Close;
  end;
  FiltrarComboBox;
end;

algo debo estar haciendo mal porque porque al seleccionar licores no me filtra y mas bien ya aparecen triplicados todos en el segundo combobox
Responder Con Cita
  #18  
Antiguo 14-05-2011
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.

Mirá, vamos a simplificar la cosa, renombrá los campos de tus tablas (o crealas nuevamente) para que queden así:

CATEGORIAS
CLAVE_CA
NOMBRE_CA
FECHA_CA
CATEGORIA_CA

UNIDADES
CLAVE_UN
NOMBRE_UN
FECHA_UN
CATEGORIA_UN


Con esos nombres el código Delphi es:
Código Delphi [-]
procedure TForm1.FiltrarComboBox;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT NOMBRE_UN FROM UNIDADES, CATEGORIAS ');
  IBQuery1.SQL.Add('WHERE CATEGORIA_UN = CATEGORIA_CA AND CATEGORIA_UN = ');
  IBQuery1.SQL.Add('(SELECT CATEGORIA_CA FROM CATEGORIAS WHERE NOMBRE_CA = :NOMB)');
  IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
  IBQuery1.Open;
  cbUnidades.Clear;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE_UN').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY NOMBRE_CA';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbCategorias.Items.Add(IBQuery1.FieldByName('NOMBRE_CA').AsString);
    IBQuery1.Next;
  end;
  cbCategorias.ItemIndex:= 0;
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY NOMBRE_UN';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE_UN').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close;
  FiltrarComboBox
end;

procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
  FiltrarComboBox
end;

Está probado y al igual que el código anterior funciona correctamente. Siempre que los datos sean coherentes, es decir, si las bebidas sin alcohol son categoría A y las que tienen alcohol B, no guardes 'GASEOSAS' poniendo en el campo CATEGORIA_UN una 'B'.

Fijate que remarque en negrita los campos de la consulta en el código Delphi, debes ponerlos textualmente así. Ya que así están definidos en la declaración de la tabla. (No califiques los campos con C1 y C2, tampoco es necesario el uso de AS)

Resumiendo, si copias textualmente este ejemplo desde la creación de las tablas, te tiene que funcionar.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-05-2011 a las 20:30:10.
Responder Con Cita
  #19  
Antiguo 14-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
mis categorias no son A Y B son asi
Código Delphi [-]
categorias                                  unidades

nombre   ccategorias                    nombre             nombre2
bebidas   bebidas                         gaseosa            bebidas
licores     licores                          cerveza             licores
                                                agua mineral      bebidas

ahora el codigo que tu me has puesto que funciona bien en el tuyo no me funciona implementandola a mi base de datos... no puedo renombrar los campos
ya que algunos son utilizados en otras partes del programa para poder seguir creando mas categorias y unidades etc.. pero en resumidas cuentas los campos asi tengan el mismo nombre u otro deberia de funcionar
no se que este mal en mi casa hay problema con lo mio y no se como solucionarlo ya que efectivamente si solo me hago un programa chikito con 2 combobox y la base de datos como me lo has puesto si funciona, no se que hacer
Responder Con Cita
  #20  
Antiguo 14-05-2011
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 Rofocale.

Modifique los nombres de campos en las tablas que utilicé en la prueba por los que pusiste en tu mensaje.

Esta consulta funciona correctamente:
Código Delphi [-]
procedure TForm1.FiltrarComboBox;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT C1.NOMBRE FROM UNIDADES C1, CATEGORIAS C2');
  IBQuery1.SQL.Add('WHERE NOMBRE2 = CCATEGORIAS AND NOMBRE2 =');
  IBQuery1.SQL.Add('(SELECT CCATEGORIAS FROM CATEGORIAS C2 WHERE C2.NOMBRE =:NOMB)');
  IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
  IBQuery1.Open;
  cbUnidades.Clear;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY NOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbCategorias.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbCategorias.ItemIndex:= 0;
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY NOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close;
  FiltrarComboBox
end;

procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
  FiltrarComboBox
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
ayuda con combobox mdcynsk PHP 2 21-10-2010 15:20:37
Curiosidad While anidado con ADO lpedrazzi Conexión con bases de datos 0 30-11-2007 15:04:54
Query Anidado Ricsato SQL 4 06-11-2006 21:58:26
Ayuda con ComboBox pecosita C++ Builder 2 17-09-2006 02:38:26
Select anidado erika.martinez SQL 2 02-02-2006 12:19:57


La franja horaria es GMT +2. Ahora son las 07:05:44.


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