""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BROWSE OR EDIT OLD ROWS WHILE ENTERING NEW ROWS IN A FORM
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
PRODUCT : R:BASE VERSION : 3.1
CATEGORY : FORMS SUBCATEGORY : EDIT & ENTER
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
You can enter and edit in the same form by using the BROWSE command in
an entry/exit procedure (EEP). Use this technique to display related
rows that come from the same table, a different table, a view, or
several tables. Although you can't use a form in an EEP, the BROWSE
command makes it easy to view historical information on a client,
patient, or customer while entering data using a form.
When browsing a single table, a user can press [F4] to edit existing
values. If you don't want the user to be able to edit existing values,
use BROWSE DISTINCT instead of BROWSE.
SEEORDER.EEP Example
""""""""""""""""""""
SEEORDER.EEP (shown below) is an example you can use with the ORDERS
form in the HIFI database that comes with R:BASE. The ORDERS form in
HIFI is used with ENTER to add new orders to the ORDERS table.
SEEORDER.EEP uses BROWSE to display previous orders as you enter a new
order, and it looks up the last name in SALESPEOPLE.
Step by Step Solution
"""""""""""""""""""""
STEP 1 *** Back up the HIFI database and open it. Then choose
Create/modify under Forms on the R:BASE Main Menu, and then choose the
ORDERS form under Modify. Next, choose Define under Variables to enter
this expression:
vstoreid = storeid
VSTOREID holds the store identification number for the current row.
STEP 2 *** Under Layout, choose "Field settings" and then "Storename."
On the second page, enter Yes to display field help, and enter this
help line: "Press F2 to view previous orders." Then enter SEEORDER.EEP
as the exit procedure.
STEP 3 *** Create the EEP.
*( SEEORDER.EEP--Show previous orders.)
SET VAR vlastkey = (LASTKEY(0))
IF vlastkey <> '[F2]' OR vstoreid IS NULL THEN
RETURN
ENDIF
SET VAR vwhere = ('storeid=' + (CTXT(.vstoreid)))
SET COLOR white ON blue
NEW
BROWSE t1.ordernumber=6, t2.lastname, t1.ponumber=7, +
t1.orderdate=8, t1.units=4, t1.price=9, +
t1.totalsale=9, t1.discount=6 +
FROM orders t1, salespeople t2 +
WHERE (t1.employeeid=t2.employeeid) AND &vwhere
CLEAR VAR vwhere, vlastkey
RETURN
Customize this EEP for your application. For example, if your common
column (STOREID in the example) is TEXT, you need to surround its
value (.VSTOREID) with single quotation marks (CHAR(39)) on the "SET
VAR vwhere" line, similar to this example:
SET VAR vwhere=('storeid=' + CHAR(39) + CTXT(.vstoreid) + CHAR(39))
The BROWSE command in SEEORDER.EEP uses two tables (ORDERS and
SALESPEOPLE), so the user can browse historical data but can't change
it. If you want the user to be able to press [F4] to edit old rows
while browsing them, eliminate the second table. For example, you
might use this EEP instead of SEEORDER.EEP:
*( EDORDER.EEP--Edit previous orders.)
SET VAR vlastkey = (LASTKEY(0))
IF vlastkey <> '[F2]' OR vstoreid IS NULL THEN
RETURN
ENDIF
SET VAR vwhere=('storeid='+(CTXT(.vstoreid)))
SET COLOR white ON blue
NEW
BROWSE ordernumber=6, ponumber=7, orderdate=8, units=4, +
price=9, totalsale=9, discount=6 FROM orders WHERE &vwhere
CLEAR VAR vwhere, vlastkey
RETURN
T1 and T2 aren't needed when you're using only one table.
These EEPs are smart. They use the LASTKEY function to control whether
or not the EEP executes. If the user doesn't press [F2], the EEP won't
execute when the user leaves the field.
STEP 4 *** Test the EEP and modified ORDERS form by entering this
command:
ENTER orders
Once you're in the form, enter 202 as the store number. Then move to
the STORENAME field and press [F2]. The form will clear and you'll be
viewing all the previous orders for that store. When you finish
viewing the old orders, choose Exit, and R:BASE will return you to the
form to enter new orders.