Hola buenas noches tengo 2 formularios en mi aplicacion.uno esta conformador por un dbgrid que listo los empleados y cuenta con 3 botones de abm(nuevo,modificar,eliminar) y el otro formulario de alta de empleados(este se abre al apretar el boton nuevo o modificar) si apreto el boton nuevo se abre en forma de insert, y si apreto el modificar se abre en forma de edit. Bien mi tabla esta formada de la siguiente forma que un empleado pueden tener 1 o varios puestos de trabajo
En el formulario de alta cargo los puestos de trabajo utilizando un CheckListBox que trae los puestos de una tabla de mi base de datos llamado "puestos". y dbedit para los demas datos como nombre, apellido,dni , para realizar consultas a la base uso componentes query de zeos la base de datos esta realizada en mysql-5 y la aplicacion en delphi 2010.
Bien mi problema esta que cuando realizo una modificacion de un empleado este que fue seleccionado de una grilla (al apretar el boton modificar) y al abrir el formulario de alta en forma de edit me trae todo los datos de ese empleado pero no me pone en true los puestos de trabajo del CheckListBox. Basicamente necesito que al hacer la modificacion me traiga marcado los puesto de trabajo del empleado seleccionado,alguien podria ayudarme con esto.
dejo mi extructura de las tablas de la base de datos y los botones
aclaracion en la base de datos tengo las siguientes tablas Puestos de trabajo, asignados, empleados las cuales sus estructuras son la siguiente
puestos idpuesto nombrepuesto
empleado idempleado dni nombre apellido
asignado idasignado idempleado idpuesto
y el boton modificar que ya como mencione este se encuentra en el formulario listado. y abre el "formulario de alta " que se encargar de abrir el formulario en forma de edit es el siguiente codigo
procedure TfListadoEmpleados.bModificarClick(Sender: TObject); begin tEmpleados.Active:=True; if tEmpleados.Locate('idempleado',qEmpleados['idempleado'],[]) then; //localiza un registro begin fmodulo.tEmpleados.Edit; tfempleados.Create(self).ShowModal; end; tEmpleados.Active:=False; qEmpleados.Refresh; end;
en el evento create del formulario de alta escribo el siguiente codigo para cargar el CheckListBox con los puestos de trabajo
begin qPuestos.Open; qPuestos.DisableControls; qPuestos.First; try while not qPuestos.Eof do begin CheckListBox1.Items.AddObject( qPuestos.FieldByName('nombrepuesto').AsString, TObject(qPuestos.FieldByName('idpuesto').AsInteger)); qPuestos.Next; end; qPuestos.First; finally qPuestos.EnableControls; end; end;
luego en el boton aceptar del formulario tengo el siguiente codigo
var i: Integer; begin tEmpleados['fechadenacimiento'] := dtFecha.Date; tEmpleados.Post; for i := 0 to CheckListBox1.Items.Count -1 do begin if CheckListBox1.Checked[i] then begin tAsignados.Active:=True; tAsignados.Insert; tAsignados.FieldByName('idempleado').AsInteger := tEmpleados.FieldByName('idempleado').AsInteger; tAsignados.FieldByName('idpuesto').AsInteger := Integer(CheckListBox1.Items.Objects[i]); tAsignados.Post; end; end; self.Close; end;
aclaraciones:
*tAsignados hace referencia a componentes tztables de zeos que tiene enlazada la tabla asignados
*qPuestos: es un query que contiene la consulta de la tabla puestos *templeados: es un tztable con la tabla empleados
*qEmpleados: es un query que realizo la consulta con la misma tabla
Bien como ya mencione antes lo que necesito es al clikear el boton modificar es que me marque los puestos de trabajo de ese empleado en el otro formulario que se abrio alguna idea o ayuda ?
desde ya muchas gracias