李应强 发表于:2011-08-31 08:55:27
Private Sub 打印3份_Click()
On Error GoTo Err_打印3份_Click
DoCmd.RunCommand acCmdSaveRecord ' 保存窗体中刚刚录入的数据
Dim stDocName As String ' 定义一个待打印报表名称变量
stDocName = "人事代理_公司" ' 先赋值
If Me.委托单位 = "无" Then stDocName = "人事代理_个人" ' 判断字段,成立,则重新赋值为另一报表名
DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & [Forms]![人事代理]![人事代理_child]![人事代理_child_child]![编号] & "" ' 调用报表并打印
DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & [Forms]![人事代理]![人事代理_child]![人事代理_child_child]![编号] & "" ' 调用报表并打印
DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & [Forms]![人事代理]![人事代理_child]![人事代理_child_child]![编号] & "" ' 调用报表并打印
Exit_打印3份_Click:
Exit Sub
Err_打印3份_Click:
MsgBox Err.Description
Resume Exit_打印3份_Click
End Sub
这段代码,经常性出现单击后,弹出“被除数为0”的警告对话框,问题是我这个报表源根本就没有除法公式在里面。并且出错时,整个ACCESS就处在堵死状态,只有通过任务管理器,才能取消该进程。
奇怪的是,这个错误不具有重复再现性,出现错误的概率大约是10%的样子。只是一出现就比较烦人。
我想有没有,利用一段话,让保存语句后,延迟1秒再执行后面的打印报表的语句?我估计是保存没结束,就调用数据,导致出错引起的。
因为原来的文件是前后台的,就是数据在服务器端,操作窗体报表在本地机上。
现在这个示例是将这个数据和前台都集合到一个文件中了,里面的代码都没有修改的,保持为原来的模样。
这个最大的问题是,不是每次都出现这样,如果测试可以通过在人事代理窗体中,新增代理内容,再点打印,就会有10%的概率会出现那个问题。
目前,我最大的怀疑这个问题产生的根源是:保存速度和调用打印数据之间的冲突。即保存语句未执行完,后面的打印语句就跟着来了,结果数据没调出来,就提出“除数为零”。
试试这样:
Dim stDocName As String
Dim CurrentID As Long
DoCmd.RunCommand acCmdSaveRecord
CurrentID = [Forms]![人事代理]![人事代理_child]![人事代理_child_child]![编号]
stDocName = "人事代理_公司"
If Me.委托单位 = "无" Then stDocName = "人事代理_个人"
DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & CurrentID
谢谢张老师,我按你的代码将原来的那个给替换了,目前可以打印。因为怕浪费纸,所以就不深入测试了,只有在未来的几天使用中,如果不出现故障,说明就解决了。
看来可能是那个打印调用,每次都要判断那个嵌套窗体中的编号,有时不能及时取值造成的。
那个打印多少份,我还是将这句 DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & CurrentID
用重复执行的方法实现的,不能搞成设置几份的。
好在这个影响不大,只在后台执行,别人也看不到。呵呵。
我也遇到一个类似问题。不过是网络共享的打印机打印时出现。本地的打印机不出现这个问题。窗体的内容根本不出现除法运算。打印当前窗体时,第一次总是出现,用任务管理器才能关掉,再次打印,以及后续的连续打印没有问题。很是郁闷。打印机是施乐3117。
yinshaobing,你说的确实是提醒了我。我也是用的施乐3117,也好象是用这个打印机后,出现这个问题,以前用的三星2010印象中是没有出现过。并且我也是用的网络共享的打印机。
不过用了张老师的代码后,这几天倒是没有出现那个问题了。不过也是这几天来办人事代理的人比较少,才3例。所以目前还感觉不出来,但愿以后不要发生这样的错误了,实在是太痛苦了。
李应强:你的作品有句代码为什么要加空格,是不是因为主子窗体的关系?
这个我也没深究了,只是照别人的例子抄过来,再修改的。
悲衰的事发生了,又弹出了除数为0的提示了。
实在想不通,为什么会这样。