Office中国论坛/Access中国论坛

标题: 如何把空值查询的结果传到报表中打印。同时不影响原打印功能。 [打印本页]

作者: yzc2011    时间: 2017-3-23 13:17
标题: 如何把空值查询的结果传到报表中打印。同时不影响原打印功能。
如何把空值查询的结果传到报表中打印。同时不影响原打印功能。
就是说一个报表即能打印查询结果,也能就打印空值查询结果。只依据所显示的查询结果打印。

Private Sub cmd查询_Click()
    On Error GoTo Err_cmd查询_Click
    Dim strWhere As String  '定义条件字符串
    strWhere = ""    '设定初始值-空字符串

    '判断【产品名称】条件是否有输入的值
    If Not IsNull(Me.产品名称) Then
        '有输入
        strWhere = strWhere & "([产品名称] like '*" & Me.产品名称 & "*') AND "
    End If
   
     '判断【订单编号】条件是否有输入的值
    If Not IsNull(Me.订单编号) Then
        '有输入
        strWhere = strWhere & "([订单编号] like '*" & Me.订单编号 & "*') AND "
    End If
   
   '判断【准时】条件是否有输入的值
    If Not IsNull(Me.准时) Then
        '有输入
        strWhere = strWhere & "([准时] like '" & Me.准时 & "') AND "
    End If
   
     '判断【交货日期】条件是否有输入的值,由于有【启始交货日期】【截止交货日期】两个文本框
    '所以要分开来考虑
    If Not IsNull(Me.启始交货日期) Then
        '【启动交货日期】有输入
        strWhere = strWhere & "([交货日期] >= #" & Format(Me.启始交货日期, "yyyy-mm-dd") & "#) AND "
    End If
    If Not IsNull(Me.截止交货日期) Then
        '【截止交货日期】有输入
        strWhere = strWhere & "([交货日期] <= #" & Format(Me.截止交货日期, "yyyy-mm-dd") & "#) AND "
    End If
    '如果输入了条件,那么strWhere的最后肯定有" AND ",这是我们不需要的,
    '要用LEFT函数截掉这5个字符。
    If Len(strWhere) > 0 Then
        '有输入条件
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
    '先在立即窗口显示一下strWhere的值,代码调试完成后可以取消下一句
    Debug.Print strWhere
    '让子窗体应用窗体查询
    Me.订单查询详表.Form.Filter = strWhere
    Me.订单查询详表.Form.FilterOn = True
   
     If Len(strWhere) > 0 Then
     Dim str As String, str1 As String
     str = "准时='超期' AND " & strWhere
    str1 = "准时='按时' AND " & strWhere
      Me.订单查询详表!超期次数 = DCount("*", "订单查询", str)
      Me.订单查询详表!按时次数 = DCount("*", "订单查询", str1)
    End If
Exit_cmd查询_Click:
    Exit Sub
Err_cmd查询_Click:
    MsgBox Err.Description
    Resume Exit_cmd查询_Click
End Sub
Private Sub cmd清除_Click()
   
    '下面这些控件的值要清空

    Me.产品名称 = Null
    Me.订单编号 = Null
    Me.准时 = Null
    Me.启始交货日期 = Null
    Me.截止交货日期 = Null
    Me.订单查询详表.Form.Filter = ""
    Me.订单查询详表.Form.FilterOn = True
    Me.订单查询详表!超期次数 = DCount("*", "订单查询", "准时='超期'")
    Me.订单查询详表!按时次数 = DCount("*", "订单查询", "准时='按时'")
   
    Me.空值字段 = Null
    Me.订单查询详表.Form.RecordSource = "select * from 订单查询"
   
    Me.订单查询详表.Requery  '清空之后一样要重新查询
End Sub

Private Sub 空值查询_Click()
     Dim str As String
     Dim sSQL As String
       If Not IsNull(Me.空值字段) Then
           str = Me.空值字段
         Else
           MsgBox "请输入要查询的空值字段名称"
           Me.空值字段.SetFocus
         Exit Sub
       End If
          sSQL = "select * from 订单查询 where " & str & " is null"
          Me.订单查询详表.Form.RecordSource = sSQL
  
