将日期从表单传递到Docmd.openreport时出现问题

时间:2013-11-15 23:40:15

标签: date report filtering

我正在拔头发,因为我不知道这里有什么问题。我怀疑它是一个简单/愚蠢的错误,但只是看不到它。我是一个相对缺乏经验的VBA程序员,但我喜欢认为有足够的文字来掌握大多数编程语言。

问题 我有一个简单的进销存系统。我想要制作的报告之一是在特定日期之后报告所有发票问题。

为此,我创建了一个报告“所有发票查询”,该报告使用相同名称的查询生成系统中所有发票的摘要,并提供一行摘要(日期,金额,付费标记)< / p>

我想对此进行修改,以便在特定日期之后将打印输出限制为发票。

我在信息中心创建了一个字段(文本框;格式为shortdate)来保存日期和一个“运行”报告的按钮 该按钮调用过程

Private Sub ButtonAfterDate_Click()
    DoCmd.OpenReport "All invoice query", acViewPreview, , "[Invoice date] > #" & Me.Printdate & "#"
End Sub

这将生成一份包含系统中所有发票的报告(即无过滤)

如果我转到保存[发票]中的数据的表格并从那里复制日期并将其粘贴到表格控件中,报表就会开始工作,报表只显示日期之后的发票。

我已经检查过我的表单控件设置为shortdate,我尝试输入日期并选择日期选择器(没有差异仍然无法过滤)

在绝望中我尝试将控件更改为一个列表框,该列表框使用查询从Invoice表中提取日期(但是失败,所以返回到我原来的控制按钮和字段以保存日期(带日期选择器)

总结 如果我将表中的日期复制并粘贴到表单控件中,则OpenReport的行为与期望和过滤器相同 如果我键入日期或使用日期选择器将日期放在表单控件中,OpenReport将忽略任何过滤并显示所有发票摘要。

这似乎是一个数据类型问题,但我不知道接下来要尝试什么

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

我找到了答案。我没有意识到Docmd.OpenReport的where子句必须有美国格式的任何日期,即mm / dd / yyyy我在英国,windows上的本地化(实际上是uk练习)输入为dd / mm / YYYY

在做了一些研究后,我找到了一个函数来重写从英国到我们格式的日期,然后将修改后的字符串放在where子句中。

我在这里找到了修改日期的代码:http://bytes.com/topic/access/answers/511395-dates-where-clause

但为了方便:

Public Function FixDate(strDate As String)
Dim D1 As Integer, D2 As Integer
D1 = InStr(strDate, "/")
D2 = InStr(D1 + 1, strDate, "/")
FixDate = CDate(Mid(strDate, D1 + 1, D2 - (D1 + 1)) & "/" _
& Left(strDate, D1 - 1) & "/" _
& Mid(strDate, D2 + 1))

结束功能

兰迪哈里斯发表 技术在promail dot com

然后我修改我的事件过程以使用此代码:

Private Sub ButtonAfterDate_Click()
Dim mydate As Date
mydate = Me.Printdate
FixDate (mydate)
DoCmd.OpenReport "All invoice query", acViewPreview, , "[Invoice date] > #" & mydate & "#"
End Sub

它有效!

感谢所有看过并考虑过它的人,我希望它能帮助别人。