Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]点击窗体中的打印按钮,弹出“除数为0”的对话框,如何解决?

李应强  发表于: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秒再执行后面的打印报表的语句?我估计是保存没结束,就调用数据,导致出错引起的。

 

Top
竹笛 发表于:2011-08-31 12:40:57

弄个示例传上来看看,分析一下。



风行 发表于:2011-08-31 14:49:28

IIF(除数=0,1,除数) 试试



李应强 发表于:2011-08-31 15:28:19

因为原来的文件是前后台的,就是数据在服务器端,操作窗体报表在本地机上。

现在这个示例是将这个数据和前台都集合到一个文件中了,里面的代码都没有修改的,保持为原来的模样。

这个最大的问题是,不是每次都出现这样,如果测试可以通过在人事代理窗体中,新增代理内容,再点打印,就会有10%的概率会出现那个问题。

 

目前,我最大的怀疑这个问题产生的根源是:保存速度和调用打印数据之间的冲突。即保存语句未执行完,后面的打印语句就跟着来了,结果数据没调出来,就提出“除数为零”。



李应强 发表于:2011-08-31 15:28:43
竹笛 发表于:2011-08-31 16:15:07

试试这样:

 

    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



李应强 发表于:2011-08-31 17:18:12

谢谢张老师,我按你的代码将原来的那个给替换了,目前可以打印。因为怕浪费纸,所以就不深入测试了,只有在未来的几天使用中,如果不出现故障,说明就解决了。

看来可能是那个打印调用,每次都要判断那个嵌套窗体中的编号,有时不能及时取值造成的。

 

那个打印多少份,我还是将这句 DoCmd.OpenReport stDocName, acViewNormal, , "编号=" & CurrentID

用重复执行的方法实现的,不能搞成设置几份的。

 

好在这个影响不大,只在后台执行,别人也看不到。呵呵。

 



蒋元根 发表于:2011-08-31 20:16:29

供参考:打印多份报表问题建议看一下《多联打印》

http://www.accessoft.com/blog/article-show.asp?userid=193&Id=5463



yinshaobing 发表于:2011-09-02 17:19:32

我也遇到一个类似问题。不过是网络共享的打印机打印时出现。本地的打印机不出现这个问题。窗体的内容根本不出现除法运算。打印当前窗体时,第一次总是出现,用任务管理器才能关掉,再次打印,以及后续的连续打印没有问题。很是郁闷。打印机是施乐3117。



李应强 发表于:2011-09-03 04:35:15

yinshaobing,你说的确实是提醒了我。我也是用的施乐3117,也好象是用这个打印机后,出现这个问题,以前用的三星2010印象中是没有出现过。并且我也是用的网络共享的打印机。

不过用了张老师的代码后,这几天倒是没有出现那个问题了。不过也是这几天来办人事代理的人比较少,才3例。所以目前还感觉不出来,但愿以后不要发生这样的错误了,实在是太痛苦了。



殷小宝 发表于:2011-09-07 00:10:03
李应强:你的作品有句代码为什么要加空格,是不是因为主子窗体的关系?

李应强 发表于:2011-09-12 09:11:30
这个我也没深究了,只是照别人的例子抄过来,再修改的。

李应强 发表于:2011-09-21 16:16:20

悲衰的事发生了,又弹出了除数为0的提示了。

实在想不通,为什么会这样。



殷小宝 发表于:2011-11-23 00:25:19

那个空格表示两个字段不相连。应该用于两个字段之间



总记录:13篇  页次:1/1 9 1 :