MS Access员工处罚报表:按处罚类型跳过序列号问题求助
解决MS Access报表跳过特定记录编号的问题
我来帮你搞定这个员工处罚记录的编号问题,不用写复杂的VB代码,两种简单方案都很适合你(毕竟你熟悉SQL,上手很快):
方案一:从基础查询入手(推荐,更稳定)
直接在报表的数据源查询中添加一个计算字段,提前给符合条件的记录分配好递增编号,报表里直接用这个字段就行:
- 打开你的员工处罚记录查询,进入设计视图
- 添加一个新字段,输入以下表达式(记得替换占位符):
RecordNum: DCount("*", "你的查询名称", "EmployeeID = " & [EmployeeID] & " AND PType Not Like '*aside*' AND [处罚记录主键] <= " & [处罚记录主键])- 把
你的查询名称换成你实际的查询名 [处罚记录主键]换成你处罚记录表的主键字段(比如PunishID),用来保证记录顺序正确
- 把
- 保存查询,回到报表设计视图,把原来的编号文本框控件源改成
[RecordNum] - 最后设置这个文本框的格式:如果
RecordNum是Null(对应含"aside"的记录),就显示空。可以在控件源里改成IIf(IsNull([RecordNum]), "", [RecordNum])
这样一来,含"aside"的记录会自动空着编号,后面的记录编号自然递增,不会重复。
方案二:在报表里用运行总和实现
如果你不想改查询,直接在报表里操作也可以:
- 打开报表设计视图,添加第一个文本框(命名为
txtCountFlag),控件源设为:
然后把这个文本框的可见属性改成IIf([PType] Not Like "*aside*", 1, Null)否(藏起来,只用来做计数标记) - 添加第二个文本框(就是你要显示编号的那个,命名为
txtSerialNum),控件源设为[txtCountFlag] - 选中
txtSerialNum,打开属性表的数据选项卡,找到「运行总和」,选择「全部之上」 - 同样,为了让空编号的行显示空白,可以把
txtSerialNum的控件源改成:IIf(IsNull([txtCountFlag]), "", [txtSerialNum])
原理是:只有当处罚类型不含"aside"时,txtCountFlag才会返回1,运行总和只会累加1,Null的行不会触发累加,所以后面的编号会自动接上,不会出现重复。
这两种方法都不用写VB代码,完全靠Access的内置功能就能解决你的问题,试试吧!
内容的提问来源于stack exchange,提问作者imran khalil
相关产品推荐
相关产品推荐

