While nesting the try...except inside a try...finally (or vice versa) directly answers the question I would like to point out that original question, regardless of what language you are using, is mixing the concerns of error handling and resource management. Try...except and try...finally are ugly. They distract you from what your code is doing. A better approach is to extract error handling into a separate method:
procedure Read(Connection: TDBConnection);
begin
try
//Read DB
except
//Handle Exception
end;
end;
procedure ReadRecord;
begin
DBConnection.Open;
Read(DBConnection);
DBConnection.Close;
end;
Now your error handling is self-contained and can be ignored so you can concentrate your attention on the happy path.
Wait! What about the open and close? What if they raise exceptions?
Simple. Wrap those operations in try...except functions and handle them as well. It shouldn't be necessary. If the DB library your using is worth anything an exception in an open or close won't leave the connection in an unknown state. Then again, exceptions are there for the things you don't expect.
The same technique can be used with any resource: object creation, file access, etc. When the body of your function is guaranteed not to raise an exception try...finally is unnecessary.
There is, of course, function call overhead but in most cases it is negligible and your error handling functions should be small enough to let the compiler inline them.
finallyandexceptare semantically totally different, in Delphi they cannot be in the same statement. Just look at the RTL/VCL sources wherefinallyandexceptare used (and their ratio). You will hardly see places where they are near.finallyblock. If an exception occurs, you don't want to commit anything. You especially don't want to try to commit a transaction that you already rolled back in the precedingexceptblock. Commit should be the final action in thetrysection.