1

我在 microsoft access 中有两种形式,一种称为 Bill,另一种称为 Payment。它们在两种形式中都具有总金额作为字段。我正在尝试将账单总额引用到付款总额。

我在支付总额控制源中试过:=Forms!Bill![Total Amount]

但这似乎不起作用。在设计视图中显示“#Name?” 在文本框中。

你会怎么做?

4

3 回答 3

2

任何一种形式都是子形式吗?如果是这样,则需要引用子窗体控件或父属性:

Me.Parent.[Total order]
Me.[Subform Control name Here].form.[Total order]

请注意,子表单控件名称并不总是与包含的表单相同。

编辑:要么省略我,要么在控件中使用 Form!FormName。

EDIT2:请注意,引用表单、子表单和控件的常用方法是使用 bang (!) 或点 (.)。括号和引号很少使用。这可以在 Microsoft Access MVP 站点 ( http://www.mvps.org/access/forms/frm0031.htm ) 和 Microsoft 自己的站点 ( http://support.microsoft.com/kb/209099 ) 中看到,正如诺克斯所说。

如果没有,您是否尝试过表达式生成器?这将有助于确保您拥有正确的姓名。

顺便说一句,最好避免在字段和控件的名称中使用空格,这将为您节省大量工作。最好重命名控件,使它们的名称与其包含的字段不同,例如 txtOrderTotal。

于 2008-11-07T23:09:57.000 回答
0

Remou 的答案仅适用于代码 - 但是看起来您正在定义文本框的控制源,所以试试这个:

=Forms("Bill")![Total order]
于 2008-11-08T00:01:31.203 回答
0

我最喜欢的解决方案是始终返回记录集并计算相应的总数,因为您并不总是确定表单级别的总数是否正确更新(出于任何原因,可能总是有待处理的控件/记录集更新)。然后您就可以使用 DSUM 和相关功能了!

示例:

dsum(Forms("Bill").recordsource, "unitPrice*lineQuantity")

当然,您可以有更复杂的解决方案,例如定义一个临时记录集来获取每张发票的总金额。

Dim rs as DAO.recordset, _
    myBillNumber as variant, _
    myBillAmount as variant

set rs = currentDb.openRecordset(_ 
    "SELECT billNumber, sum(unitPrice*lineQuantity) as totalPrice FROM " & _
    Forms("Bill").recordset.name " GROUP BY billNumber")

myBillNumber = rs.fields(0)
myBillAmount = rs.fields(1)

它可能看起来很复杂,但一旦你习惯了它,你就会毫不犹豫地使用它,而且你永远不会遇到现在面临的那种问题。

于 2008-11-10T12:04:16.610 回答