• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessで違う条件で異なる処理)

Accessで運用管理テーブルの番号を更新する方法

このQ&Aのポイント
  • Accessの業務管理テーブルで、A管理番号にチェックを入れると、番号が自動的に更新される方法を教えてください。
  • 業務管理テーブルにはA点検、B点検、C点検という項目がありますが、A管理番号のみを更新したいです。
  • A管理番号の初期値が201900で、Aにチェックを入れるたびに1ずつ増えるようにしたいです。BとCの番号は変更されてはいけません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

【まだバグがあるかも】  念の為に1996~2000年に書いたコードを確認すると、次のようになっている。で、よくよくコードを精査すると cnnの出番はない。あっても動作はするだろうが、無駄な宣言は、バグの一種。そこんとこは、質問者で修正テストして欲しい。   Dim isOK    AS Boolean   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1   Dim lngNumber  As Long   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field     Set rst = New ADODB.Recordset   With rst     .Open strSQL, _        CurrentProject.Connection, _

その他の回答 (4)

回答No.4

【バグ発見】DIM文中の lngNunber は不要!  関数内で、リナンバー初期値を取得するというアイデアで書き始め、「いやいや、コールする時に指示できる方が断然よい!」と考えを改めた。その痕跡が、このバグ。今宵は、酒量も大分多い。許されたし。

回答No.3

【補足】いちゃもんを付けるだけの回答では不満だろうから・・・ 《一番簡単な解決方法》 A管理番号付与ルール:何もなし。  というのであれば、入力が済んだら[管理番号付与フォーム]を呼び出す。 理由:一斉入力でユーザーがレ点を誤って付けることもある。   :また、レ点を消したり付けたりすることも考えられる。   :この問題に対応するには、常にリナンバーするしかない。   :で、7日を経過した入力データの訂正は不可とする。   :Yes/No型の列[管理番号ロック]を設けるという手もある。 《管理番号リナンバーを可能にするテーブル要件》 要件:業務管理テーブルに主キー列[ID]が存在すること。    ・出来れば、オートナンバーではなくて採番した方がよい。    ・でないと、データベースが壊れた時の復旧が滅茶困難。 【管理番号付与フォームに書くべきコード】  管理番号付与フォームは、管理番号A、B、Cの3つを管理するそれにする手もある。が、それは横において、 1、リナンバー対象のデータを呼び出すSQL分を生成する。   ・主キー[ID]は、データを入力順に呼び出す上で不可欠。   ・単に呼び出しても、入力順であることは保証されない。 2、ADODBでSQL文に相当するレコードセットを呼び出しリナンバーする。 というのが一般的だと思う。  以下は、70歳になった爺が晩酌しながら23年振りに書いた VBA コード。必ず、1行1行を精査して欲しい。strSQLは、リナンバー対象のデータを呼び出すSQL分。lngNumberは、リナンバーの最初の値を指示する引数。エラーなく1件以上リナンバーした時は、True を戻す予定である。 Private Function NumberUpdate(ByVal strSQL As String, _                ByVal lngNumber As Long) As Boolean On Error GoTo Err_NumberUpdate   Dim isOK    AS Boolean   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1   Dim lngNumber  As Long   Dim cnn     As ADODB.Connection   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field     Set cnn = CurrentProject.Connection   Set rst = New ADODB.Recordset   With rst     .Open strSQL, _        CurrentProject.Connection, _        adOpenForwardOnly, _        aadLockPessimistic     If Not .BOF Then       N = .RecordCount - 1       .MoveFirst       For R = 0 To N         .Fields("A管理番号") = lngNumber + 1         lngNumber = lngNumber + 1         .MoveNext       Next R     Else       isOK = True     End If   End With Exit_NumberUpdate: On Error Resume Next   rst.Close   Set rst = Nothing   NumberUpdate = Not isOK   Exit Function Err_NumberUpdate:   isOK = True   MsgBox "SQL 文の実行時にエラーが発生しました。(NumberUpdate)" & Chr(13) & Chr(13) & _       "・Err.Description=" & Err.Description & Chr(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_NumberUpdate End Function

回答No.2

【補足】管理番号=入力順ってのは大いに疑問。  だって、管理番号って、管理の為に付与する番号。その付与には、それなりのルールがあるのでは?そういう意味での《XXX番号の管理》フォーム。  それと、入力は、一件だけではなくて連続して入力する筈。だから、入力データには、万全なそれもあるし、登録に適さないそれも発生する筈、だから、連続入力して閉じたら、《入力データ精査プログラム》が走って、 >3件の不適な入力を発見しました。 >以下のデータは登録されていせん。 > >【不適なデータ】 > > XXXXXXXX > XXXXXXXX > XXXXXXXX などの表示を行うと思う。で、この場合に、どうやって《XXXX管理番号》を自動付与するのか?  と、色々と検討すべきことは多いと思うが・・・。

回答No.1

Q、Aにチェック有りで閉じるとA管理番号をカウントアップする方法。 A、それは、極めて初歩的なコードを書けば済むこと。だが・・・  なぜ、そんなことをする必要があるのかな? ・A管理番号が主キーであれば、《採番テーブル》が《採番関数》の出番。  でも、その場合、フォーム上に[主キー]も表示しておくのが一般的。  で、データの新規追加の発生したタイミングで表示もカウントアップ。 ・A管理番号が主キーではなくて、いわゆる生産管理番号だとする。  この場合には、フォーム上に表示する必要はない。  また、入力フォームを閉じた時に、生産管理番号を更新するのも拙い。  【トップメニュー】に配置した、《生産番号管理フォーム》をクリック。  で、一斉に新生産番号を付与する。  まあ、IT業界とは縁もゆかりもないど素人の考え。適当に読み流してください。