Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Llevar un dato de un formulario a otro (https://www.clubdelphi.com/foros/showthread.php?t=83603)

giulichajari 05-07-2013 21:39:50

Llevar un dato de un formulario a otro
 
Bueno amigos espero poder expresarme bien ahora.

Tengo un formulario donde ingreso actividades de una quinta citrica, y para esto es necesario el campo Empleado, es decir el empleado que realizo la actividad, entonces ingreso el idempleado que debe existir en la tabla de empleados, pero el usuario nunca va a saber el id de cada uno de sus empleados, entonces me las ingenie haciendo otro formulario con un DBGRid que muestra los empleados, el usuario selecciona uno(queda negreado en el grid) y luego obtengo el idempleado de este registro.

Entonces necesito llevar este id al formulario anterior donde se ingresan las actividades.¿Y como lo hago?

O bien diganme otras estrategias, pero de alguna manera tengo que registrar el empleado que hizo la actividad.

ecfisa 05-07-2013 21:58:12

Hola.

Lo mas simple es usar un TDBLookupComboBox y te ahorras el uso de un form adicional.

Para explicarte como configurarlo necesitaría saber:
  • Donde residen los DataSets (actividades y empleados).
  • Nombres de los campos ID y nombre de la tabla empleados.
  • Nombre del campo de la tabla actividades donde deberá ir el ID del empleado.

Saludos :)

giulichajari 05-07-2013 22:00:46

Cita:

Empezado por ecfisa (Mensaje 463295)
Hola.

Lo mas simple es usar un TDBLookupComboBox y te ahorras el uso de un form adicional.

Para explicarte como configurarlo necesitaría saber:
  • Donde residen los DataSets (actividades y empleados).
  • Nombres de los campos ID y nombre de la tabla empleados.
  • Nombre del campo de la tabla actividades donde deberá ir el ID del empleado.

Saludos :)

Habia pensado en eso pero pueden haber cientos de empleados... lo ideal sino seria ordenarlo por apellido y nombre.

ecfisa 05-07-2013 22:06:28

Cita:

Empezado por giulichajari (Mensaje 463296)
Habia pensado en eso pero pueden haber cientos de empleados... lo ideal sino seria ordenarlo por apellido y nombre.

Hola.

Si deseas mostrar los campos ordenados por nombre te conviene usar un Query de los componentes que uses (TQuery, TADOQuery,TIBQuery,...) para alimentar el Combo.

El TDBLookupComboBox permite la búsqueda incremental (va mostrando a medida que ingresas caracteres).

Saludos. :)

AzidRain 06-07-2013 01:11:24

Ya te dió eficas la solución. Recuerda que DBLookUpComboBox tiene búsqueda por la primera letra. Por otro lado si hablarmos de demasiados registros quizá te convenga más hacer un Form adicional con un campo de búsqueda donde pongan el nombre o parte de él, hacer un query con un LIKE y mostrar los resultados en un pequeño grid. Al hacer doble click en el empleado seleccionado, guardar el id y devolverlo a al form que lo invocó o un valor x definido por tí para indicar que no se seleccionó nada.

giulichajari 06-07-2013 09:16:04

Gracias
 
Cita:

Empezado por ecfisa (Mensaje 463295)
Hola.

Lo mas simple es usar un TDBLookupComboBox y te ahorras el uso de un form adicional.

Para explicarte como configurarlo necesitaría saber:
  • Donde residen los DataSets (actividades y empleados).
  • Nombres de los campos ID y nombre de la tabla empleados.
  • Nombre del campo de la tabla actividades donde deberá ir el ID del empleado.

Saludos :)

Si me puedes ayudar mejor:

Los DataSet que tengo son un TTable para poder ingresar los datos de la actividad en la tabla ACTIVIDADES (esta todo en access).
Las tablas son:
EMPLEADO(#Idempleado,Nombre,Apellido,Tel,Direccion,Mail,Idtrabajo);
EMPLEO(#Idempleo,Idempleado,Idtrabajo);
TRABAJOS(#Idtrabajo,Descripcion);

La tabla de actividades es
ACTIVIDADES(#Idactividad,Detalle,Fecha,Idempleado);

ecfisa 06-07-2013 22:46:15

Hola.

Todos los valores son configurables en tiempo de diseño mediante el Object Inspector, pero por razónes de claridad,
voy a asignarlos por código.

Código:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TDBLookupComboBox* lcb = static_cast<TDBLookupComboBox*> (DBLookupComboBox1);

  // Consulta
  qyEmpleado->Close();
  qyEmpleado->SQL->Clear();
  qyEmpleado->SQL->Add("SELECT IDEMPLEADO, APELLIDO &' '& NOMBRE AS FULLNAME");
  qyEmpleado->SQL->Add("FROM EMPLEADO ORDER BY APELLIDO &' '& NOMBRE");
  qyEmpleado->Open();

  // Configuracion del DBLookupComboBox
  lcb->ListSource = dsEmpleado;  // DataSource -> Query empleado
  lcb->ListField  = "FULLNAME";  // Nombre del campo apellido+nombre
  lcb->KeyField  = "EMPNO";      // Nombre del campo ID del empleado
  lcb->DataSource = dsActividad;  // DataSource -> Table actividad
  lcb->DataField  = "IDEMPLEADO"; // Nombre del campo (tabla actividad)
                                  // donde se almacena el ID del empleado
}

No trabajo en Ms Access pero según leí, los campos se concatenan mediante el operador & en la consulta sql.

Saludos. :)

giulichajari 07-07-2013 14:59:59

Muchas gracias!
 
Ya se soluciono. gracias por tu ayuda.
El unico tema es que no se filtra y espera a que ingrese todas las letras necesarias. Por ejemplo tengo 2 empeleados: Caruso y Cardozo, se posiciona en caruso pero sigue mostrando otros registro como perez. Que podria hacer? Al escribir la C no tendria que mostrar la P, ya al marcar la 'U' 'caru' debe desaparecer cardozo.


La franja horaria es GMT +2. Ahora son las 06:12:47.

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