2014-03-25 30 views
1

我正在尝试使用@DbColumn获取页面上某些计算文本字段的列值。如何计算带@DbColumn的记录数量?

说我有一个名为“按状态”的看法,就像这样:

+-------+--------+-----------+----------+------------+ 
| Count | Status | Created | Author | Comments | 
+-------+--------+-----------+----------+------------+ 
| 134 | Open |   |   |   | 
+-------+--------+-----------+----------+------------+ 
|  |  | Records with "Status" = "Open"... | 
+-------+--------+-----------------------------------+ 
| 101 | Hold |   |   |   | 
+-------+--------+-----------+----------+------------+ 
|  |  | Records with "Status" = "Hold"... | 
+-------+--------+-----------------------------------+ 
... 

漂亮的自我解释 - 它的状态显示的所有记录的数据库,并具有计数(记录数)每个状态。

在我的页面上,我为每个状态都有一个计算文本字段;打开,保持等。我试图按状态计数。例如:

@Text(@DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 1)); 

返回134,这是状态“打开”的计数。我知道这是对我的上述说法是正确的,但是,这不是我要去的。

如何获得每个“状态”的“计数”值?使用@DbLookup也许..?

回答

2

有两种不同的做法,你想做什么。 首先应该为每个状态值做一个@DbLookup。这应该是这样的(例如,对于状态打开):

@DbLookup("":"ReCache"; ""; "By Status"; "Open"; 1) 

根据可能变得缓慢的状态数。

另一种方法是做一个计算领域的dbcolumn(这将意味着要为这一目的而不是页面的形式,但不是一个真正的问题):

场名为“allTotals ”数,计算用于显示的,允许多个值,式:

@DbColumn("":"ReCache"; ""; "By Status"; 1) 

然后在总的每个值用于特殊的状态就需要其在视图位置。第一个状态:

@Subset(@Subset(allTotals; 1) ; -1) 

第二个状态:

@Subset(@Subset(allTotals; 2) ; -1) 

...

当然,还有可能是其他的,处理这种更复杂的方式...

+0

啊,我没有想过使用'@ Subset'。谢谢! – Drewness

1

@DbLookup是一个解决方案。您需要设置一个新视图,其中状态列是视图中的第一列,并按字母顺序排序。第二列是计数,然后你的公式得到被搁置将是计数:

@DbLookup("Notes":"NoCache"; "":""; "NewView"; "Hold"; 2); 

你也应该能够使用@DbColumn来获取相关的两个列表。

Statuses := @DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 2); 
Counts := @DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 1); 
NumberOnHold := @Select(@Member("Hold"; Statuses); Counts); 
+0

莫非我把'Statuses'和'Counts'放在页面'Queryopen'中?然后,我只需要引用每个字段的最后一行... – Drewness

+0

您可以在窗体的顶部放置一些隐藏的计算字段,以便您可以在窗体的其他字段中引用它们。我忘了,如果让他们计算显示会让你引用他们,但不保存它们 - 值得一试。 –

+1

啊,这是一个古老的“隐藏在表格顶部的计算机领域”技巧。谢谢! – Drewness