Although statements like FIND or ASSIGN move the data between database and record buffer, from the 4GL you can only access a record buffer associated with the table. There is no way to bypass that mechanism and access the contents of the database table.
In order to achieve something like this you need to have two record buffers. Frameworks like the ADM2 for example, achieve functionality like that because the read the contents of a record into a temp-table, let the user update the contents of the temp-table and, before the record gets saved to the database, compare the contents of the changed record in the temp-table against the contents of the database record read into a record buffer.
Whether you use the BUFFER-COMPARE or implement your own logic with dynamic buffer objects is up to you but you need to have two record buffers to compare them.
That's the whole idea of separating your application into distinct layers for data access, business logic and presentation ( user interface ). That's what the data access layer does, it transfers the contents of database records in temp-tables and writes them back. Practically there is no point in using database triggers to update records in related tables in this architecture because something like that should only happen in the business logic layer ...
Don't know whether this is the answer you hoped to get, but it should give you an idea on what to take into consideration and that you reach the end of the line regarding functionality of legacy client/server architectures at some point.
HTH, RealHeayDude.