Access交流中心

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

一个按钮打印三种格式的报表,自己解决了,分享一下

phenix  发表于:2010-08-19 15:31:03  
复制

原帖在这里:http://www.accessoft.com/bbs/showtopic.asp?ID=9676&BoardID=9

 

发帖之后一直没得到满意的答复,遂自己翻论坛、拆实例,完全依葫芦画瓢解决了问题,虽说有些笨,但自己用着方便比啥都强,难掩兴奋的心情,把解决的途径贴出来和大家分享,如果能帮我完善则更好。

 

实现的思路:原来打算从一个查询结果的子窗体分别提取记录来形成不同的报表,现在用了个笨招,干脆在查询按钮的代码中设置条件,一次控制三个不同的子窗体,再用预览报表的按钮代码分别把三个子窗体的结果赋值给相应的报表并实现打印输出。一个按钮查询,一个按钮打印,齐活了。

 

查询按钮的代码:

 

Private Sub cmd工资查询_Click()
On Error GoTo Err_cmd工资查询_Click

    Dim strWhere As String
   
    strWhere = ""
    If Not IsNull(Me.xueli) Then
        strWhere = strWhere & "([学历] like '" & Me.xueli & "') AND "
    End If
   
      If Not IsNull(Me.cjgzsj) Then
        strWhere = strWhere & "([参加工作时间] like '" & Me.cjgzsj & "') AND "
    End If
    If Not IsNull(Me.zcsj) Then
        strWhere = strWhere & "([转出时间] = " & Me.cjgzsj & ") AND "
    End If

    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
   
    Debug.Print strWhere
   
    Me.工资查询子窗体.Form.Filter = strWhere
    Me.工资查询子窗体.Form.FilterOn = True
   
    strWhere = ""
    If Not IsNull(Me.xueli) Then
        strWhere = strWhere & "([学历] like '" & Me.xueli & "') AND "
    End If
   
      If Not IsNull(Me.cjgzsj) Then
        strWhere = strWhere & "([参加工作时间] like '" & Me.cjgzsj & "') AND "
    End If
    If Not IsNull(Me.zcsj) Then
        strWhere = strWhere & "([转出时间] = " & Me.cjgzsj & "+1) AND "
    End If

    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
   
    Debug.Print strWhere
    Me.转正定级子窗体.Form.Filter = strWhere
    Me.转正定级子窗体.Form.FilterOn = True
   
    strWhere = ""
    If Not IsNull(Me.xueli) Then
        strWhere = strWhere & "([学历] like '" & Me.xueli & "') AND "
    End If
   
      If Not IsNull(Me.cjgzsj) Then
        strWhere = strWhere & "([参加工作时间] like '" & Me.cjgzsj & "') AND "
    End If
    If Not IsNull(Me.zcsj) Then
        strWhere = strWhere & "([转出时间]> " & Me.cjgzsj & "+1 and [转出时间]<=" & Me.zcsj & ") AND "
    End If

    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
   
    Debug.Print strWhere
    Me.晋升子窗体.Form.Filter = strWhere
    Me.晋升子窗体.Form.FilterOn = True

Exit_cmd工资查询_Click:
    Exit Sub

Err_cmd工资查询_Click:
    MsgBox Err.Description
    Resume Exit_cmd工资查询_Click
End Sub
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

打印报表按钮的代码:

 

Private Sub 报表_Click()
On Error GoTo Err_报表_Click

    Dim stDocName, strWhere As String

    stDocName = "试用期"
    strWhere = Me.工资查询子窗体.Form.Filter
   
    DoCmd.OpenReport stDocName, acViewNormal, , strWhere

    stDocName = "转正定级"
    strWhere = Me.转正定级子窗体.Form.Filter
   
    DoCmd.OpenReport stDocName, acViewNormal, , strWhere
      
    stDocName = "晋升工资"
    strWhere = Me.晋升子窗体.Form.Filter
   
    DoCmd.OpenReport stDocName, acViewNormal, , strWhere

Exit_报表_Click:
    Exit Sub

Err_报表_Click:
    MsgBox Err.Description
    Resume Exit_报表_Click
   
End Sub

 

Top
phenix 发表于:2010-08-19 15:35:34

没有真正的学过access,只是因为工作需要在2005年的时候按照刘小军的查询教程山寨了一个查询工具,当时只是把他的实例做了很小的改动就直接用了。

5年之后又有新的工作,还是以刘小军的查询实例为基础,并参考了accessoft中的一些帖子,进行了更多的修改,最终达到了目的,在此向刘小军和accessoft的各位高手致谢。



煮江品茶 发表于:2010-08-19 15:45:49

可以如下简化:

Private Sub cmd工资查询_Click()
    Dim strWhere As String
    Dim str(1 to 3) As String

    strWhere = "True"
    If Not IsNull(Me.xueli) Then
        strWhere = strWhere & " AND ([学历] like '" & Me.xueli & "')"
    End If
   
    If Not IsNull(Me.cjgzsj) Then
        strWhere = strWhere & " AND ([参加工作时间] like '" & Me.cjgzsj & "')"
    End If

    If Not IsNull(Me.zcsj) Then
        str(1) = strWhere & " AND ([转出时间] = " & Me.cjgzsj & ")"
        str(2) = strWhere & " AND ([转出时间] = " & Me.cjgzsj & "+1)"
        str(3) = strWhere & " AND ([转出时间]> " & Me.cjgzsj & "+1 and [转出时间]<=" & Me.zcsj & ")"
    End If

   
    Me.工资查询子窗体.Form.Filter = str(1)
    Me.工资查询子窗体.Form.FilterOn = True
   
    Me.转正定级子窗体.Form.Filter = str(2)
    Me.转正定级子窗体.Form.FilterOn = True
   
    Me.晋升子窗体.Form.Filter = str(3)
    Me.晋升子窗体.Form.FilterOn = True

End Sub
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

打印报表按钮的代码:

 Private Sub 报表_Click()

    DoCmd.OpenReport "试用期", acViewNormal, , Me.工资查询子窗体.Form.Filter

    DoCmd.OpenReport "转正定级", acViewNormal, , Me.转正定级子窗体.Form.Filter

    DoCmd.OpenReport "晋升工资", acViewNormal, , Me.晋升子窗体.Form.Filter

End Sub

 



phenix 发表于:2010-08-20 23:25:24

非常感谢海量总版,您帮忙改的代码非常好用,效果完全一样,却省了不少事。



林飞 发表于:2010-09-30 10:59:39

能把例子一起发上来就更好了

 

 



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