Es posible que lo haga mal cuando se introduce el un código incorrecto. El primer locate deberías ponerlo como condición de un if para comprobar el código.
Código Delphi
[-]
FPrincipal.TDatos.Open;
if FPrincipal.TDatos.Locate('No_Inventario',FModifica.CB_Inventario_Mejora.Text,[]) then
begin
Campo1:=FPrincipal.TDatos.FieldByName('Monitor').AsString;
Campo2:=FPrincipal.TDatos.FieldByName('Monitor_Estado').AsString;
with FPrincipal.TDatos do
begin
Edit;
FieldByName('Monitor').AsString:=QAlmacen.FieldByName('Marca').AsString;
FieldByName('Monitor_Estado').AsString:=QAlmacen.FieldByName('Estado').AsString;
Post;
Close;
end;
with TAlmacen do
begin
Open;
if Locate('Medio ; Marca',VarArrayOf(['Monitor',Campo1]),[]) then Delete;
Insert;
FieldByName('Fecha').AsDateTime:=Date;
FieldByName('No_Inventario').AsString:=FModifica.CB_Inventario_Mejora.Text;
FieldByName('Medio').AsString:='Monitor';
FieldByName('Marca').AsString:=Campo1;
FieldByName('Estado').AsString:=Campo2;
Post;
Close;
end;
end
else Application.MessageBox('Registro no encontrado', 'Error');