Cita:
Empezado por ecfisa
Hola.
Si te entendí bien podrías hacer algo similar a esto:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
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
for i := 0 to CheckListBox1.Items.Count - 1 do
CheckListBox1.Checked[i] := False;
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;
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