DESIGN NOTES Events: Note exceptions as well as normal operations. Exceptions typically include when something (table, field, ...) is empty or Null, when some validation fails, ... Referential Integrity for New Records Note situations where detail records may be added to a brand new master record. The implementation will new to synchronize the UPDATEs so that referential integrity violations do not occur. However, if you defer worrying about this until implementation, it will be much worse. IMPLEMENTATION NOTES Why go through all the hastle of copying from/to the underlying table? Access still has very restrictive ideas about what is possible using the form's RecordSource directly. Merely by working with a copy of the RecordSource (using the RecordSetClone method), we get much better control over navigation and interaction between the Source and the Form. Why not use a Combo box for LastName? Navigation should move by entire record, not just last name. Updating the entire form for each Combo box move would be unacceceptably slow. Multi-page subforms This is by far the easiest way to provide a variety of "detail" subforms on a single master form. The buttons controlling selection of the particular detail view go on the master form (i.e. the [Form Header]), allowing the user to choose any detail view. Using a single procedure to change from one subform to the next is a good way to centralize control and provide a uniform transition -- this especially applies to error handling. Referential integrity requires that a New master record be Saved before and detail records; the form naviagation procedure is a good place to enforce that. In order to have a good apperance, set the Top property of the Page Breaks at uniform intervals, so each page of the Detail frame is the same height. Then when the form is open in form view, select the [Size to Fit Page] option from the Window pull-down. Include detail subforms on pages as usual in the Detail frame, making sure to set the [Link Master Fields] and [Link Child Fields]. NITTY GRITTIES: Using Seek method Before seeking, it is necessary to set the Index property of the item on which Seek is applied. Possible values include "PrimaryKey", which is especially convenient if you wish top search on a composite primary key. If T is a table with a three-integer primary key: T.Index = "PrimaryKey" T.Seek "=", 1, 10, 100 will find record with key of <1,10,100>. Option Groups An Option Group has a Value and each member of the group has an OptionValue. Say there's an OptionGroup OG with Buttons Ba, Bb, and Bc. Then the code OG.Value = 10 Ba.OptionValue = 5 Bb.OptionValue = 10 Bc.OptionValue = 25 will highlight Bb and cause c Click on Bc to set OG.Value to 25.