在Access报告上使用选择查询

问题描述 投票:0回答:1

我有两个表和一个报告,tbl1tbl2rptAllOrderstbl1tbl2不相同。

该报告未绑定到任何记录源,因此它也是控件。

这在VBA中可行吗?还是有更好的替代方法?

Private Sub btnReport_Click()
DoCmd.OpenReport "rptAllOders" , , acViewPriview 
End Sub

Private Sub rptAllOders_Open(Cancel As integer)

Dim strq As string

strq = "SELECT tbl1.ItemNo, tbl1.ItemName, 
tbl2.OderDate, tbl2.OderNo FROM tbl1 UNION ALL ON 
tbl1.ItemNo = tbl2.ItemNo AND ItemName = 
'"Forms!comboItemName.Value"' ORDER BY oderDate 
ASC"

 End Sub
vba ms-access access-vba
1个回答
0
投票

在您的示例之后,使用正确的字符串连接的解决方案就是这样。它将Forms!comboItemName.Value嵌入为字符串。

Private Sub rptAllOders_Open(Cancel As integer)
    Dim strq As String
    strq = "SELECT tbl1.ItemNo, tbl1.ItemName, " & _
           "tbl2.OderDate, tbl2.OderNo FROM tbl1 UNION ALL ON " & _
           "tbl1.ItemNo = tbl2.ItemNo AND ItemName = '" & _ 
           Forms!comboItemName.Value & "' ORDER BY oderDate ASC"

    Me.RecordSource = strq
End Sub

您应该在查询设计器中使用硬编码参数检查您的查询以证明这一点,我不确定查询本身(即使没有或没有硬编码参数)是否运行良好。

并且一如既往:看一下如何使用参数化查询,因为使用字符串级联嵌入参数对于SQL注入!来说是一种风险!

参见此处:https://stackoverflow.com/a/49509616/7658533

© www.soinside.com 2019 - 2024. All rights reserved.