Solo por tirar una posibilidad:
donde tienes esta asignación:
Código Delphi
[-]
ParamByName('parcedula').AsString:=tabla.IBQuerypersonalCEDULA.AsString;
primero pregunta si el objeto esta disponible porque de no estarlo ahi puede dar un access violation... ponle una condición antes:
Código Delphi
[-]
if assigned(ParamByName('parcedula')) then
ParamByName('parcedula').AsString:=tabla.IBQuerypersonalCEDULA.AsString;
Aunque la verdad esta bastante mal planteado este procedimiento... en tu lugar trataria de hacer un Procedimiento Almacenado que hiciera todos esos calculos y solo me devolviera los datos que me interesan... siempre va a ser mas eficiente...