我在 Access 2010 中遇到了一个问题。想象一下包含这些列的表格:
姓名日期时间
现在,我有一个查询,要求用户输入开始日期和结束日期,并返回这两个日期之间的所有记录。 这很好用。但是,一旦我向“日期”列添加排序,事情就会出错。 一旦您对带有参数的列进行排序,系统就会要求用户输入该参数两次。 据我所知,这是 Access 中的正常(尽管令人讨厌)行为。
如果我第二次添加“日期”列并显示带有排序的列,并且不显示带有参数的列,则效果很好。 查询看起来像这样:
名称 日期(显示并排序) 日期(未显示和参数) 时间
现在,当我运行查询时,一切都运行良好,并且按照我想要的方式显示。 这显然是一个很好的解决方案。 然而,还有另一个问题。 当我保存查询、离开并重新打开查询时,两列将相互合并。 因此,更改丢失,用户再次看到两个输入。
我的问题是:我可以采取哪些不同的措施来达到预期的结果?
我想过但不知道答案的一些可能的事情是:
有没有办法让列不合并? 我是否必须使用带有输入框的表单并从中获取数据(我不想这样做,因为它需要大量额外的工作来处理我在数据库中执行的各种操作)。 我是否遗漏了一些明显的东西?
感谢您的任何建议。
仅供参考:这是查询中的 SQL
选择 Intentions.Intention、Intentions.MassDate、Intentions.[请求的时间]、Intentions.[请求的地点]、Intentions.[提供者]、Intentions.Completed
来自意图
WHERE (((Intentions.MassDate) 在 [输入开始日期] 和 [输入结束日期] 之间))
按意向.MassDate、意向.[请求时间]排序;
确实,有时 Access 中的查询设计器会在您保存查询时“重新组织”查询。然而,我不记得这样的重组实际上会“破坏”任何东西。 就其价值而言,以下查询似乎可以满足您的要求。保存并重新打开后,它的外观和行为都一样:
供参考,其背后的SQL是
PARAMETERS startDate DateTime, endDate DateTime;
SELECT NameDateTime.Name, NameDateTime.Date, NameDateTime.Time
FROM NameDateTime
WHERE (((NameDateTime.Date) Between [startDate] And [endDate]))
ORDER BY NameDateTime.Date DESC , NameDateTime.Time DESC;
解决方案:运行查询(输入参数两次;-))。然后通过单击上方任务栏中的 AZ 橡皮擦符号(在排序隔间中)删除排序。
然后在设计模式下打开查询并将排序顺序添加到适当的列。
那么你就可以开始了。
问候 一月