GoToRecord工作正常,但是为该记录返回值的最简单方法

问题描述 投票:0回答:1

部分问题是打开记录集的表并且必须将焦点设置到子表单。我通过vba对表进行排序是不成功的。目标是找到表的MEDIAN值,从而进行排序。

Private Sub cboUser_AfterUpdate()
Dim sourceReset As String
Dim dbMedian As DAO.Database
Dim rsMedian As DAO.Recordset

sourceReset = sbf.SourceObject  '<--Is Table.TEMPtable btw.
Me.sbf.SourceObject = ""
Forms!frm.Requery
Forms!frm.Refresh


'Create new TEMPtable
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "qryTEMPtable"   '<--Is sorted here as desired
    DoCmd.SetWarnings True

Set dbMedian = CurrentDb()
Set rsMedian = dbMedian.OpenRecordset("TEMPtable") '<--Gets unsorted here

sbf.SourceObject = sourceReset
Me.OrderBy = "NetWrkDays ASC" '<--Re-sorting, but on subform, which.. is 
fine if I can return the column value later.
Forms!frm.Refresh

Me.[sbf].SetFocus

Records= DCount("[ColA]", "TEMPtable")

'Even number of records
If Records - 2 * Int(Records / 2) = 0 Then
    MEDrcd = Records / 2
    DoCmd.GoToRecord , , acGoTo, MEDrcd '<-Can see value in debug, how to 
assign it to a useful variable???
    ''''Me.CurrentRecord ("NetWrkDays")
    ''''Me.RecordSource ("NetWrkDays")
    Me.txtMED = rsMedian("NetWrkDays")
End If

'Odd number of records
If Records - 2 * Int(Records / 2) = 1 Then
    MEDrcd1 = (Records - 1) / 2
    MEDrcd2 = (Records + 1) / 2
    DoCmd.GoToRecord acDataForm, "TempTable", acGoTo, MEDrcd1
    MED1 = rsMedian("NetWrkDays")
    DoCmd.GoToRecord acDataForm, "TempTable", acGoTo, MEDrcd2
    MED2 = rsMedian("NetWrkDays")
    Me.txtMED = (MED1 + MED2) / 2
End If

我想如果你不能在那时返回值,我认为尝试使用DoCmd.GoToRecord毫无意义。

  1. 移动到记录后返回值的最佳/正确方法是什么。
  2. 由于子窗体和表是相同的,我只是将设置焦点运行到子窗体,正如我所说的那样在vba中对表进行排序。虽然然后我使用rsMedian是没有意义的,因为表rs永远不会移动...但我无法使用GoToRecord检索通过子表单移动的值。
  3. 我在这里转圈,我希望不要乱解。谢谢。
access-vba ms-access-2013 median goto
1个回答
0
投票

在线找到此方法。如果其他人发现自己处于类似的情况,那么工作得很好。

Private Sub cboUser_AfterUpdate()
Dim sourceReset As String, sqlMED As String, sTable As String, sField As String
Dim j As Integer, varVal As Single
Dim rs As DAO.Recordset

sourceReset = sbf.SourceObject
Me.sbf.SourceObject = ""
Forms!frmSTATS.Requery
Forms!frmSTATS.Refresh

   'Create new TEMPtable table
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "qryTEMPtable"
    DoCmd.SetWarnings True

'Get MEDIAN Data/Value
sTable = "TEMPtable"
sField = "NetWrkDays"
sqlMED = "SELECT " & sField & " from " & sTable & " WHERE " & sField & ">0 Order by " & sField & ";"
Set rs = CurrentDb.OpenRecordset(sqlMED)
    rs.MoveLast
        j = rs.RecordCount
    rs.Move -Int(j / 2)

If j Mod 2 = 1 Then 'odd number of elements
   getMedian = rs(sField)
Else                'even number of elements
   varVal = rs(sField)
   rs.MoveNext
   varVal = varVal + rs(sField)
        getMedian = varVal / 2
End If
Me.txtAnswer = getMedian
rs.Close

sbf.SourceObject = sourceReset
Me.OrderBy = "NetWrkDays ASC"
Forms!frmSTATS.Refresh

结束子

© www.soinside.com 2019 - 2024. All rights reserved.