Yo te pongo una solucion alternatiba y una nueva
La alternativa
Código Delphi
[-]if DataSource.dataset.State in [Dsinsert,dsedit] then Dbedit1.enable:=true else Dbedit1.enable:=false;
y la nueva, bajata del Ftp del Club el Componente NewPanelDb, instalalo y pon dentro los componentes diversos, conecta el Panel al datasource, pon la propiedades adecuadas, en este caso Action en xEnable y no en xVisible y el InverseAction en false y listo si el dataSource no esta en Insert, Append o edit, no podras acceder alos datos, tiene más posibilidades, de hecho yo suelo usar 3 de estos paneles en mi formulario
PanelBotonora, para todos los botones principales, pongo action en xEnable y Actioninverse en true, por lo que cuando estoy editando, insertando, no puedo acceder a los botones, evitando errores.
Paneldatos, donde pongo todos los componentes para rellenar de la base de datos pongo action en xEnable y Actioninverse en false, con lo que sólo puedo editar datos cuando esta en insert o edit.
Y por ultimo el PanelConfirmar donde stan los botones para confirmar(grabar) y Cancelar, las propiedades son Action en xVisible y ActionInverse en false, solo muestra el panel cuando esta en Inser o edit, para poder grabar.