utilise StrToIntDef à la place de StrToInt, la syntaxe est :
function StrToIntDef(const S: string; Default: Integer): Integer;
le paramètre default est retourné si une erreur se produit lors de l'évaluation, comme cela plus d'exception à gérer c'est plus simple et plus propre.
StrToIntDef est dans l'unit SysUtils
pense aussi à remplacer Data.TParametres.FieldByName('ParRappel'.asInteger:=StrToInt(delai); par Data.TParametres.FieldByName('ParRappel'.asInteger:=chainerecu
a mon avis c'était là que se produisait l'exception car tu avais oublié de protéger la zone