External exceptions when using Database components

Well, I'm puzzled.
While slowly building up a Delphi 3 application using Paradox tables I've
hit a problem.
I'm pulling together data within a transaction to build up related records.
The first time through a particular sequence things work fine (but not
always).  However, the second time always fails.
WELL, sounds like un-initialised variables, I know, BUT I've eliminated all
such possibilities - and the situation is peculiar:

... all within an outer transaction with try <the code below>commit except
rollback
with tblX do
begin
        Open;
        if not Locate('ID', ID, [loCaseinsensitive]) then        //    no
probs
        begin
                Close;
                raise Exception.Create( '.' );
        end;
        try
//    breakpoint here shows locate worked fine
                Edit;
//    execution this gives 'External Exception C000001D'
                FieldByName( 'Predecessor' ).AsString := LastEvent;
                Post;
        except
                on E: Exception do
                begin
                        // other, optional error-tracking code
                        Close;
                        raise;
                end;
        end;
        Close;
end;

Whether the table is 'stuck on a form' or created on the fly it kicks out
the SECOND time through! (within same transaction)

Any helpful thoughts would be much appreciated.

Dave