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 08-01-2020
Navegante Navegante is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
Navegante Va por buen camino
Como puedo relacionar un combobox y una grid?

Hola.

Necesito relacionar la selección de un combobox con una grid. Es decir, cuando el valor el combobox cambie, debe cambiar los registros mostrados en la grid.

Tengo una conexión a base de datos SQL Server usando FireDAC. La conexión funciona sin problema
Cree un FDQuery para llenar el combobox y funciona (use LiveBinding)
Cree un FDQuery para llenar la grid y funciona.

Ahora lo que necesito es que si cambia el valor del combobox, cambien los resultados mostrados en la grid.

En el combobox están los nombres de los vendedores
En la grid se muestra las ventas de los vendedores. La idea es que al seleccionar un vendedor se muestren únicamente las ventas de ese vendedor

El vendedor tiene un código de identificación (Id) y un Nombre. En el combobox debo mostrar el nombre, pero cuando se seleccione un nombre de vendedor, el valor que debe devolver es el ID para que pueda ejecutarse el query de la grid basado en el ID del vendedor.

Alguien podría indicarme como puedo lograr eso?

De antemano gracias.
Responder Con Cita
  #2  
Antiguo 08-01-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En el "change" del combobox tomas el número del vendedor y haces la consulta:
Código Delphi [-]
qry.close;
qry.params[0].asinteger := valor tomado del combobox;
qry.open;
En el qry tienes select campos from ventas where vendedor=:vendedor
Obviamente, el qry está enlazado mediante un datsource al dbgrid donde muestras las ventas.
Responder Con Cita
  #3  
Antiguo 08-01-2020
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.

Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  cb : TComboBox;
begin
  cb := TComboBox(Sender);
  if cb.ItemIndex <> -1 then
  begin
    FDQuery1.Close;
    FDQuery1.SQL.Text := 'SELECT * FROM VENTAS WHERE VENDEDOR = :NOMBRE';
    FDQuery1.ParamByName('NOMBRE').AsString := cb.Items[cb.ItemIndex];
    FDQuery1.Open;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 08-01-2020
Navegante Navegante is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
Navegante Va por buen camino
Gracias a ambos por su respuesta.

En el caso del TComboBox se muestran los nombres de los vendedores, pero necesito que cuando seleccionen un nombre de vendedor lo que devuelva es el ID del vendedor, pues en el detalle de ventas está el ID del vendedor y no el nombre. En el TComboBox para facilidad del usuario se debe mostrar el nombre pero internamente debe manejarse con el ID.

Se puede hacer?

Saludos,


Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  cb : TComboBox;
begin
  cb := TComboBox(Sender);
  if cb.ItemIndex <> -1 then
  begin
    FDQuery1.Close;
    FDQuery1.SQL.Text := 'SELECT * FROM VENTAS WHERE VENDEDOR = :NOMBRE';
    FDQuery1.ParamByName('NOMBRE').AsString := cb.Items[cb.ItemIndex];
    FDQuery1.Open;
  end;
end;

Saludos
Responder Con Cita
  #5  
Antiguo 09-01-2020
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.

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  cb: TComboBox;
begin
  FDQuery1.Close;
  FDQuery1.SQL.Text := 'SELECT ID, NOMBRE FROM VENTAS';
  FDQuery1.Open;
  cb := ComboBox1;
  // Recorrer tabla y guardar nombre e id en el combo
  while not FDQuery1.Eof do
  begin
    cb.Items.AddObject(FDQuery1.FieldByName('MARCA').AsString,
      TObject(FDQuery1.FieldByName('ID').AsInteger));
    FDQuery1.Next;
  end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  cb : TComboBox;
  id: Integer;
begin
  cb := TComboBox(Sender);
  id := Integer(cb.Items.Objects[cb.ItemIndex]); // Aquí se obtiene el valor del ID

  ShowMessageFmt('El ID es: %d', [id]);

  if cb.ItemIndex <> -1 then
  begin
    FDQuery1.Close;
    FDQuery1.SQL.Text := 'SELECT * FROM VENTAS WHERE VENDEDOR = :NOMBRE';
    FDQuery1.ParamByName('NOMBRE').AsString := cb.Items[cb.ItemIndex];
    FDQuery1.Open;
  end;
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
¿Cómo puedo desplegar Grid en un combobox (o VCL semejante)? JJuan Varios 5 24-09-2012 17:56:56
Como puedo relacionar un StringGrid con un componente Rave Report ManuelPerez Varios 0 30-09-2007 17:26:22
como puedo relacionar dos DBLookupComboBox Alexa Firebird e Interbase 0 08-08-2006 00:46:03
Como puedo cargar un ComboBox en un Gridview Shidalis OOP 2 10-08-2005 14:29:29
¿Cómo puedo evitar que se escriba en el ComboBox? nuri Varios 6 28-07-2005 18:03:33


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


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