Ver Mensaje Individual
  #5  
Antiguo 14-12-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Reputación: 0
Belen12 Va por buen camino
gracias

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Si te entendí bien podrías hacer algo similar a esto:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Cargar en el CheckListBox los cargos de la tabla PUESTO
  unQuery.Close;
  unQuery.SQL.Text := 'SELECT ID, NOMBREPUESTO FROM PUESTO';
  unQuery.Open;
  while not unQuery.Eof do
  begin
    CheckListBox1.AddItem( unQuery.FieldByName( 'NOMBREPUESTO' ).AsString,
      TObject(unQuery.FieldByName ( 'ID' ).AsInteger ) );
    unQuery.Next;
  end;
  unQuery.Close;
end;

procedure TForm1.ActualizarPuestos( const EmpID: Integer );
var
  i : Integer;
begin
  // Quitar tildes a los items del CheckListBox 
  for i := 0 to CheckListBox1.Items.Count - 1 do
    CheckListBox1.Checked[i] := False;

  // Seleccionar los puestos asignados al empleado EmpID
  unQuery.Close;
  unQuery.SQL.Clear;
  unQuery.SQL.Add( 'SELECT P.ID AS PUESTOID FROM EMPLEADOS E' );
  unQuery.SQL.Add( 'INNER JOIN ASIGNADOS A ON E.ID = A.EMPLEADO_ID' );
  unQuery.SQL.Add( 'INNER JOIN PUESTOS P ON P.ID = A.PUESTO_ID' );
  unQuery.SQL.Add( 'AND E.ID = :EMPID' );
  unQuery.ParamByName( 'EMPID' ).AsInteger := EmpID;
  unQuery.Open;

  // Poner tildes en aquellos cargos que EmpID tenga asignados
  while not unQuery.Eof do
  begin
    i := CheckListBox1.Items.IndexOfObject(
      TObject( unQuery.FieldByName( 'PUESTOID' ).AsInteger ) );
    if i <> -1 then
      CheckListBox1.Checked[i] := True;
    unQuery.Next;
  end;
end;
...

Llamada ejemplo:
Código Delphi [-]
begin
  ActualizarPuestos( SpinEdit1.Value );
  ...
De ese modo se carga una sola vez la totalidad de puestos en el CheckListBox y se marcan con un tilde los puestos que tiene asignados el empleado cuyo ID se le envía al procedimiento ActualizarPuestos.

Espero haberte interpretado bien...

Saludos
gracias me sirvio de mucho ya me funciona como quiero. Mira una ultima cosa ahora ya que tengo esto procedo a realizar el post de la modificacion. y cuando hacia el insert primero usaba el siguiente codigo en el boton aceptar
Código Delphi [-]
qEmpleados['fechanacimiento']:=dtFecha.Date
qEmpleados.Post
for i:= 0 to CheckListBox1.Items.Count-1 do
 begin
   if CheckListBox1.Checked[i] then
     begin
      tAsignados.Insert;
      tAsignado.FielbyName('idempleado').AsInteger:= qEmpleados.FielbyName('idempleado').AsInteger; 
      tAsignado.FielbyName('idpuesto').AsInteger:= Integer(CheckListBox1.Items.Objects[i]) ;
      tAsignados.Post;
end;
end;
y al realizar la modificacion cambio tAsignados.Insert lo cambio a Edit y uso el mismo codigo lo que sucede es que no me modifica nada y solo me inserta dos veces el mismo valor por ejemplo si marco 2 puestos nuevos(cajeros por ej) y este ya es vendedor se me carga 3 puestos de vendedores alguna idea por que sucede esto ? ya revice el codigo de pie a cabeza y no tengo ningun insert en ningun lado para que me genere este problema. sera problema en el codigo que postie ?
gracias por toda la ayuda de verdad
Responder Con Cita