我完全不知道如何在Access中完成以下场景:
假设我有两个表,即用户和任务。
Users Tasks
---------------------- ----------------------
Username [Primary Key] <1--∞> Username [Foreign Key]
Task ID [Primary Key]
Priority
我想显示一个显示特定用户任务的表单,按优先级(整数)排序。优先级不固定,我需要确保同一用户的两个任务没有相同的优先级。我不知道如何使用Access来实现这一目标。我需要为表单构建什么样的查询?理想情况下,我希望表单上有两个按钮来提升/降低任务的优先级。
任何建议都将不胜感激。我不反对使用VBA,如果这是它需要的,但我有一种感觉,这是一个优雅的解决方案。
(注意:我正在处理的实际数据库是非常不同的,但知道如何做到这一点将使我能够弄清楚如何获得我需要的东西。)
答案 0 :(得分:1)
“任务”表上的“用户名”和“优先级”的唯一索引将强制执行您的规则。当用户尝试保存违反此密钥的数据时,将发出警告。您可能希望捕获错误并提供更好的解释。
主窗体可以基于用户和基于任务的子窗体。 Access将有助于帮助您使用父表单和子表单的用户名(您的关键字段)。
当前记录上的一点VBA可以增加优先级字段。您将有两个按钮,每个按钮都有On_Click事件,以增加/减少该值。示例:[Priority] = [Priority] + 1
答案 1 :(得分:0)
了解当前记录的用户名,任务ID和优先级,您需要运行三个查询:
要移动当前记录,请在VBA中运行每个记录:
"UPDATE Tasks SET Priority = 0 WHERE Username='" & MyUsername & "' AND [Task ID]=" & MyTaskID
"UPDATE Tasks SET Priority = " & MyPriority - 1 & " WHERE Username='" & MyUsername & "' AND Priority=" & MyPriority + 1
"UPDATE Tasks SET Priority = " & MyPriority + 1 & " WHERE Username='" & MyUsername & "' AND Priority = 0"
交换+1和-1 s以反过来。
如果您没有关于unername / priority的唯一索引,则可以使用两个查询执行此操作,但我建议您添加一个。为了在多用户环境中的某些安全性,您还可以将它们包装在事务中。