MS Access:排名/优先级排序

时间:2011-12-06 00:43:10

标签: ms-access

我完全不知道如何在Access中完成以下场景:

假设我有两个表,即用户和任务。

Users                        Tasks
----------------------        ----------------------
Username [Primary Key] <1--∞> Username [Foreign Key]
                              Task ID [Primary Key]
                              Priority

我想显示一个显示特定用户任务的表单,按优先级(整数)排序​​。优先级不固定,我需要确保同一用户的两个任务没有相同的优先级。我不知道如何使用Access来实现这一目标。我需要为表单构建什么样的查询?理想情况下,我希望表单上有两个按钮来提升/降低任务的优先级。

任何建议都将不胜感激。我不反对使用VBA,如果这是它需要的,但我有一种感觉,这是一个优雅的解决方案。

(注意:我正在处理的实际数据库是非常不同的,但知道如何做到这一点将使我能够弄清楚如何获得我需要的东西。)

2 个答案:

答案 0 :(得分:1)

“任务”表上的“用户名”和“优先级”的唯一索引将强制执行您的规则。当用户尝试保存违反此密钥的数据时,将发出警告。您可能希望捕获错误并提供更好的解释。

主窗体可以基于用户和基于任务的子窗体。 Access将有助于帮助您使用父表单和子表单的用户名(您的关键字段)。

当前记录上的一点VBA可以增加优先级字段。您将有两个按钮,每个按钮都有On_Click事件,以增加/减少该值。示例:[Priority] = [Priority] + 1

答案 1 :(得分:0)

了解当前记录的用户名,任务ID和优先级,您需要运行三个查询:

  • 首先停放当前记录的优先级,将其设置为null或零或移动记录的其他值。
  • 然后通过更改路上的记录来填空。
  • 最后将停放的记录移到新的插槽中。

要移动当前记录,请在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的唯一索引,则可以使用两个查询执行此操作,但我建议您添加一个。为了在多用户环境中的某些安全性,您还可以将它们包装在事务中。