Deberás diferenciar cada línea y pasarle algún parámetro que la haga identificable y única.
No sé si tienes algún campo "LineaNumero" o algo así que la identifique, pero en todo caso tendrás que modificar el update poniendo todos los campos que permitan identificar la línea sin que pueda afectar a otras, aunque para ello tengas que especificar todos los campos como parámetros, algo así:
Código SQL
[-]
update formulas_desglose
set cantidad = :cantidad,
codigo_formula = _:codigo_formula,
codigo_mat_prima = :codigo_mat_prima,
grupo_mat_pri_eq = :grupo_mat_pri_eq,
medida = :medida
where cantidad = : old_cantidad
and codigo_formula = : old_codigo_formula
and codigo_mat_prima = : old_codigo_mat_prima
and grupo_mat_pri_eq = : old_grupo_mat_pri_eq
and medida = : old_medida
Lo idóneo es que tengas un campo LINEA además del que hace referencia a la cabecera, y que ese campo sea la primary key: CodigoCabecera+Linea, sería totalmente identificable sin error ni repetición.