0

我对使用 Access 很陌生,并且不知道它的许多功能,所以我的问题可能不是最清楚的,但这里有......

我正在尝试设计一个数据库来统计监控输入的值。即,我有一个数据输入表单、控制图,并且表格中都充满了包含数字的字段。

我想要的功能之一是它能够标记数据中的趋势。例如:如果某个字段中的最后 5 个值呈上升趋势(最后一个值高于上一个,高于上一个,高于上一个,等等)或下降,那么我希望出现一个彩色文本框(或者其他的东西)。

我有一个想法,我知道如何在 Excel 中做到这一点:我会引用特定的值(单元格)并有一些代码,例如:

If .Cells(iRow, 1).Value > .Cells(iRow - 1, 1) 
        And .Cells(iRow - 1, 1).Value > .Cells(iRow - 2, 1) etc etc Then
Sheets("Box1").Range("AA15").Interior.ColorIndex = 44
Trends = "3 consecutive points increasing"

我不太了解 Access 的工作原理,但我似乎只能编写一个查询来选择输入的最新 5 条记录……然后我就卡住了!

有没有办法用 SQL 编写一些东西来做到这一点?谁能给我一些建议!或者为我指明正确的方向以获取一些使这成为可能的技术?

谢谢。

我正在使用的数据表列出了以下字段:ID、批次、日期、Field4、Field5、Field6。

都是数字。

我想知道字段 4、5、6 和 7 的最后 5 条记录中是否有趋势。

交叉发布于: http ://www.access-programmers.co.uk/forums/showthread.php?p=1421356#post1421356

4

2 回答 2

0

一种可能的解决方案是使用运行计数。这是使用嵌套子查询完成的,其中源表与自身进行比较(注意不同的别名 -t1t2)。

但是,这实际上取决于您希望如何连续排序字段。下面,我假设您希望按有序日期查找每个 ID 的递增字段值。或者,您可以按日期比较批次。

SELECT t1.ID, t1.[Date], t1.Field4,

  (SELECT Count(*) 
   FROM SrcTable As t2 
   WHERE t1.Field4 > t2.Field4 AND t1.[Date] > t2.[Date]
        AND t1.ID = t2.ID ) As RowCount

FROM SrcTable As t1
ORDER BY t1.[Date];

将此查询保存为存储查询或 VBA 记录集,然后找到 RowCount 为 5 的 ID。此 ID 将具有 5 个连续增加的字段值。此外,以上仅适用于 Field4。复制其他字段。并将 SrcTable 修改为实际的表名。

最后,虽然我不知道您的用户界面是什么样的,但您可以有条件地格式化您的文本框。您可以在表单的“设计视图/格式”选项卡(位于功能区)下执行此操作,然后选择您的文本框控件。将表达式生成器设置为DLookup值 5:

Expression Is:
    DLookUp("RowCount", "SavedQuery", "ID =" & Forms!yourformname!ID") >= 5

DLookUp是一系列函数中的一个访问函数:DSum、DAvg、DCount、DFirst、DLast。它们允许根据条件在任何数据库的存储表和查询中快速搜索字段值。您可以在 SQL 脚本、VBA 代码和表达式构建器中使用它们。

一项附加项:当您编辑现有数据或输入新数据时,表单上的条件格式不会立即更新,因为 DLookUp 仅在打开表单时计算。在教科书的 AfterUpdate 事件和表单的 AfterInsert 事件中包括以下 VBA,这些 VBA 会影响新数据值:

DoCmd.RunCommand acSaveRecord
Me!textboxname.Requery

重新查询是一种重新计算各种对象的控制源、行源或记录源的方法。

于 2015-04-07T23:03:59.547 回答
0

因此,对于正在阅读并会找到此有用答案的任何人...

我做了以下事情来突出我收集的数据中的任何趋势,因为我无法得到任何其他工作:

首先,我通过在表单的加载属性中添加以下代码,创建了包含我感兴趣的值(表中的最后 5 个值)的文本框:

Me.Trend1 = DLookup("[Field]", "Table", "[ID]=Forms![Formname]![Subformname].Form.[ID]")
Me.Trend2 = DLookup("[Field]", "Table", "[ID]=Forms![Formname]![Subformname].Form.[ID]-1")
Me.Trend3 = DLookup("[Field]", "Table", "[ID]=Forms![Formname]![Subformname].Form.[ID]-2")
etc.

然后我使用下一段代码来比较这些值并有条件地格式化我的文本框:

If Me.Trend1.Value > Me.Trend2.Value And Me.Trend2.Value > Me.Trend3.Value And Me.Trend3.Value > Me.Trend4.Value And Me.Trend4.Value > Me.Trend5.Value _
Or Me.Trend1.Value < Me.Trend2.Value And Me.Trend2.Value < Me.Trend3.Value And Me.Trend3.Value < Me.Trend4.Value And Me.Trend4.Value < Me.Trend5.Value _
Or Me.Trend1.Value > [Value] And Me.Trend2.Value > [Value] And Me.Trend3.Value > [Value] And Me.Trend4.Value > [Value] And Me.Trend5.Value > [Value] _
Or Me.Trend1.Value < [Value] And Me.Trend2.Value < [Value] And Me.Trend3.Value < [Value] And Me.Trend4.Value < [Value] And Me.Trend5.Value < [Value] Then


       Me.textbox.BackColor = vbRed
          Else: Me.textbox.BackColor = 5753088

End If
于 2015-06-08T14:54:19.043 回答