H
Hecules
Unregistered / Unconfirmed
GUEST, unregistred user!
我的开发环境:DELPHI6 + SQLSERVER2000 (ADO)
我的系统,是可以在多人同时操作的环境下工作。也就是说:可能有某一时间,
几个人同时操作了一个表。
比如:我在一个事务中,
第一步:先生成单据号。
(单据号的生成规则是:在表中读单据号,取最大的单据号。再加“1”)
第二步:一些必要的校验。
第三步:再写数据表。
第四步:写其它的表。
第五步:提交(或出错:回滚)。
但是:事务,只能保证,同一个用户,在事务中操作的几张表的数据一致。
却不能保证,不同的用户,对同一表的一先一后的操作而发生的错误。
错误举例:
当一个用户,先读了此表,取了表中单据号最大的,再加“1”,生成了一个
新的单据号。正在作:必要的校验时,尚未写入数据到表中;在这个时候,
第二个用户,进入了事务,也读了此表,取了表中单据号最大的,由于,第一
个用户,尚未写入数据到表中,所以,第二个用户生成的单据号,就和,第一
个用户一样了。这样,就出错了。
请问:如何处理,这样的错误,我的初步想法,有没有办法。在事务开始时,
锁定整个数据库。直到;事务结束。
还是,有别的办法?
谢谢。急。在线等。
我的系统,是可以在多人同时操作的环境下工作。也就是说:可能有某一时间,
几个人同时操作了一个表。
比如:我在一个事务中,
第一步:先生成单据号。
(单据号的生成规则是:在表中读单据号,取最大的单据号。再加“1”)
第二步:一些必要的校验。
第三步:再写数据表。
第四步:写其它的表。
第五步:提交(或出错:回滚)。
但是:事务,只能保证,同一个用户,在事务中操作的几张表的数据一致。
却不能保证,不同的用户,对同一表的一先一后的操作而发生的错误。
错误举例:
当一个用户,先读了此表,取了表中单据号最大的,再加“1”,生成了一个
新的单据号。正在作:必要的校验时,尚未写入数据到表中;在这个时候,
第二个用户,进入了事务,也读了此表,取了表中单据号最大的,由于,第一
个用户,尚未写入数据到表中,所以,第二个用户生成的单据号,就和,第一
个用户一样了。这样,就出错了。
请问:如何处理,这样的错误,我的初步想法,有没有办法。在事务开始时,
锁定整个数据库。直到;事务结束。
还是,有别的办法?
谢谢。急。在线等。