1

ここにあるのは、野球選手の名前、給与を表示し、ヒット数、打点などの通常の野球の統計を表示するクエリです。コードで最後に選手の名前を含むクエリを作成する必要があります。名前と次のような式の結果

 IIf([H]<>0,Format(([Salary]/[H]),'$#,###.##'),0) AS Per_H

私は基本的に、その式を名前と給与の後のすべての列に適用できるようにしたいと考えています。

今、私は持っています

Table  PlayerSal
NAME SALARY H R HR

H はヒット、R はラン、HR はホームランです。結果のクエリは次のようになります。

 Player_Per

NAME Per_H, Per_R, Per_HR.

正確に何をする必要がありますか?

編集

追加する必要があります。はい、計算したい統計ごとにまったく同じ関数を入力できることはわかっていますが、それは重要ではありません。興味のあることに応用しながら知識を広げようとしています。ただし、これはおそらく将来的に他のものに拡張される可能性があることを私は知っています.

4

3 に答える 3

1

ごめんなさい、兄弟。最後の弾。このコードは機能します。ただし、すべてのレコードをループするわけではないため、微調整が必​​要です。

Public Function HitTest()

Dim db As Database
Dim rec As DAO.Recordset
Dim fld As DAO.Field

Set db = CurrentDb
Set rec = db.OpenRecordset("tblPlayers")
EditTable = "tblPlayers"

For Each fld In rec.Fields
  If fld.Name <> "PName" And fld.Name <> "Salary" And Left(fld.Name, 4) <> "Per_" Then
    strFieldName = "Per_" & fld.Name & ""
    'rs.Fields (strFieldName)
    'X = "IIf(rec([" & fld.Name & "]) <> 0, Format((rec([Salary]) / rec([" & fld.Name & "])), '$#,###.##'), 0)"
    If FieldExists(EditTable, strFieldName) Then
    Else
        'AltTable = "ALTER TABLE " & EditTable & " ADD COLUMN " & strFieldName & " Double;"
        'CurrentDb.Execute (AltTable)
    End If
        rec.Edit
        X = IIf(rec((fld.Name)) <> 0, Format((rec("Salary") / rec((fld.Name))), "$#,###.##"), 0)
        rec.Fields(strFieldName).Value = X
        rec.Update
  End If
Next fld

End Function
于 2013-06-06T14:15:02.033 に答える
0

これについて、もう少し調べてみました。すべての「Per_」フィールドが存在することを確認し、追加する必要がある新しいフィールドを決定するには、レコードセットを開く必要があるようです。次に、レコードセットを閉じて ALTER TABLE ステートメントを実行し、必要な新しいフィールドを作成する必要があります。次に、レコードセットを再度開き、数式の値でフィールドを更新する必要があります。

新しいフィールドを手動で追加するだけであれば、おそらく最初の 2 つの手順を省くことができますが、そうする必要があります。最初の 2 つのステップを省略したい場合は、次のようになります。

Dim db As Database
Dim rec As DAO.Recordset
Dim fld As DAO.Field

Set db = CurrentDb
Set rec = db.OpenRecordset("tblPlayers")
EditTable = "tblPlayers"

For Each fld In rec.Fields
  If fld.Name <> "PName" And fld.Name <> "Salary" Then
    strFieldName = "Per_" & fld.Name & ""
    X = "IIf([" & fld.Name & "] <> 0, Format(([Salary] / [" & fld.Name & "]), '$#,###.##'), 0)"
    If FieldExists(EditTable, strFieldName) Then
        rec.Edit
        rec.Fields(strFieldName).Value = X
        rec.Update    
    Else
    End If

  End If
Next fld

次に、フィールドが存在するかどうかを確認するには、次の関数が必要です。

Public Function FieldExists(ByVal tableName As String, ByVal fieldName As String) As Boolean
Dim nLen As Long

On Error GoTo Failed
    With DBEngine(0)(0).TableDefs(tableName)
        .Fields.Refresh
        nLen = Len(.Fields(fieldName).Name)
        If nFldLen > 0 Then FieldExists = True
    End With
    Exit Function
Failed:
    If Err.Number = 3265 Then Err.Clear ' Error 3265 : Item not found in this collection.
    FieldExists = False
End Function
于 2013-06-05T20:00:33.083 に答える