Hola,
A simple vista, hay tres datasets, pero solo haces "open" de uno de ellos.
Después veo que no estructuras bien el código, algo más lógico sería:
Código Delphi
[-]
if dm.IBDataSet_carrera.Active then
begin
if DM.IBDataSet_carrera.Locate('id_carrera',DM.IBQuery_carreraID_carrera.Value,[]) then
begin
DM.IBDataSet_carrera.Edit;
DM.IBDataSet_carreraESTADO.Value:=1;
DM.IBDataSet_carrera.Post;
end;
y por último, sería más rápido y lógico usar sentencias SQL del tipo "UPDATE carrera SET ESTADO=1 WHERE id_carrera=:id_carrera", en vez de datasets.
Además deberías de tener en cuenta el uso de triggers en la DB, por ejemplo, si cuando activas el ESTADO de la tabla CARRERAS siempre tienes que actualizar el ESTADO de las otras dos tablas (PLAN_ESTUDIOS y MATERIA).
Saludos