Hola:
En cualquier caso, si implementas desde Delphi cualquier acción en uno de esos eventos, es necesario que uses un semáforo (una variable boolean). El error de "Stack overflow" te salta porque en el OnChange haces modificaciones que a su vez disparan ese evento OnChange y así hasta el infinito ... o hasta quen se agota la memoria.
Código:
actualizando : Boolean; // variable global al formulario
procedure TablaMiCampoChange;
begin
if actualizando then EXIT;
actualizando := TRUE;
try
// Lo que sea
finally
actualizando := FALSE;
end;
end;
Tal como comenta Cadetill, si tu SGBD lo permite, usas procedimientos almacenados, pero tampoco es mala idea lanzar una consulta SQL que efectúe esos cambios en los registros pertinentes (luego haces un refresh a la tabla para que se actualice), o bien usas una tabla auxiliar para hacer esos recorridos, sincronizando luego ambas tablas.