Microsoft Access 掲示板

キーブレイク処理(クエリにて) / 20

23 コメント
views
4 フォロー
20

今回、ご相談させていただきたいのは、開始日は在籍期間NoのMinで良いのですが、
終了日が、理論上は[在籍期間No] + 1のMinの前日となると思っていますが、
私ができる初歩的なレベルですと、もうひとつクエリを作って、両者を結合させるとかになります。

アクションテーブルに失効日のフィールドを追加しておいて、SetRenban関数のループ内で発行日の前日を前レコードの失効日に代入するという処理を追加すればどうでしょう。

Public Sub SetRenban()
    Dim rs As DAO.Recordset
    Dim c As Long, d As Long
    Dim pre氏名, pre組織名
    Dim strSQL As String
 
    strSQL = "SELECT 在籍期間No, 終了日, 発令日, 氏名, 組織名 FROM アクションテーブル " & _
             "ORDER BY 氏名, 発令日;"
 
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset, dbFailOnError)
 
    Do Until rs.EOF
        If pre氏名 = rs!氏名 Then
            If pre組織名 <> rs!組織名 Then
                c = c + 1
                pre組織名 = rs!組織名
            End If
            d = Format(DateAdd("d", -1, Format(rs!発令日, "0000/00/00")), "yyyymmdd")
            rs.MovePrevious
            rs.Edit
            rs!失効日 = d
            rs.Update
            rs.MoveNext
        Else
            c = 1
            pre氏名 = rs!氏名
            pre組織名 = rs!組織名
        End If
 
        rs.Edit
        rs(0) = c
        rs.Update
        rs.MoveNext
    Loop
 
    rs.Close
    Set rs = Nothing
 
    MsgBox "完了"
End Sub
SELECT t.氏名, t.組織名, Min(t.発令日) AS 開始日, Max(t.終了日) AS 終了日
FROM アクションテーブル As t
GROUP BY t.氏名, t.組織名, t.在籍期間No
ORDER BY t.氏名, t.在籍期間No;
通報 ...