我有两个表和一个报告,tbl1
,tbl2
和rptAllOrders
。tbl1
和tbl2
不相同。
该报告未绑定到任何记录源,因此它也是控件。
这在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
在您的示例之后,使用正确的字符串连接的解决方案就是这样。它将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注入!来说是一种风险!