Coincido con fenareth la asignación a swciclo no tiene sentido, pero eso no produce el error como tampoco lo hace el perform.
El único error que puedo suponer es que la tabla no esté en dsEdit cuando haces:
Código Delphi
[-]
if swciclo = '1' then
begin
Dmsip.Tblproductos.Edit Dmsip.Tblproductos['fechaciclop']:=now;
Dmsip.TblProductos['usuariociclop'] := userw;
end;
Reproduje el código usando un ttable con el mínimo requisito para que funcione la procedure. No me dio el error 'Access violation' pero sólo uso lo que envias. Revisa los DataSource de los controles DataAware... también controla como llamas al Form y como lo cierras. Espero que te ayude en algo, suerte