Hola e realizado una pregunta similar antes ( que logre solucionar gracias a ustedes) ahora lo que necesito es realizar una mejora. Resulta que tengo un formulario donde se listan empleados y estos tienen puestos de trabajos. Yo al selecionar uno realizo la modificacion abro otro formulario en el cual se encuentra un listbox que lista sus puestos de trabajo.este se carga a travez de una consulta de un query. lo que sucede es lo siguiente realize una consulta y cuando se carga ese listbox y se ponen en check sus puestos de trabajo. Pero yo lo que necesito es que se carguen todos los puestos y luego se pongan en check los que el tiene no se si me doy a entender. Yo lo que eh intentado es hacer 2 consultas una para llenar todos los puestos y otra para luego poner en true segun el puesto que tengan. El problema viene aqui cuando se cargan los puesto de ese empleado en check se crea un duplicado es decir por ejemplo si uno es vendedor en list box se carga un puesto vendedor y otro puesto vendedor pero este en check.
Código Delphi
[-]begin
fempleados := tfempleados.Create(self) ;
fmodulo.tEmpleados.Active:=True;
fmodulo.qGeneral.Close;
fmodulo.qGeneral.SQL.Clear;
fmodulo.qGeneral.SQL.Add('select * from puesto');
fmodulo.qGeneral.SQL.Add('where estadopuesto=1');
fmodulo.qGeneral.Open;
while not fmodulo.qGeneral.Eof do
begin
fEmpleados.CheckListBox1.Items.AddObject(
fmodulo.qGeneral.FieldByName('nombrepuesto').AsString,
TObject(fmodulo.qGeneral.FieldByName('idpuesto').AsInteger));
fmodulo.qGeneral.Next;
end;
if fModulo.tEmpleados.Locate('idempleado',fmodulo.qEmpleados['idempleado'],[]) then; begin
empleado:= fmodulo.qEmpleados.FieldByName('idempleado').AsInteger;
fmodulo.tEmpleados.Edit;
fmodulo.qPuestos.Close;
fmodulo.qPuestos.SQL.Clear;
fmodulo.qPuestos.SQL.Add('select * from puesto');
fmodulo.qPuestos.SQL.Add('inner join asignado on asignado.idpuesto=puesto.idpuesto');
fmodulo.qPuestos.SQL.Add('inner join empleados on empleados.idempleado=asignado.idempleado');
fmodulo.qPuestos.SQL.Add('where empleados.idempleado= :id ');
fmodulo.qPuestos.ParamByName('id').AsInteger:= empleado;
fmodulo.qPuestos.Open;
if not fmodulo.qPuestos.IsEmpty then
begin
fmodulo.qPuestos.First;
while not fmodulo.qPuestos.Eof do
begin
fempleados.CheckListBox1.Items.AddObject(
fmodulo.qPuestos.FieldByName('nombrepuesto').AsString,
TObject(fmodulo.qPuestos.FieldByName('idpuesto').AsInteger));
fempleados.CheckListBox1.Checked[fempleados.CheckListBox1.Items.Count-1]:= true; fmodulo.qPuestos.Next;
end;
end;
end;
fempleados.Caption:= 'Modificacion de Empleados' ;
fempleados.ShowModal;
fmodulo.tEmpleados.Active:=False;
fmodulo.qEmpleados.Refresh;
end;
alguna ayuda? no se si mi problema esta en la doble consulta. si es asi como podria realizar solo una y cargar lo que necesito. Aclaro que yo agregue la primera consulta para traer tambien los puestos que ese empleado no tiene ya que realizando la modificacion le doy la opcion al usuario de asignarle otro puesto si lo desea- Dejo una imagen espero que se vea bien para aclarar mas el problema que se presenta gracias por la ayuda desde ya