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 21-08-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Hacer que un DBLookupComboBox funcione como un ComboBox, o viceversa

Hola, ando por aca molestando de nuevo. Ahora mi consulta tiene que ver con el uso del componente DBLookupComoBox. Antes de utiizar este componente usa un combobox normal, pero como tuve que accesar a base de datos empece a utilizar el BDCombobox. La cosa es que no puedo repetir algunas funciones que hacia con el combobox normal; por ejemplo quiero que al iniciar el programa en el DBLookupComoBox se muestra un texto como “Elija su opción” lo cual hacia en el combobox con este código
Código Delphi [-]
nombredelcombo.Text:= “Elija su opción”;
pero esto no funciona en el DBcombo… ya busque en el foro y me encontré con esto
Código Delphi [-]
DBLookupComboBox.KeyValue := Query1.FieldByName('codigo').AsInteger;
Pero resulta que a mi no me aparece la propiedad FieldByName, además de que , según entendí, esto solo me ayuda a mostrar un valor por defecto y yo quiero algo diferente.
Por eso quiero pedirles que me ayuden a lograr que en el DBLookupComoBox se muestra la leyenda “elija su opción” al momento de ejecutar el programa, o bien que me orienten como puedo hacer para tener un combobox normal pero enlazado a una base datos
Responder Con Cita
  #2  
Antiguo 21-08-2012
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 wull.

Cita:
quiero que al iniciar el programa en el DBLookupComoBox se muestra un texto como “Elija su opción”
No es posible de esa forma, para que lo fuera, en el TDataSet asociado, tendría que existir un registro que contuviera ese texto.

Cita:
o bien que me orienten como puedo hacer para tener un combobox normal pero enlazado a una base datos
Tampoco es posible enlazar un TComboBox a una base de datos, pero podrías hacer algo como:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  with Query1 do
  begin
    Open;
    while not Eof do
    begin
      ComboBox1.AddItem(FieldByName('CAMPO_X').AsString,       // campo que se muestra
                        TObject(FieldByName('ID').AsInteger)); // campo clave
      Next;
    end;
    First;
  end;
  ComboBox1.Text := 'Elija su opción';
end;

...

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex <> -1 then
    Query1.Locate('ID', Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]),[]);
end;
...

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 21-08-2012 a las 20:10:43. Razón: corrección
Responder Con Cita
  #3  
Antiguo 21-08-2012
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Bueno, no se que componentes tengas o dispongas, pero el dblookupcombo de los jedi, le puedes poner un texto de elija su opción o lo que quieras... y también esta ligado a la BD...
Responder Con Cita
  #4  
Antiguo 21-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
No es posible de esa forma, para que lo fuera, en el TDataSet asociado, tendría que existir un registro que contuviera ese texto.
Y mira que yo he tomado esa opción en ocasiones. Normalmente mis llaves primarias son campos enteros numerdos desde 1. Así que aprovecho el 0 para poner un texto así.

De todas maneras, siempre queda la opción de poner un pequeño Label con la información requerida.

// Saludos
Responder Con Cita
  #5  
Antiguo 22-08-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Cambiar DBLookupComboBox por DBComboBox ?

Ufff vaya eficacia y rapidez en las respuestas. Me he pasado el día leyendo acerca de los DBLookupComboBox, y ya he comprendido lo que mencionan en sus comentarios. Ya he analizado las propuestas de ecfisa y estaba a punto de probar una de ellas, pero me tope con el componente BDComboBox... ahora mi duda es, puedo utilizar este componente para lograr lo que quiero? más que nada me gustaria saber como funciona el DBComboBox ya leí un poco acerca de el, pero la verdad no entendí mucho... alguien me puede explicar si no es mucha molestia.
Responder Con Cita
  #6  
Antiguo 22-08-2012
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 wull.

Traducción de la ayuda de Delphi:
Cita:
Utilice TDBComboBox para permitir a los usuarios cambiar el valor de un campo en el registro actual de un conjunto de datos ya sea mediante la selección de un elemento de una lista o escribiendo en el cuadro de edición de parte del control. El elemento seleccionado o el texto introducido se convierte en el nuevo valor del campo si la propiedad ReadOnly del cuadro combinado de base de datos es falsa. El cuadro combinado se puede personalizar para activar o desactivar escribiendo en el área de edición del control, para visualizar la lista como una lista desplegable o como una lista permanentemente visible, para ordenar los elementos de la lista, y así sucesivamente.
Es decir que usado solamente para elegir una opción, no hay grandes ventajas frente al TComboBox, ya que de todos modos tendrías que realizar la carga de los registros en su propiedad Items al inicio y además no dispondrás del evento OnChange al cambiar de ítem.