End Sub

Private Sub 订单查询预览打印_Click()
    On Error GoTo Err_订单查询预览打印_Click
    Dim stDocName, strWhere As String
    stDocName = "订单查询打印"
    strWhere = Me.订单查询详表.Form.Filter
    '在打开报表的同时把子窗体的筛选条件字符串也传递给报表,
    '这样地话报表也会显示和子窗体相同的记录。
    DoCmd.OpenReport stDocName, acPreview, , strWhere
   
   
Exit_订单查询预览打印_Click:
    Exit Sub
Err_订单查询预览打印_Click:
    MsgBox Err.Description
    Resume Exit_订单查询预览打印_Click
End Sub


作者: Henry D. Sy    时间: 2017-3-23 13:30
[attach]60995[/attach]

作者: yzc2011    时间: 2017-3-23 14:23
本帖最后由 yzc2011 于 2017-3-23 14:27 编辑

还有一点问题,在不查询状态下没办法打印。另外在清除后再点打印还是留着上次的的打印内容,在清除后能跟着清除打印内容吗。
麻烦你了

!!或者新建一个空值打印的报表和按键,彻底把这两个查询分开来使用。这样互不干扰。


作者: Henry D. Sy    时间: 2017-3-23 14:45
yzc2011 发表于 2017-3-23 14:23
还有一点问题,在不查询状态下没办法打印。另外在清除后再点打印还是留着上次的的打印内容,在清除后能跟着 ...

[attach]60996[/attach]

作者: yzc2011    时间: 2017-3-23 15:08
出现两个错误。
把两个查询和打印彻底分开吧,这样会不会更好一点。
互相不干扰,这样修改的地方也会少一点。在附件中复制了一个报表,和新建了一个空值打印按键。
麻烦你了。新手对代码太陌生了。

作者: Henry D. Sy    时间: 2017-3-23 22:42
yzc2011 发表于 2017-3-23 15:08
出现两个错误。
把两个查询和打印彻底分开吧,这样会不会更好一点。
互相不干扰,这样修改的地方也会少一 ...

你是不是搞错附件了,
我测试正常呀
作者: yzc2011    时间: 2017-3-23 22:47
没有弄错呀,在没有输入查询条件时点击查询就会出现这样的情况。
作者: Henry D. Sy    时间: 2017-3-24 00:23
yzc2011 发表于 2017-3-23 22:47
没有弄错呀,在没有输入查询条件时点击查询就会出现这样的情况。

这就奇怪了,
你是不是下载4楼的附件呀!
作者: yzc2011    时间: 2017-3-24 00:27
本帖最后由 yzc2011 于 2017-3-24 00:49 编辑

是呀,就是4楼的附件啊
就一个2楼的附件和一个4楼的附件。
没有其它附件了呀。

要么就分开来,订单查询和订单打印就要原来的代码,不变化。
                      空值查询和空值打印另外做一套代码。这样互不干扰。也可以省了很多地方的修改。麻烦你了。


作者: Henry D. Sy    时间: 2017-3-24 09:59
我这里一切正常
作者: yzc2011    时间: 2017-3-24 11:37
在输入查询条件时是正常,在没有输入查询条件时,点击查询按键就会出现WHERE子句语法错误,接着再点击打印按键就会出现运行时错误“3145”。

能分开来写个代码吗,原来的订单查询和订单打印就用原来的代码,不变化。
                     
                                 空值查询和空值打印另外做一套代码。这样互不干扰。
作者: Henry D. Sy    时间: 2017-3-24 12:44
yzc2011 发表于 2017-3-24 11:37
在输入查询条件时是正常,在没有输入查询条件时,点击查询按键就会出现WHERE子句语法错误,接着再点击打印 ...

[attach]61008[/attach]

作者: yzc2011    时间: 2017-3-24 13:05
有输入查询条件是正常,清空条件就出错

作者: Henry D. Sy    时间: 2017-3-24 13:13
可以肯定的说,你搞错附件!
作者: yzc2011    时间: 2017-3-24 14:01
刚刚把以前所下载的全部删除了,重新从4楼下载了附件,打开直接点击查询按键,出现上面所说的错误。
作者: yzc2011    时间: 2017-3-24 14:04
本帖最后由 yzc2011 于 2017-3-24 14:07 编辑

