Microsoft Access 掲示板

上限ありの連番フィールドをつくりループさせるには / 5

24 コメント
views
4 フォロー
5

 上限ありの連番フィールドをつ...
 テーブル  レポート
IDを元に直前のレコードを参照して元レコードの連番フィールドに+1(連番に上限をつけて上限になると1に戻す仕組みにする)するというような仕組みやDLookUpを使うと
全レコードを対象に検索がされるのでどんどん重くなっていきますか?

レコードを作成したときに自動で作成したいです
必ずしもレコードに保存しなくても、計算で同じ指示事項が表示されるのでしょうけど
いちおうレコードに保持する方向で考えています(印刷や再発行したときにずれていると信憑性を疑われそうなので)

新規レコードを入力したときという意味なら、フォームの挿入前処理のイベントプロシージャで連番フィールドに入力すればいいでしょう。
IDフィールド順で連番をふるのなら、IDが最大のレコードの連番を取得して、それに+1したものでいいですね。44だったら1にする。

Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim num As Long
    num = DLookup("連番","テーブル","ID=" & DMax("ID","テーブル"))+1
    If num >= 44 Then num = 1
    Me.連番 = Num
End Sub

IDフィールドにインデックスを設定しておけば、レコード件数が多くて遅いということはないはずです。

通報 ...
  • 6
    hatena 2021/11/06 (土) 03:24:08 修正 >> 5

    IDは連番ですが、一日に複数人おり、会社としての指示事項になるので全員同じものにする必要があります(これを書き忘れていてすみません)
    なのでIDでやると不都合がありそうです

    これに関しては、最初の質問と矛盾しています。上の回答は最初の質問に沿った回答です。

    上の回答ではまずいのなら、現状の関連するテーブル構成を提示して、そのテーブル名を使って、具体的にどのような処理をしたいのか説明してください。

    少なくとも、社員マスター、指示事項マスター、連番のあるテーブルの3つのテーブルが関連するはずです。