Jump to content


Photo

hola amigos como llenos varios combobox desde varias tablas


  • Please log in to reply
7 replies to this topic

#1 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 22 September 2011 - 05:17 PM

hola amigos de nuevo, esta vez le pregunto como puedo llenar varios combobox con tablas diferente de mi BD, yo tengo 5 combobox el cual solo se llenar un solo.
bien yo lo que hice tome un ADOquery y el oncreate puse esto:


delphi
  1. procedure TForm2.FormCreate(Sender: TObject);
  2. begin
  3.   ADOQuery1.SQL.Text:='SELECT [TIPO DE ATENCIÓN].[TIPO DE ATENCIÓN]FROM [TIPO DE ATENCIÓN];';
  4.  
  5.   ADOQuery1.Active:=true;
  6. while not ADOQuery1.Eof do
  7. begin
  8.  
  9. ComboBox1.Items.Add(ADOQuery1.Fields[0].text);
  10.   ADOQuery1.Next;
  11. end;


bueno yo podria hacer es poner mas ADOquery y hacer los mismo paso con los otros combobox, pero creo que de seguro debe haber otra manera para hacerlo sin tener que usar varios ADOquery.
Aguien puede ayudarme???
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 22 September 2011 - 05:21 PM

Hola
Hay muchas maneras de hacer lo que quieres.
1- Lo que haces, uno por uno.
2- hacer una consulta que traiga los datos que necesitas de las tablas que necesitas y colocar los datos en sus respectivos combobox.
3- otras mas que ni me imagino. :)
Saludos
  • 0

#3 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 22 September 2011 - 05:32 PM

me podrian dar un ejemplo de 2-hacer una consulta que traiga los datos que necesitas de las tablas que necesitas y colocar los datos en sus respectivos combobox. gracias
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 22 September 2011 - 05:34 PM

Hola
Dame los datos:
1- Nombre de las tablas.
2- Nombre de los campos que quieres poner en los combobox.
3- Cuantos Combobox ?.
Saludos
  • 0

#5 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 22 September 2011 - 06:03 PM

Tablas: atenciones, valor, maestro
Campos: id_atenciones, nombre, direccion
bien id_atenciones pertenece a la tabla ateciones las demas siguen el orden
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 22 September 2011 - 06:10 PM

Hola
Intenta esto:


delphi
  1. procedure TForm2.FormCreate(Sender: TObject);
  2. begin
  3.   ADOQuery1.SQL.Text:='SELECT atenciones.id_atenciones, valor.nombre, maestro.direccion '+
  4.                     ' FROM id_atenciones, nombre, direccion';
  5.  
  6.   ADOQuery1.Active:=true;
  7.   while not ADOQuery1.Eof do
  8. begin
  9.   ComboBox1.Items.Add(ADOQuery1.Fields[0].text);
  10.   ComboBox2.Items.Add(ADOQuery1.Fields[1].text); 
  11.   ComboBox3.Items.Add(ADOQuery1.Fields[2].text); 
  12.   ADOQuery1.Next;
  13. end;


Puede ser que pida un group by, pero ya veremos.
Saludos
  • 0

#7 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 14 October 2011 - 06:07 PM

hola eh puesto el codigo hermano caral, pero los combobox se quedan vacios, mira como lo hice:


delphi
  1. procedure THOSPI.FormCreate(Sender: TObject);
  2.  
  3. begin
  4.   //Llena el Tipo de Sala
  5.  
  6.  
  7.   //codigo nuevo
  8.   ADOQuery1.SQL.Text:='SELECT [TIPO DE SALA].[TIPO DE SALA], LABORATORIOS.LABORATORIO,IMAGENES.[ESTUDIO DE IMAGEN],MEDICAMENTOS.MEDICAMENTO FROM [TIPO DE SALA], LABORATORIOS, IMAGENES, MEDICAMENTOS';
  9.   ADOQuery1.Active:=true;
  10.   while not ADOQuery1.Eof do
  11.         begin
  12.   ComboBox1.Items.Add(ADOQuery1.Fields[0].text);
  13.   ComboBox2.Items.Add(ADOQuery1.Fields[1].text);
  14.   ComboBox3.Items.Add(ADOQuery1.Fields[2].text);
  15.   ComboBox4.Items.Add(ADOQuery1.Fields[3].text);
  16.   ADOQuery1.Next;
  17.  
  18. end;


  • 0

