在处理我的新应用程序时,客户会根据特定要求返回给我。他们希望防止多个用户同时编辑同一条记录。例如,如果User 1
登录应用程序,则搜索记录,然后选择记录。几乎没有几种形式可以显示所选记录的数据。例如,可以是人口统计形式,家庭信息等。假设有User 2
位用户登录并选择了同一条记录。在这种情况下,我们希望防止他们两个人同时编辑任何表单。我想知道我的方法是否合适,还是有更好的方法。接下来,我要做的是
Lock
表中Edit
按钮。在后端,我将Lock表连接到每个更新查询。例如:
<cfquery name="updateDemo" datasource="#dsn#">
Update dbo.Demographic
Set LastName = 'Kelly',
FirstName = 'Mike',
DOB = '07/06/1967'
From Demographic AS D
Left Outer Join dbo.Lock AS L
On L.SelectedID = D.SelectedID
Where RecID = '123132'
And L.UserID = Session.UserID
</cfquery>
在上面的查询中,我加入了要更新为Lock
表SelectedID的表。这样,只有选定的记录才被更新,并且我们确保锁定表中的UserID与会话用户ID匹配。用户可以随时通过单击系统中的解锁按钮来解锁所选记录。我不确定这种方法是否最好。到目前为止,我找不到任何问题,但是此代码仍处于开发阶段。如果有人有任何建议,请告诉我。我使用SQL 2008,ColdFusion 2016和前端的JQuery和Bootstrap 3。
答案 0 :(得分:1)
您的解决方案应该可以工作,但听起来有点复杂。我会:
答案 1 :(得分:1)
这是我过去解决此问题的方式。
对于需要这种“锁定”的信息,请添加一个名为“ version”之类的数字列。
每次保存该表中的一行时,请将“ version”的值增加1。
以任何用于编辑表的形式包含此值。
如果用户A与用户B同时提取一条记录,但用户B首先保存了信息,那么当用户A提交表单时,“版本”将有所不同。
在提交表单时,请检查传入的“版本”是否与数据库中的“版本”匹配。如果存在,请更新表。如果它不能将用户重定向到表单,并让他们知道他们没有更新数据的最新“版本”,请给他们一个选择来加载更新的数据。