DOCUMENT #772 =========================================================================== NO MORE "NO EDITABLE DATA" =========================================================================== PRODUCT: R:BASE VERSION: 4.5+ or Higher =========================================================================== CATALOG: Forms, Reports & Labels AREA : Forms =========================================================================== The RECALC TABLES can be used to get rid of "no editable data" messages when editing data in multi-table forms. Lower tables may not yet have any matching data records with table one in the form. When the user moves to the lower table, they get a "No editable data in this table" message on line 24. A new row can be added using the Add row option off the Edit menu or the F10 key in 4.5 Plus! but this is not intuitive to users. Use an EEP placed at the table level, On exit from a row, to automatically add a row to the lower table if there is no matching data row already. Users will never again see the "No editable data" message. Using the Concomp sample database, modify the form custform. Add an expression to table one of the form, Customer, to place the customer identification number, custid, into a variable. The value needs to be placed in a variable so the EEP can reference it. Define vcustid = custid. The variable is not located. The EEP uses SELECT to count the number of rows in the Contact table, table two on the form, that match the current row in the Customer table. If no matching rows are found, the EEP inserts a new row into the Contact table and uses RECALC TABLES to ensure that the form displays that new row. The EEP is placed On exit from a row. Because it executes anytime the user leaves the row, you must check for keystrokes. If the user presses Esc or moves to the menu using the Alt key you don't want to execute the commands in the EEP. *(nodata.eep adds a row of data to lower tables in a form) SET VAR vkey = (LASTKEY(0)) IF vkey = '[Esc]' OR + vkey LIKE '[Alt]%' THEN RETURN ENDIF SET VAR vcount INT = NULL SEL COUNT(*) INTO vcount + FROM contact WHERE custid = .vcustid IF vcount = 0 THEN INSERT INTO contact (custid) + VALUES (.vcustid) RECALC TABLES ENDIF RETURN If you have more than two tables on your form, do a SELECT COUNT(*) and an INSERT on each of the lower tables from this one EEP. The EEP executes whenever you leave the row in table one -- including when you use the PgDn key or the mouse to move to lower tables as well. It is placed On exit from a row instead of After leaving section because of when the EEPs execute. The EEP After leaving section also executes when you leave the form, but not until you press Enter from the Exit menu option. The EEP can't trap for this action -- it sees the keystroke [Enter] not the keystroke [Esc]. It works well On exit from a row, however, just remember to trap for certain keystrokes.