我希望这是一个简单的问题,你不必浪费太多时间在上面。 我有一个报告(称为repRAD78),其中包含一个文本框(称为txtRAD8)。我想根据从名为qryrRAD78的查询中提取的数字,使用计算值填充txtRAD8。 通过论坛来看,它看起来像是记录集的解决方案,但这是我第一次涉足记录集并且进展不顺利。 :( 我在下面粘贴的代码我从很多地方汇总了它并没有产生任何错误,但是对于所有记录都将相同的值放入txtRAD8。 我很抱歉,如果这是一个愚蠢的问题,但它一直在推动我的便利。 非常感谢你的时间。 人
Public Sub Calc()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("qryrRAD78")
rst.MoveFirst
Do Until rst.EOF = True
Dim lngMean As Long
Dim lngRAD78max As Long
Dim lngRAD78_1 As Long
Dim lngRAD78_2 As Long
Dim lngRAD78_3 As Long
Dim lngRAD7 As Long
Dim lngRAD8 As Long
lngRAD78_1 = rst![RAD78_1]
lngRAD78_2 = rst![RAD78_2]
lngRAD78_3 = rst![RAD78_3]
lngRAD8b_c = rst![RAD8b_c]
lngMean = (lngRAD78_1 + lngRAD78_2 + lngRAD78_3) / 3
lngRAD78max = Maximum(Abs(lngRAD78_1), Abs(lngRAD78_2), Abs(lngRAD78_3))
lngRAD7 = ((lngRAD78max - lngMean) / lngMean) * 100
lngRAD8 = ((lngMean - lngRAD8b_c) / lngRAD8b_c) * 100
txtRAD8.Value = lngRAD8
rst.MoveNext
Loop
rst.Close
dbs.Close
End Sub
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
Calc
End Sub
答案 0 :(得分:1)
此函数的问题是报表上的每一行都将有一个名为txtRAD8的文本框。所以你真正在做的是用相同的值更新报表上的每个文本框(对于记录集的每个循环一次)。您实际上并没有为每一行设置值。
您需要做的是使textbox = Calc(RowID)的值。然后,您的查询使用传入的参数来获取该一条记录的值,而不是循环遍历整个记录集,并仅更新报告中的那一行。
所以你的Sub成为一个函数,并返回计算出的值。
答案 1 :(得分:1)
这是第二种方法。不是在代码中使用函数,而是从Calc()例程中获取计算并将它们放在另一个查询中。
SELECT idrRAD78,
(RAD78_1 + RAD78_2 + RAD78_3) AS Mean,
(IIf(Abs(RAD78_1) > Abs(RAD78_2),
IIf(Abs(RAD78_1) > Abs(RAD78_3), RAD78_1, RAD78_3),
IIf(Abs(RAD78_2) > Abs(RAD78_3), RAD78_2, RAD78_3))) AS RAD78Max,
(((RAD78max - Mean) / Mean) * 100) AS RAD7,
(((Mean - RAD8b_c) / RAD8b_c) * 100) AS RAD8
FROM qryrRAD78
这将为您提供一个与现有函数执行相同计算的查询。然后编辑报表查询以使用类似以下内容加入此新查询(就像加入表格一样):
FROM ReportQuery INNER JOIN NewQuery ON ReportQuery.idrRAD78 = NewQuery.idrRAD78
更改查询名称以匹配实名。在报表查询的SELECT部分添加新查询中的字段:
SELECT <existing field list>, RAD7, RAD8
然后将txtRAD8设置为RAD8字段。
我只是在记忆中这样做,因为我不在我自己的电脑前,但希望这是有道理的,并且足够接近正确的代码。