Jonathan
The "issue" with pessimistic locking is that if you create apps that rely on it, you are constraining yourself to local VFP tables. Eventually client/s may well ask whether you can support Oracle/SQL Server and you will have a rewrite on your hands.
My advice is to create a method or trigger *right now* that handles the inventory side. For now you can use local transactions and rlock() to make sure that your VFP inventory table stays correct. In future you will be able to use a C/S trigger and/or SQL passthrough code to manage inventory; your app will not need to change or be rewritten because you are calling the same method whether you use C/S or local data.
FWIW, SQL Server now handles pessimistic locking. If you use a trigger on your local tables, you should be able to write a similar one for SQL Server when the time comes, again without rewriting your frontend app.
Regards
JR
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1