Access查询中利用Dcount函数对表或者其他查询增加一个新排号字段
新序号可以用于必须按ID排序计算余额等函数等方面。
DCount函数格式:
DCount(Expr, Domain, Criteria)
Expr 必选 String
Domain 必选 String
Criteria 可选 Variant
具体应用:
假设有个表或者查询名为Table,其中有自动编号字段:ID,日期字段:日期,内容字段:内容
涉及排序字段内容不能为null。
1、若按日期、ID两级排序时的算法
查询设计视图字段上输入代码如下:新序号: DCount("[日期]","Table","[日期]=#" & [日期] & "# And [ID]<=" & [ID])+DCount("[日期]","Table","[日期]<#" & [日期] & "#")
如下图:
两级排序查询同时按日期时间排序结果如下图:
字符串长度不够后面补0公式两级排序查询不对原表或查询按日期时间排序结果如下图:
2、按内容、日期、ID三级排序时的算法
新序号:DCount("[日期]","Table","[内容]< '" & [内容] & "'")+DCount("[日期]","Table","[内容]= '" & [内容] & "'and [日期]<#" & [日期] & "#")+DCount("[日期]","Table","[内容]= '" & [内容] & "'and [日期]=#" & [日期] & "# and  [ID]<=" & [ID])
三级排序查询结果如下图(查询同时进行排序):
3、注意窗体控件中引用条件值:
(1)用于数值型条件值:
"条件字段名 =" & forms!窗体名!控件名
(2)用于字符串型条件值注意字符串的单引号不能丢失。
"条件字段名 = '" & forms!窗体名!控件名 & "'"
(3)用于日期型条件值注意日期的#号不能丢失。
"条件字段名 = #" & forms!窗体名!控件名 & "#"
(4)两个以上条件用and、or等连接时候注意前后双引号总体连接各条件字段,不应该各条件块单独分割,详细见上述例子。
4、按更多字段进行排序参照设置具体条件设置算法。
新序号计算思路:充分利用原自动编号字段ID不会重复的特点,利用条件排除法设定条件,要保证新序号不会出现重复数字,排序规则内必须加入自动编号字段。如3个条件排序条件设计思路为:小于当前记录[内容]+等于当前[内容]并且[日期]比当前记录小的+等于当前记录[内容]并且[日期]等于当前记录[日期]并且[ID]小于等于当前记录[ID]。
对于各字段升序降序,对应使用小于大于号。
5、自定义财务自动计算日记账余额函数:
代码如下:
Public Function GetBalance(ID As Long, Balance As Currency) As Currency
    Static lngPreID As Long            '前次ID
    Static curPreBalance As Currency    '前次余额
      If ID > lngPreID Then
        curPreBalance = curPreBalance + Balance
    Else
        curPreBalance = Balance
    End If
    lngPreID = ID
GetBalance = curPreBalance+ Forms!日记账窗体!账户期初余额
’注:窗体上事先设定一个控件获取相应账户期初余额。
End Function
在前述查询中(查询同时按新序号规则排序,财务要求一般为日期,ID),再加个字段输入以下内容:
余额: GetBalance([新序号],IIf(IsNull([收入金额]),0,[收入金额])-IIf(IsNull([支出金额]),0,[支出金额]))
利用此自定义函数GetBalance计算余额
优点:比利用dsum函数计算快捷方便。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。