B
BaKuBaKu
Unregistered / Unconfirmed
GUEST, unregistred user!
我用 Delphi 5 + SQL Server 7 遇到这样的问题。
情况是这样的:
从一个表中读出某商品的采购明细记录,返回到客户端,
比如:
采购日期 批次 数量 已售数量 是否售完
九月一号 1 100 个 0 No
九月二号 2 200 个 0 No
...
现在有一个客户一次买了 150 个,系统的规则是先购进的要先卖出,如果某一批次卖完了
就把“是否售完”置为 Yes。
我必须做一个循环,逐批比较和修改,这样结果应该是:
第一批已售数量为 100,是否售完为 Yes。
第二批已售数量为 50,是否售完为 No。
<Font Color=#FF0000><strong>
这个流程好像很简单,但是当很多客户机同时做这个操作时,问题就出来了。
</Font></strong>
在 A 时刻,A 工作站把采购记录读到了 A 客户端,然后在 B 时刻,B 工作站也把
采购记录读到了 B 客户端,然后 A 先回写,B 再回写,结果就可想而知了... ...
这个问题的关键在于,数据事先被读到了客户端,而读到客户端的数据在回写之前,
可能又被别的进程改写,但是由于某种原因,使得应用程序不得不这样做(比如修改的
操作逻辑很复杂,必须在客户端完成复杂的判断与计算)。
我曾经尝试用存储过程和光标完成该功能,但马上意识到,这样做是换汤不换药,
光标实际上充当了上一种方式中的客户端数据集的角色。
请问怎样防止这样的错误?
From: BaKuBaKu
情况是这样的:
从一个表中读出某商品的采购明细记录,返回到客户端,
比如:
采购日期 批次 数量 已售数量 是否售完
九月一号 1 100 个 0 No
九月二号 2 200 个 0 No
...
现在有一个客户一次买了 150 个,系统的规则是先购进的要先卖出,如果某一批次卖完了
就把“是否售完”置为 Yes。
我必须做一个循环,逐批比较和修改,这样结果应该是:
第一批已售数量为 100,是否售完为 Yes。
第二批已售数量为 50,是否售完为 No。
<Font Color=#FF0000><strong>
这个流程好像很简单,但是当很多客户机同时做这个操作时,问题就出来了。
</Font></strong>
在 A 时刻,A 工作站把采购记录读到了 A 客户端,然后在 B 时刻,B 工作站也把
采购记录读到了 B 客户端,然后 A 先回写,B 再回写,结果就可想而知了... ...
这个问题的关键在于,数据事先被读到了客户端,而读到客户端的数据在回写之前,
可能又被别的进程改写,但是由于某种原因,使得应用程序不得不这样做(比如修改的
操作逻辑很复杂,必须在客户端完成复杂的判断与计算)。
我曾经尝试用存储过程和光标完成该功能,但马上意识到,这样做是换汤不换药,
光标实际上充当了上一种方式中的客户端数据集的角色。
请问怎样防止这样的错误?
From: BaKuBaKu