在局域网通过远程视图共享SQL数据库,怎么解决多用户同时修改同一表数据的有关问题

在局域网通过远程视图共享SQL数据库,如何解决多用户同时修改同一表数据的问题?
在局域网通过远程视图共享的SQL数据库“商品进销存管理系统”中有“商品库存表”,当某一商品销售时,库存表中该商品数量就要减去销售数。
  设某商品库存数为100。现有两个用户同时进行商品销售,为避免“商品库存表”修改数据时更新冲突,均将该表设置为“表缓冲”方式[使用命令CURSORSETPROP("buffering",5,"商品库存表")]。
  甲用户销售该商品数20,在“商品库存表”减去20,并通过TABLEUPDATE(.t.,.t.,"商品库存表")命令保存修改后的数据。
  乙用户同时也销售该商品数10,在“商品库存表”减去10,也通过TABLEUPDATE(.t.,.t.,"商品库存表")命令保存修改后的数据。
  甲、乙二用户总计销售数为30,按理该商品数应剩余70,但结果却显示为90,甲用户销售后的库存数被乙用户销售后的库存数覆盖了。
  敬向电脑专家请教,应如何编程可以避免出现这一问题?如何解决多用户同时修改同一表数据的问题?不胜感激!

------解决方案--------------------
你的提交更新语句
TABLEUPDATE(.t.,.t.,"商品库存表")
应该改为
TABLEUPDATE(.t.,.F.,"商品库存表")

因为参数2的作用:如果遇到某个记录被网络上别的用户修改过,Visual FoxPro 将产生错误。
如:
甲用户初始读到数量100,更新时,如果远程数据还是100,就会更新为80,否则更新失败,这时建议 Requery("商品库存表") 刷新表。
乙用户初始读到的数量也是100,更新时,远程数据已变为80,所以必须更新失败,这时应该提示用户更新失败,然后 Requery("商品库存表") 刷新表,之后用户可以再重新操作。

你这种更新数量的设计,千万不能将参数2设为 .T.
------解决方案--------------------
还有也可以这样设计,不要库存字段,库存是通过 入库-出库+上期库存 算出来的。
这样你就可以放心的增加销售记录(出库)了。
------解决方案--------------------

TABLEUPDATE(.t.,.F.,"商品库存表")
失败时
再 Requery("商品库存表")

我的程序,数据量不是很大,不管成功或失败,更新后都 Requery()

你的数据量大,如果还用视图的话,建议不要将全部记录取下来,只取要修改商品的库存记录,修改,更新和 Requery() 都只针对这一条记录。

你的数据量大,如果必须将全部记录取下来,建议改为 CA,因为 vfp9.0 的 CA 可以单条或多条刷新记录(RecordRefresh 方法),这是 CA 的记录级刷新。
------解决方案--------------------
CA 就是 CursorAdapter,除了 vfp 自带的帮助文件外,我手头的资料传上来了。CursorAdapter(CA)相关资料
------解决方案--------------------
筛选”条件设置为商品名=SPM,

当然可以了,将变量设为全局变量
商品名=?SPM