我遇到了一个问题,我在Access 2010中一直都是如此。想象一下这些列的表格:
名称日期时间
现在,我有一个查询要求用户输入开始日期和结束日期,并返回这两个日期之间的所有记录。这很好用。但是,只要我在Date列中添加一个排序就会出错。对具有参数的列进行排序后,系统会要求用户输入两次参数。从我能够发现的,这是Access中的正常(虽然令人讨厌)行为。
如果我第二次添加Date列并显示带有排序的列,并且不显示带参数的列,则它可以正常工作。查询看起来像:
名称日期(显示和排序)日期(未显示和参数)时间
现在当我运行查询时,一切运行良好,并按照我想要的方式出现。这显然是一个很好的解决方案。但是,还有另一个问题。当我保存查询时,保留并重新打开查询,将两列合并回来。因此,更改将丢失,用户将再次看到两个输入。
我的问题是:我能做些什么来达到预期的效果?
我想到的一些可能的事情但却不知道答案是:
有没有办法让列不合并?我是否必须使用带有输入框的表单并从中获取数据(我不想这样做,因为它需要大量额外的工作来处理我在数据库中所做的各种事情)。是否有一些我不知道的显而易见的事情?
感谢您的任何建议。
仅供参考:这是查询中的SQL
SELECT Intentions.Intention,Intentions.MassDate,Intentions。[Time Requested],Intentions。[Place Requested],Intentions。[Oppred By],Intentions.Completed
来自意图
WHERE((Intentions.MassDate)在[输入开始日期]和[输入结束日期]之间))
按意向排序.MassDate,Intentions。[Time Requested];
答案 0 :(得分:1)
确实,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;
答案 1 :(得分:-1)
我遇到了同样的问题,我发现了原因: 如果在运行查询后,在结果网格中对一个列进行排序,并且说“是”以保存对查询的更改,则排序操作将与查询一起存储。这实际上会导致查询运行两次。首先创建结果,然后再一次排序。因此,您将被要求两次参数。
解决方案:运行查询(输入参数两次;-))。然后通过单击上面任务栏中的AZ-eraser符号(在分拣隔间中)删除分拣。
然后在设计模式下打开您的查询,并将排序顺序添加到相应的列。 你很高兴。
此致 扬