Karen - What about creating temp tables for Sales and Payments with SYS_ROWVER columns and base your form on the temp tables. INSERT the necessary rows into the temp tables and ON TAB CHANGE, test for SYS_ROWVER > 0.
You might have to throw in a SAVEROW.
IF SYS_ROWVER > 0, give them a PAUSE msg that says data has been changed, do they want to update. If YES, then update the table from the temp table based on the PK and do your TotalPayments calcs; if No, reload the temp table from the main table to get the original data. This won't say which column has been changed, but at least it'll give them a chance to trap inadvertent changes.

Creating the TempTable:
PROPERTY TABLE TempTable 'CLOSE'
SET AUTOROWVER ON
SET ERROR MESSAGE 2038 OFF
DROP TABLE TempTable
SET ERROR MESSAGE 2038 ON
CREATE TEMP TABLE `TempTable` +
  (
 TempTable Def
 )
PROPERTY TABLE TempTable 'OPEN'
SET AUTOROWVER OFF
RETURN

I'm sure there are pitfalls, esp in multi user - different users working on the same row could clobber each others data.
Doug

On 8/25/2015 9:32 AM, Karen Tellef wrote:
My dilemna: very old (1980s) RBase database, designed by someone other than me. Not very relational in that there is a Sales table and a Payments table, but there is a column called TotalPayments in the Sales table that has a total of the payments so that a computed column Balance can be calculated.

In the DOS system, there is a separate form for Payments, so on closing that form it's very easy to compute the total payments and update the Sales table before bringing the Sales form back up.

In 9.5, they LOVE the idea of a form with multiple tabs, so I have Sales on tab 1, and Payments on tab 2.

Here's what works: If you're in Payments, I have an "on row save" eep so that if they change the amount it sums the payments, updates the Sales table and refreshes the Sales table. So if you save the row and then click back into tab 1, viola it's there.

What doesn't work: If you change a Payment amount and, while still in that row, click to tab 1, your row is not yet saved so nothing has been changed. I can see that if I then physically click into a Sales field on tab 1, it then saves my payments and does a refresh. But just clicking on the tab 1 header does not save the data. I tried putting identical code in the "on leave section" of Payments, but that does not evaluate if you click to another tab or even if you [esc] out of the form.

I know I can do something like trap the payment going into the field, trap it going out of the field, and if it's different than do a "saverow", but that takes away the ability of the user to change their mind about the change. What I also tried: I can do a "change tab eep" on tab 1 so that it puts focus into a Sales field. That works cuz it forces a save. Only issue is that this client worries about people making inadvertent changes so they don't want them put "into" the data unless they click. So unless I add a "dummy" field into the table.....

Any other ideas?

Karen


Reply via email to