我看了你的演示,你打开后什么都不动,直接点击“查询”按键,就会出错。一旦”查询“按键出错后,你再点击打印按键就跟着出错。

在点击清除后,不输入任何查询内容,直接点击查询按键,也会出现错误。

作者: Henry D. Sy    时间: 2017-3-24 14:31
yzc2011 发表于 2017-3-24 14:04
我看了你的演示,你打开后什么都不动,直接点击“查询”按键,就会出错。一旦”查询“按键出错后,你再点击 ...

看到了
[attach]61010[/attach]

作者: yzc2011    时间: 2017-3-24 14:53
谢谢你,我先试一下,应该是没问题了。
作者: yzc2011    时间: 2017-3-24 20:48
请问上面的这个附件除了订单查询、订单查询详表、订单查询打印这3个地方改过代码,还有什么地方有改过代码或非代码的地方吗。我移植过去不行。

点打印显示不了。订单查询详表说是

作者: Henry D. Sy    时间: 2017-3-24 21:02
要声明公共变量
Public sSQL As String
Public strWhere As String
[attach]61017[/attach]

作者: yzc2011    时间: 2017-3-24 21:21
本帖最后由 yzc2011 于 2017-3-25 11:42 编辑

[attach]61018[/attach]谢谢,现在可以了,不知在这里改动会对其它地方有影响吗?实际上有两个模块,一个是人民币大写,还有一个是客户名称模糊搜索。
两个模块都复制到附件中了

作者: yzc2011    时间: 2017-3-25 13:02
还是有点问题。数据不能恢复到最原始的所有数据中。点击了清除,或查询后数据能回到原始数据中,关闭后重新打开又是被空值查询后的数据。即使把文件关了,重新打开文件也一样是空值查询后的数据。

不知是什么原因。原先点击是好的,不断的操作查询之后。突然之间就会出现这样的情况。



作者: yzc2011    时间: 2017-3-25 13:20
有时是在空值查询后没有清除,直接关闭才造成这样的。但有时又不会。说不清楚。

作者: Henry D. Sy    时间: 2017-3-25 15:10
在报表打开,订单查询详表加载时都要设定记录源
作者: yzc2011    时间: 2017-3-25 15:19
本帖最后由 yzc2011 于 2017-3-25 15:22 编辑

都弄了,记录源都有设置的。  订单查询、订单查询详表、报表、模块。4个地方修改的都处理过了。查询和空值查询点点突然变成这样子。数据被固定了。
作者: yzc2011    时间: 2017-3-25 18:15
同一个文件中有两个查询使用了空值查询,原来是两个都会出现这种情况,现在是有一个出现这种情况,另一个又不会???
作者: yzc2011    时间: 2017-3-25 18:15
同一个文件中有两个查询使用了空值查询,原来是两个都会出现这种情况,现在是有一个出现这种情况,另一个又不会???
作者: yzc2011    时间: 2017-3-25 19:15
本帖最后由 yzc2011 于 2017-3-25 20:32 编辑

这是有问题的附件,能帮忙再看一下吗。一般都是打开后输入空值查询条件后点击空值查询,没有清除,直接关闭窗体。下次打开就会留下空值查询后的数据。不管怎么弄都弄不掉。



作者: Henry D. Sy    时间: 2017-3-25 20:18
yzc2011 发表于 2017-3-25 19:15
这是有问题的附件,能帮忙再看一下吗。一般都是打开后输入空值查询条件后点击空值查询,没有清除,直接关闭 ...

[attach]61027[/attach]

作者: yzc2011    时间: 2017-3-25 20:32
谢谢,我再试一下。
作者: yzc2011    时间: 2017-3-27 08:12
现在没发现问题,真是太谢谢Henry D. Sy版主了。
作者: 灰太郎    时间: 2021-7-25 20:38
eeeeeeeeeeeeeeeeee
作者: 灰太郎    时间: 2021-7-27 11:19
22222




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3