以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [讨论] 建议能有一个判断其他用户是否正在执行load中save的方法。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1729)

--  作者:wcs
--  发布时间:2009/2/4 12:10:00
--  [讨论] 建议能有一个判断其他用户是否正在执行load中save的方法。

对于在各个客户端手工输入的数据,在保存时系统是不会重复的,不需要这个方法。

但是对于各个客户端从同一数据源里提取的数据,就可能存在问题了:在某条记录被保存的过程中(未完成),其他客户端调用的 数据填充器 可能认为目标表中还没有这条记录,从而再追加这条记录。 所以要是有一个判断就好办一些了。这样可以解决多人同时数据填充并保存的问题。


--  作者:狐狸爸爸
--  发布时间:2009/2/4 12:19:00
--  
如果正在输入的过程呢?
这个解决不了实际问题的。

我今天发的“高级自动编号演示”,其实已经包含了如何在网络下解决冲突的技巧,只是需要借助一个标记表。
--  作者:wcs
--  发布时间:2009/2/4 17:01:00
--  

正在输入的过程,系统不是会自动给予不同的主键值吗?我对标记没有另外的特别要求,因为我的数据都提取自其他数据源。

我在想,后台数据库中建一保存标记表,只有一列一行,在进行填充、保存前先给这个地方赋值,保存完了以后再赋值。其他用户根据这个值来判断是否进行填充、保存。

我看这样应是可以的,因为这一个单元格的赋值是一瞬间的,一般不会冲突。

(我的数据填充是从10多万条记录中按条件填充,要用几秒钟的,就是这几秒钟中内多用户操作可能出现重复填充)

你看这样行吗?

[此贴子已经被作者于2009-2-4 17:02:39编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/2/4 17:24:00
--  
可以,不过最好用SQL命令赋值,这样更快。
而且最好在SQL的UPDATE命令中加上条件,例如标志列内容为FAlse表示可以更新,设为True表示我正在更新。
如果两个人同时读值,那么都得到False值,也就是可以保存,出现同时保存的问题,所以还需要后续步骤,UPDATE语句加上条件,将标志列内容为False的更新为True,这样就不会出现两个人同时更新成功的问题,只有更新标志列成功的前提下才保存。

我发的高级自动编号演示文件,也是基于这个原理的。
--  作者:wcs
--  发布时间:2009/2/4 17:28:00
--  
哈哈

是的,考虑用UPDATE,它的速度是快,以前就领教过了。