0

只是想知道在文本框中的表单上使用表达式时,要从表中返回值,表达式中是否可以有多个表来返回值?

表是链接的,我可以在查询中返回值,所以我认为 Access 也可以使用这种方法来完成它????

=DSum("[tblMain]![Revenue]","tblMain","[tblMain]![Quarter]=3 AND [tblMain]![Region]='NorthEast'" AND [tblOffice]![Location]='NewYork'")

这是我在文本框中输入的表达式,没有对第二个表的引用它可以正常工作,但是一旦我有了它,我就会在文本框中收到闪烁的错误消息(就像在报告中一样).... ..

我知道这种方法可能更多地用于报告而不是表单,但我是新手,并试图提出一个仪表板解决方案,该解决方案可以快速返回每个部门的大量事实。我在属性窗口的数据选项卡的“控制源”字段中使用它,而不是 VB。主要是因为我不知道如何让它与 VB 一起工作。

感谢您一如既往的帮助!

4

2 回答 2

1

这些表有什么关系?你能描述一下关系和任何主键/外键吗?

此外,在此函数的第一个参数中不需要引用表名(因为它已在第二个参数中处理)。

例如,您的代码可能是:

=DSum("Revenue","tblMain","Quarter=3 AND Region='NorthEast'" AND [tblOffice]![Location]='NewYork'")

只是想为您节省一些击键并增加其可读性。:)

于 2009-07-28T23:32:13.897 回答
1

据我所知,您不能在域聚合函数中引用多个表或查询。正如 grazird 所说,这些表有什么关系?假设它在 tblMain ID 上,您可以构建一个名为 qryMainOffice 的查询,SQL(SQL 视图,查询设计窗口)看起来像:

SELECT [tblMain].[Revenue],[tblMain]![Quarter],[tblMain]![Region],
       [tblOffice]![Location]
FROM tblMain 
INNER JOIN tblOffice 
ON tblMain.ID = tblOffice.MainID

然后 DSum 将是(删除换行符):

=NZ(DSum("[Revenue]","qryMainOffice",
 "[Quarter]=3 AND [Region]='NorthEast' AND [Location]='NewYork'"),"Not found")

您还可以在 VBA 中使用记录集或查询来返回值。

编辑重新评论

要在 VBA 中使用上述内容,您需要添加参数或使用字符串:

''Reference: Microsoft DAO 3.x Object Library
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL as String

Set db= CurrentDB

strSQL = "SELECT Sum(t.[Revenue]) As TotalNY" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "AND o.[Location]='NewYork' " _

 '' I have use aliases for simplicity, t-tblMain, o-tblOffice
 '' If you wish to reference a control, use the value, like so: 
 '' & " AND [Location]='" & Me.txtCity & "'"
 '' Dates should be formated to year, month, day
 '' For joins, see http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/

 Set rs = db.OpenRecordset strSQL

 If Not rs.EOF Then
    Me.txtAnswer = rs!TotNY
 Else
    Me.txtAnswer = "N/A"
 End If

您还可以使用不同的查询来返回可以用列表框或子表单显示的多个结果:

strSQL = "SELECT TOP 5 o.[Location]," _
       & "Sum(t.[Revenue]) AS TotRevenue" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "GROUP BY o.[Location]"

以上将返回东北地区所有地点的第三季度收入。如果您想要每个组的最高值,您正在查看一个更复杂的查询,我将暂时离开。

于 2009-07-29T08:01:41.817 回答