Por otro lado, reviendo el código que te sugerí, tal vez no sea necesario que almacenes el ID. Si sólo es a fin de posicionarte basta con que hagas:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  with Query1 do
  begin
    Open;
    while not Eof do
    begin
      ComboBox1.Iems.Add(FieldByName('CAMPO_X').AsString); // campo que se muestra
      Next;
    end;
    First;
  end;
  ComboBox1.Text := 'Elija su opción';
end; 

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex <> -1 then
    Query1.Locate('CAMPO_X', ComboBox1.Items[ComboBox1.ItemIndex],[]);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 23-08-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
ecfisa muchas gracias por todo el tiempo que te tomas para contestar; ya estoy probando una solución en base a tu respuesta debido a lo cual me surgió otra duda, pero antes de preguntar voy a probar si me funciona primero... espero que sigas aquí por cualquier problema... de nuevo gracias.
Responder Con Cita
  #8  
Antiguo 23-08-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Extraer el itemindex o saber que opcion se ha elegido de un DBlookupcombo

Hola ecfisa, ya estoy de nuevo por aca molestando de nuevo. Como puedes leer en el titulo del mensaje lo que necesito es saber que opción ha elegido un usuario para que a travez de eso pueda realizar otra acción. Espero poder explicarme con este ejemplo:
Si tengo dos dblookupcombo uno llamado 'Combo1' para almacenar nombres de Continentes y otro llamado 'combo2' para guardar los países; entonces si elijo por ejemplo continente americano en el combo1 el combo2 deberia mostrar México, Argentina, Chile, etc., pero si elijo África por lógica los países deben cambiar. Lo anterior lo lograba en los TCombobox identificando el 'itemindex' del combo y aplicaba 'Case' para los indices algo asi:

Código Delphi [-]
if (micombo.ItemIndex > -1) then
  begin
   indexcombo:=combomunicipios.ItemIndex;
    case indexcombo of
       0:  combo2.Items.Add('México');
            combo2.Items.Add('Argentina'); // suponiendo que el case 0 es América
       1: combo2.Items.Add('Camerún'); // si el case 1 es África
Los componentes DBLookupComboBox no cuentan con la propiedad itemindex, por lo que he leído necesito tener varias tablas para enlazarlas a los DataSource y después al combo ¿verdad? se que puedo rellenarlos de forma manual, pero no se como hacerlo, ni tampoco como lograr que cambien para cada 'Case' entonces ¿como puedo lograr algo parecido a lo que hacia con los TComboBox?... agradeceré cualquier ayuda.
Responder Con Cita
  #9  
Antiguo 23-08-2012
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 wull.

Si no entiendo mál lo que buscas podrías manejar el filtrado desde la sentencia SQL, un ejemplo basado en la tabla country de dbdemos:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Query1.Open;
  ComboBox1.Clear;
  ComboBox2.Clear;
  while not Query1.Eof do
  begin
    ComboBox1.Items.Add(Query1.FieldByName('CONTINENT').AsString);
    ComboBox2.Items.Add(Query1.FieldByName('NAME').AsString);
    Query1.Next;
  end;
end;

procedure TForm1.ComboBoxChange(Sender: TObject);
begin
  with TComboBox(Sender) do
  begin
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT * FROM COUNTRY ');
    if Name = 'ComboBox1' then
      Query1.SQL.Add('WHERE CONTINENT = :PVALUE')
    else
      Query1.SQL.Add('WHERE NAME = :PVALUE');
    Query1.ParamByName('PVALUE').AsString := Items[ItemIndex];
    Query1.Open;
  end;
end;
Asigna el método ComboBoxChange al evento OnChange de ambos TComboBox.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 04-09-2012
wull wull is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 30
Poder: 0
wull Va por buen camino
Smile Problema resuelto.

Bien después de probar algunos de sus consejos y de leer mucho acerca del tema, pude dar con la solución. La verdad era bastante sencillo solo yo solo me complique la existencia. Al final use DBComboBox me resultaron bastante útiles para lograr lo que necesitaba, no sé porque no me di cuenta antes pero con esos controles si se pueden usar las propiedades ItemIndex e Item.Add que era lo que requería... muchas gracias a todos por tomarse la molestia de contestar y en especial a ecfisa por todas las atenciones brindadas.
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
Como hacer que la PC no funcione en un horario determinado JoAnCa Varios 8 02-04-2010 22:11:08
como hacer que un DBLookupComboBox muestre un historico de nombres seleccionados? mematanlimon OOP 4 28-01-2010 18:00:35
Como hacer que la lista desplegada de un Combobox, sea mas ancha que el propio combo JoAnCa Varios 2 24-03-2009 14:29:13
¿Como hacer que un combobox lea datos de la tabla2 y se puedan guardar en la tabla1? Yasnet MySQL 4 31-10-2008 00:22:32
Como hacer que funcione en Vista? Alfredo Varios 5 08-11-2007 14:31:01


La franja horaria es GMT +2. Ahora son las 01:06:15.


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