Hi Grant,
> > In general it is not recommended to keep DB objects in globals, as they
> > cannot
> > be garbage collected.
> >
> > ☺/ A!ex
> In the `family.l` example it seems to store the "current person" object in the
> `val` of *DB. Is this just for convenience for the sample? Or is this
> different since the global symbol isn't a reference to the object itself?
This is ok. With "globals" I meant global internal symbols. '*DB' holds an
*external* symbol, i.e. '{1}', which is the root object of the database.
So what "family.l" does with
(set *DB (request '(+Man) ...
is create a new '+Man' object and store it in '{1}' in the database.
The global '*DB' is not changed here (and in fact never should be; it should
always point to '{1}') and is known by the system - most notably by the garbage
collector.
> I assume the correct pattern for an action form is to use some global to hold
> a reference to some indexable ID for the DB object we are interested in?
This is possible, but typically nothing is kept globally, and the user is
presented a search dialog ('choPerson' in "family.l").
Note that in fact the GUI *does* use a global '*ID' but this gets a new value
with each form and thus does not inhibit the previous values to become garbage.
Also, search dialogs typically keep searched values in globals ('*PrsNm',
'*PrsJob', '*PrsDat1' etc.) to allow the user to search for similar things in
the same context, but these values are strings, numbers, dates etc. and not DB
objects.
☺/ A!ex
--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe