Access 数据库中的数据趋势
Data Trends in an Access Database
我刚开始使用 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 中写一些东西来做到这一点?谁能给我一些建议!或者为我指明正确的方向,让我了解一些可以实现这一目标的技术?
谢谢。
我正在处理的 table 数据列出了以下字段:ID、批次、日期、Field4、Field5、Field6。
都是数字。
我想知道字段 4、5、6 和 7 的最后 5 条记录是否有趋势。
交叉发布于:http://www.access-programmers.co.uk/forums/showthread.php?p=1421356#post1421356
一种可能的解决方案是采用 运行 计数。这是使用嵌套 subquery 完成的,其中源 table 与自身进行比较(注意不同的别名 - t1
和 t2
)。
但是,这实际上取决于您希望如何对字段进行连续排序。下面,我假设您想要按订购日期查找每个 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 修改为实际的 table 名称。
最后,虽然我不知道你的用户界面是什么样子,但你可以有条件地格式化你的文本框。您在窗体的设计 View/Format 选项卡(在功能区上)下执行此操作并选择您的文本框控件。将表达式生成器设置为 DLookup
值 5:
Expression Is:
DLookUp("RowCount", "SavedQuery", "ID =" & Forms!yourformname!ID") >= 5
DLookUp 是函数族中的一个 Access 函数:DSum、DAvg、DCount、DFirst、DLast。它们允许在任何数据库存储的 table 中快速搜索字段值并根据条件进行查询。您可以在 SQL 脚本、VBA 代码和表达式构建器中使用它们。
一个额外的项目:当您编辑现有数据或输入新数据时,表单上的条件格式不会立即更新,因为 DLookUp 仅在打开表单时计算。在教科书的 AfterUpdate 事件和表单的 AfterInsert 事件中包括以下 VBA 新数据值的因素:
DoCmd.RunCommand acSaveRecord
Me!textboxname.Requery
Requery是一种重新计算各种对象的控件源、行源或记录源的方法。
所以对于任何正在阅读并会找到有用答案的人...
我做了以下事情来突出我收集的数据中的任何趋势,因为我无法让其他任何东西发挥作用:
首先,我创建了包含我感兴趣的值的文本框(我的 table 中的最后 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
我刚开始使用 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 中写一些东西来做到这一点?谁能给我一些建议!或者为我指明正确的方向,让我了解一些可以实现这一目标的技术?
谢谢。
我正在处理的 table 数据列出了以下字段:ID、批次、日期、Field4、Field5、Field6。
都是数字。
我想知道字段 4、5、6 和 7 的最后 5 条记录是否有趋势。
交叉发布于:http://www.access-programmers.co.uk/forums/showthread.php?p=1421356#post1421356
一种可能的解决方案是采用 运行 计数。这是使用嵌套 subquery 完成的,其中源 table 与自身进行比较(注意不同的别名 - t1
和 t2
)。
但是,这实际上取决于您希望如何对字段进行连续排序。下面,我假设您想要按订购日期查找每个 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 修改为实际的 table 名称。
最后,虽然我不知道你的用户界面是什么样子,但你可以有条件地格式化你的文本框。您在窗体的设计 View/Format 选项卡(在功能区上)下执行此操作并选择您的文本框控件。将表达式生成器设置为 DLookup
值 5:
Expression Is:
DLookUp("RowCount", "SavedQuery", "ID =" & Forms!yourformname!ID") >= 5
DLookUp 是函数族中的一个 Access 函数:DSum、DAvg、DCount、DFirst、DLast。它们允许在任何数据库存储的 table 中快速搜索字段值并根据条件进行查询。您可以在 SQL 脚本、VBA 代码和表达式构建器中使用它们。
一个额外的项目:当您编辑现有数据或输入新数据时,表单上的条件格式不会立即更新,因为 DLookUp 仅在打开表单时计算。在教科书的 AfterUpdate 事件和表单的 AfterInsert 事件中包括以下 VBA 新数据值的因素:
DoCmd.RunCommand acSaveRecord
Me!textboxname.Requery
Requery是一种重新计算各种对象的控件源、行源或记录源的方法。
所以对于任何正在阅读并会找到有用答案的人...
我做了以下事情来突出我收集的数据中的任何趋势,因为我无法让其他任何东西发挥作用:
首先,我创建了包含我感兴趣的值的文本框(我的 table 中的最后 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