2015-04-07 148 views
0

我很新的使用访问,不知道有多少的它能够的功能,所以我的问题可能不是最清晰的,但在这里不用...数据趋势

我我试图设计一个数据库来统计监视输入的值。即我有一个数据输入表格,控制图表和表格都包含数字的字段。

我想要的功能之一是它能够标记数据中的趋势。 例如:如果特定字段中的最后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,批次,日期,字段4,字段5,字段6。

所有是数字。

我想知道是否有在过去的5条趋势字段4,5,6和7

跨张贴在:http://www.access-programmers.co.uk/forums/showthread.php?p=1421356#post1421356

回答

0

一个可能的解决方案是采用运行计数。这是使用嵌套的subquery完成的,其中源表与自身进行比较(注意不同的别名 - 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记录,然后找到具有为5的行数,该ID将不得不5个连续增加的字段值的ID。另外,以上仅适用于Field4。复制其他字段。并将SrcTable修改为实际的表名。

最后,虽然我不知道用户界面的外观如何,但可以有条件地设置文本框的格式。您可以在窗体的设计视图/格式选项卡(功能区)下选择您的文本框控件。表达式生成器设置为5 DLookup值:

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

DLookUp是一个家庭的功能中的访问功能:DSUM,DAVG,DCOUNT,DFirst,DLast。它们允许根据标准在任何数据库的存储表和查询中进行快速字段值搜索。您可以在SQL脚本,VBA代码和Expression构建器中使用它们。

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

DoCmd.RunCommand acSaveRecord 
Me!textboxname.Requery 

Requery是重新计算控制源,行源,或各种对象的记录源的方法。

+0

非常感谢您的支持!非常感激。我会在今晚晚些时候尝试这些,并让你知道我如何继续。 – MissW

+0

第一位工作完美。但是,在条件格式化时,表达式会给出错误: ''您输入的表达式包含无效语法。 您可能已经进入了一个没有逗号前面的值或标识符。” 曾与几件事情一出戏,但不能看到那么它的工作只需在开始拆卸=可能是什么问题? – MissW

+0

确定。 ... 但现在我已经注意到行计数似乎并没有改变,即使当我输入多个数据值增加? – MissW

0

所以对于任何人谁是阅读,并会找到一个答案,这个有用...

我做了以下突出的数据,我收集任何趋势,我不能让别的工作:

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. 

我然后用于下一:

首先,我通过具有在我的形式的负载特性在下面的代码创建包含我感兴趣的是(在我的表中的最后5个值)的值的文本框比特的代码比较值互相有条件地格式化我的文本框:

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