Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dos Combobox o DBCombobox Master/Detail (https://www.clubdelphi.com/foros/showthread.php?t=85695)

feliz-58 18-04-2014 19:55:01

Dos Combobox o DBCombobox Master/Detail
 
Hola a todos,

Les escribo para aclarar la siguiente duda, es algo sencilla pero eh buscado y no veo como, como es que dos Combobox o DBCombobox aparezcan tipo master/detail?

ejemplo:
Base de datos:

Tabla 1: "Primer Combobox"
Animales
Frutas

Tabla 2: "Segundo Combobox"
Perro
Gato
Manzana
Pera

Entonces si en el combobox 1, selecciono Animales, en el combobox dos solo salen: Perro y gato.

Etc....

Saludos! :)

ecfisa 18-04-2014 20:33:03

Hola feliz-58.

Una opción para dos TComboBox:
Código Delphi [-]
const
  ANIMAL = 0;
  FRUTA  = 1;
  //...
var
  TS1: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with ComboBox1 do
  begin
    AddItem('Animales',TObject(ANIMAL));
    AddItem('Frutas',TObject(FRUTA));
    //...
  end;
  TS1:= TStringList.Create;
  TS1.AddObject('Perro',TObject(ANIMAL));
  TS1.AddObject('Manzana',TObject(FRUTA));
  TS1.AddObject('Gato',TObject(ANIMAL));
  TS1.AddObject('Pera',TObject(FRUTA));
  TS1.AddObject('Loro',TObject(ANIMAL));
  TS1.AddObject('Uva',TObject(FRUTA));
  //...
  ComboBox1.Text:= EmptyStr;
  ComboBox2.Text:= EmptyStr;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: Integer;
begin
  with ComboBox2 do
  begin
    Items.Clear;
    for i:= 0 to TS1.Count-1 do
      if Integer(TS1.Objects[i]) = Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]) then
       Items.Add(TS1[i])
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TS1.Free;
end;

Saludos :)

feliz-58 18-04-2014 20:37:45

Cita:

Empezado por ecfisa (Mensaje 475313)
Hola feliz-58.

Una opción para dos TComboBox:
Código Delphi [-]
const
  ANIMAL = 0;
  FRUTA  = 1;
  //...
var
  TS1: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with ComboBox1 do
  begin
    AddItem('Animales',TObject(ANIMAL));
    AddItem('Frutas',TObject(FRUTA));
    //...
  end;
  TS1:= TStringList.Create;
  TS1.AddObject('Perro',TObject(ANIMAL));
  TS1.AddObject('Manzana',TObject(FRUTA));
  TS1.AddObject('Gato',TObject(ANIMAL));
  TS1.AddObject('Pera',TObject(FRUTA));
  TS1.AddObject('Loro',TObject(ANIMAL));
  TS1.AddObject('Uva',TObject(FRUTA));
  //...
  ComboBox1.Text:= EmptyStr;
  ComboBox2.Text:= EmptyStr;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i: Integer;
begin
  with ComboBox2 do
  begin
    Items.Clear;
    for i:= 0 to TS1.Count-1 do
      if Integer(TS1.Objects[i]) = Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]) then
       Items.Add(TS1[i])
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TS1.Free;
end;

Saludos :)

y reconozco tu dedicación a responder en este club Ecfisa, Te felicito, Gracias!

No hay una forma que use bases de datos .-.

ecfisa 18-04-2014 21:04:54

Hola feliz-58.

Supongamos que tenes las tablas:
Código SQL [-]
CREATE TABLE GENERO (
  ID         INTEGER,
  NOMBRE     VARCHAR(30),
  ESPECIE_ID INTEGER,
  CONSTRAINT PK_GENERO PRIMARY KEY (ID)
);
 
CREATE TABLE ESPECIES (
  ID         INTEGER,
  NOMBRE     VARCHAR(30),
  ESPECIE_ID INTEGER,
  CONSTRAINT PK_ESPECIES PRIMARY KEY (ID)
);

Agrega dos componentes Query (TQuery, TIBQuery, etc) y lo siguiente:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with IBQueryGenero do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM GENERO';
    Open;
  end;
  with IBQueryEspecies do
  begin
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT * FROM ESPECIES WHERE ESPECIE_ID = :ESPECIE_ID';
    DataSource:= dsGenero; // DataSource asociado a IBQueryGenero
    Open;
  end;
end;
Y ya tenes establecida la relación master/detail para usarla con cualquier data control (DBGrid's por ejemplo).

Saludos :)


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

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