根据标题/速度和基于字段的格式提取最大值

时间:2015-03-19 20:35:39

标签: vba ms-access

我有一个包含大约30个强制值字段的表,大约有300000条记录。以下示例:

Case                    Left Fx max      Left Fx min    Left Fx mean    Right Fx max    Right Fx min    Right Fx mean
hs000p1600010od_fld_adi 749.26           -660.87        749.26          693.03          -624.13         693.03
hs000p1600010od_spd_adi 698.85           -665.51        698.85          744.15          -645.16         744.15
hs000p1600015od_fld_adi 787.11           -920.66        920.66          731.52          -893.89          893.89
hs000p1600015od_spd_adi 738.94           -917.11        917.11          793.17          -912.77           912.77

每条记录都有一个与标题和速度相对应的相同格式的唯一案例名称(例如 hs000p16 00015 od_fld_adi 有000个标题[3个字符]和15个spd [2 char])。

我想从特定字段(参见当前代码)中提取每个可能的速度和标题配置的最大值到包含相应字段名称的输出表“PolarForce”。

所需的输出格式

        Left Fx mean    Right Fx mean   Third Fx mean   Left Fy mean    Right Fy mean
000/00                  
000/05                  
000/10                  
000/15                  
000/20                  
000/25                  
015/00                  
015/05                  
015/10
 ....
180/25                  

因此,结果表“ PolarForce ”应该具有所有情况的最大Left Fx均值,其中第一个单元格中的000标题和00速度。由于这是在访问VBA中编写的,因此不必明确写入标题/速度列。

当前代码

Sub polar()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim rs3 As DAO.Recordset
Dim fld1 As DAO.Field
Dim fld2 As DAO.Field
Dim newvalue As Double
Dim maxvalue(10) As Double
Dim minvalue As Double
Dim newfield As String
Dim heading As Variant
Dim h As Long
Dim speed As Variant
Dim s As Long
Dim sqlStatement As String
Dim forceFields As Variant
Dim frc As Long


heading = Array("000", "015", "030", "045", "060", "075", "090", "105", "120", "135", "150", "165", "180")
speed = Array("00", "05", "10", "15", "20", "20", "25")
forceFields = Array("Left Fx mean", "Right Fx mean", "Third Fx mean", "Left Fy mean", "Right Fy mean", "Third Fy mean", "Left Fz mean", "Right Fz mean", "Third Fz mean", "MP Fz mean", "MP Fr mean")

Set db = CurrentDb

sqlStatement = "SELECT * FROM PolarForce;"
Set rs1 = db.OpenRecordset(sqlStatement)
sqlStatement = "SELECT * FROM Force;"
Set rs2 = db.OpenRecordset(sqlStatement)

For h = 0 To 12
    For s = 0 To 6
        For frc = 0 To 10
            maxvalue(frc) = 0
            For Each fld2 In rs2.Fields
                If fld2 = forceFields(frc) Then
                    rs2.MoveFirst
                    While Not rs2.EOF
                        If heading(h) = Mid(newcase, 9, 3) And speed(s) = Mid(newcase, 12, 2) Then
                            If rs2(forceFields(frc)) > maxvalue(frc) Then
                            maxvalue(frc) = rs2(forceFields(frc))
                            End If
                        End If
                        rs2.MoveNext
                    Wend
                End If
            Next fld2
        Next frc
        rs1.AddNew
        For frc = 0 To 10
            rs1(forceFields(frc)).Value = maxvalue(frc)
        Next frc
        rs1.Update
    Next s
Next h

Set rs1 = Nothing
Set rs2 = Nothing
Set db = Nothing
End Sub

修改

我设法正确地输出格式,但是,代码返回maxvalue数组的原始设置值0。我无法使用最新的最大值来更新数组。

0 个答案:

没有答案