#8 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 15 October 2011 - 10:11 AM

Si necesitas hacerlo en 5 combobox pero no quieres usar más de un ADOQuery (no comprendo porqué no, Delphi no cobra por componente usado  *-) :D ;) ) puedes usar el mismo pero sustituyendo la sentencia cada vez que quieres llenar un combo diferente...

Algo así:



delphi
  1. procedure Forma.FormCreate(Sender: TObject);
  2. var
  3.   i: Integer;
  4. begin
  5.     // Llenamos Combo 1
  6.     ADOQuery1.Close;   
  7.     ADOQuery1.SQL.Text := 'SELECT CAMPOS FROM TABLA WHERE CONDICION';
  8.     ADOQuery1.Open;
  9.  
  10.     for i:= 0 to ADOQuery.RecordCount -1 do
  11.     begin
  12.         Combo1.Items.Add(ADOQuery.Fields[0].AsString);
  13.         ADOQuery1.Next;
  14.     end;
  15.  
  16.     // Llenamos Combo 2
  17.       ADOQuery1.Close;   
  18.       ADOQuery1.SQL.Text := 'SELECT CAMPOS FROM TABLA WHERE CONDICION';
  19.       ADOQuery1.Open;
  20.  
  21.       for i:= 0 to ADOQuery.RecordCount -1 do
  22.       begin
  23.           Combo2.Items.Add(ADOQuery.Fields[0].AsString);
  24.           ADOQuery1.Next;
  25.       end;
  26.  
  27.     .
  28.     .
  29.     .
  30.  
  31.   {y así sucesivamente}
  32.  
  33. end;



Otra manera que pudieras hacer es crear una función general para llenar los combos donde le pases como parámetros la consulta que llena el combo, y el combo a llenar y sólo lo mandes llamar tantas veces como sea necesario... algo así:



delphi
  1. procedure LlenaCombo(SQL: String; Combo: TComboBox);
  2. var
  3.   i: Integer;
  4. begin
  5.       ADOQuery1.Close;   
  6.         ADOQuery1.SQL.Text := SQL;
  7.         ADOQuery1.Open;
  8.  
  9.       for i:= 0 to ADOQuery.RecordCount -1 do
  10.         begin
  11.             Combo.Items.Add(ADOQuery.Fields[0].AsString);
  12.             ADOQuery1.Next;
  13.         end;
  14. end;



Y lo mandas llamar en el create de la forma principal tantas veces como lo necesites:



delphi
  1. procedure Forma.FormCreate(Sender: TObject);
  2. begin
  3.     LlenaCombo('SELECT CAMPO FROM TABLA1 WHERE CONDICION', Combo1);  // Llena Combo1
  4.     LlenaCombo('SELECT CAMPO FROM TABLA2 WHERE CONDICION', Combo2);  // Llena Combo2
  5.     LlenaCombo('SELECT CAMPO FROM TABLA3 WHERE CONDICION', Combo3);  // Llena Combo3
  6.     LlenaCombo('SELECT CAMPO FROM TABLA4 WHERE CONDICION', Combo4);  // Llena Combo4
  7.     LlenaCombo('SELECT CAMPO FROM TABLA5 WHERE CONDICION', Combo5);  // Llena Combo5
  8. end;



De esta manera solo usas un ADOQuery y como es una función recursiva, sólo la desarrollas una sola vez y la mandas llamar todas la veces que quieras  (y)

Espero serte de ayuda... cualquier cosa, no dudes en comentarla

Saludox ! :)




[pre]
[/pre]
  • 0




IP.Board spam blocked by CleanTalk.