在处理我的新应用程序时,客户回复了我的具体要求。他们希望防止多个用户同时编辑相同的记录。例如,如果User 1
登录应用程序,搜索记录然后选择记录。几种不同的形式显示所选记录的数据。例如,可以是人口统计形式,家庭信息等。假设我们有登录并选择相同记录的User 2
。在这种情况下,我们希望阻止他们同时编辑任何表单。我想知道我的方法是否合适,或者有更好的方法。我接下来做的是:
Lock
表中Edit
按钮。<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的表。这样只选择记录更新,我们确保Lock表中的UserID与Session User ID匹配。用户可以通过单击系统中的解锁按钮随时解锁所选记录。我不确定这种方法是否最好。到目前为止,我找不到任何问题,但此代码仍处于开发阶段。如果有人有任何建议,请告诉我。我在前端使用SQL 2008,ColdFusion 2016与JQuery和Bootstrap 3。
您的解决方案应该有效,但听起来有点复杂。我会:
以下是我过去解决这个问题的方法。
对于需要这种“锁定”的信息,请添加一个名为“version”的数字列。
每次保存此表中的一行时,将'version'的值递增1。
以用于编辑表格的任何形式包含此值。
如果用户A与用户B同时提取记录,但用户B首先保存信息,则当用户A提交其表单时,“版本”将不同。
在表单提交时,请检查传入的“版本”是否与数据库中的“版本”匹配。如果确实...更新表格。如果它没有将用户重定向到表单并让他们知道他们没有更新数据的最新“版本”并为他们提供加载更新数据的选项。