PDA

Ver la Versión Completa : Llevar un dato de un formulario a otro


giulichajari
05-07-2013, 21:39:50
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
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
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
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.


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
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.