希望有人可以了解我在使用vb和Access时遇到的问题。一般问题是:
基本上,表单为查询提供输入,而查询又为报表中的模块提供输入。
我遇到的问题是用户在表单上输入一次输入,然后提示(使用弹出窗口)再次输入数据。只有第二次复飞的数据才会反映在报告中。有没有办法让表单数据保留,并且不再提示查询?
以下是我的模块代码(在报告中)。正如您将看到我尝试从表单中传递参数但它似乎不起作用:
Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As
Double) As Double
'This function will calculate the percentile of a recordset.
Dim PercentileTemp As Double
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim RstOrig As DAO.Recordset
Dim RstSorted As DAO.Recordset
Dim xVal As Double
Dim iRec As Long
Dim i As Long
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("qryMaster")
'i need to pass the parameters to the query
qdf.Parameters!minA = Forms!demo_form.min_assets
qdf.Parameters!maxA = Forms!demo_form.max_assets
qdf.Parameters!minP = Forms!demo_form.min_parts
qdf.Parameters!maxP = Forms!demo_form.max_parts
Set RstOrig = qdf.OpenRecordset()
RstOrig.Sort = fldName
Set RstSorted = RstOrig.OpenRecordset()
RstSorted.MoveLast
RstSorted.MoveFirst
xVal = ((RstSorted.RecordCount - 1) * PercentileValue) + 1
'x now contains the record number we are looking for.
'Note x may not be whole number
iRec = Int(xVal)
xVal = xVal - iRec
'i now contains first record to look at and
'x contains diff to next record
RstSorted.Move iRec - 1
PercentileTemp = RstSorted(fldName)
If xVal > 0 Then
RstSorted.MoveNext
PercentileTemp = ((RstSorted(fldName) - PercentileTemp) * xVal) + PercentileTemp
End If
RstSorted.Close
RstOrig.Close
Set RstSorted = Nothing
Set RstOrig = Nothing
Set dbs = Nothing
PercentileRst = PercentileTemp
End Function
我正在使用的表单将4个参数传递给查询。在查询中我使用以下标准:'在[minA]和[maxA]之间以及'在[minP]和[maxP]之间'
查询的SQL中是否有某种方法可以将这些参数的值初始化为表单中的值?
当用户点击“确定”时,表单会打开查询和报告。
答案 0 :(得分:1)
qryMaster 包含参数,是报告的记录来源。因此,当报表首次打开时,Access会要求用户提供这些参数的值。
稍后,在将结果集加载到DAO.Recordset
的过程中再次使用 qryMaster 。那时您的代码提供参数值,因此不会要求用户再次提供值。但是,这对形式开放的情况没有任何影响。
尝试修改 qryMaster ,您可以在其中指向表单的控件:
WHERE
some_field BETWEEN Forms!demo_form!min_assets
AND Forms!demo_form!max_assets
AND another_field BETWEEN Forms!demo_form!min_parts
AND Forms!demo_form!max_parts
db引擎可以查看 demo_form 上的那些控件以获取所需的值,因此不会要求用户单独提供参数值。