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

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

Accessで違う条件で異なる処理

Access作成中に行き詰りましたのでどうか助けてください。 業務管理テーブルという名のテーブルに A管理番号 受注順に番号をとっていきたいです B管理番号 受注順に番号をとっていきたいです C管理番号 受注順に番号をとっていきたいです A点検 チェックボックス B点検 チェックボックス C点検 チェックボックス という項目があります。 業務管理テーブルを元にフォームを作成し、そのフォーム画面でAにチェックを入れて画面を閉じると、A管理番号に1が足されるようにしたいです。1が足されるというのは、例えばA管理番号の数字が最初201900でAにチェックを入れ終了したら数字が201901になるようにしたいです。この時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業界とは縁もゆかりもないど素人の考え。適当に読み流してください。

関連するQ&A

  • 【Access】区分別の採番方法

    A、B、C区分別の採番方法について なるべくシンプルな方法で出来る方法がありましたらお教えください。 何度かACCESSも作成していますが、初心者に近いので、簡単な方法だと ありがたいです。 今業務管理テーブルと区分マスタテーブルと二つのテーブルがあります。 業務管理テーブルには 【業務管理番号】【A受注番号】【B受注番号】【C受注番号】【区分】【機器名】 【001】【19000】【-】【-】【A】【SIMULATOR】 【002】【-】【-】【19000】【C】【GENERATOR】 【003】【-】【-】【19001】【C】【SIMULATOR】 【004】【19001】【-】【-】【A】【SIMULATOR】 【005】【-】【19000】【-】【B】【AMPLIFIER】 【006】【-】【19001】【-】【B】【AMPLIFIER】 区分テーブルには 【区分コード】【区分名称】 【A】【簡易点検】 【B】【精密点検】 【C】【修理】 業務管理番号は1業務ごと連番で番号を採っています。 A/B/C受注番号は各区分ごとに番号を採ります。 区分はA/B/Cのどれかです。 機器名は点検・修理の対象となる機器名が入ります。 上段の業務管理テーブルを元に入力フォームを作成し、そのフォームから区分Aを入力して登録した時に業務管理テーブルのA受注番号に1が足されるようにしたいです。区分は一つのみしか選択しません。 よろしくお願い致します。

  • Accessでサブフォームに任意の番号をつけるには

    お世話になっております。 アクセスで苦戦しております。ご教授願います。 業務管理で、得意先からの受注から請求書作成までをつくりたいのですが、納品した項目を顧客ごとに1ヶ月単位でまとめて請求をかけるとやりたいと思っています。 そのときに納品内容に請求番号と同じ番号を振りたいのですが、うまくいきません。 納品テーブル 受注ID 顧客名 内容    納品日  1   A社 テスト     5/1  2   B社 サンプル    5/3  3   A社 テスト2    5/2  4   B社 サンプル2   5/4 納品テーブルのデータを顧客名で抽出し、請求フォームのサブフォームに表示 請求フォーム 請求番号 0001   A社  5月度請求 ーーーーーーー以下サブフォームーーーーーーーー 受注ID 顧客名 内容   納品日  請求番号  1   A社 テスト    5/1 0001  3   A社 テスト2   5/2 0001 ーーーーーーーーーーーーーーーーーーーーーーー と、したい場合はどのようにすればよいのでしょうか。 説明が下手なので、補足があればいたします。 どうかよろしくお願いいたします。

  • アクセスで値を参照したい

    Win2000,Access2000を使用しています。 AB二つのテーブルに「仮番号」というフィールドがあり、同じ「仮番号」のレコードに同じ「伝票番号」をつけたいんです。 Aテーブル(お客様情報) Bテーブル(注文履歴) Aテーブルの「伝票番号」フィールドに番号を入力したら、BテーブルのAと同じ「仮番号」のレコードの「伝票番号」フィールドに番号が入力されるようにしたいのですが、どのようにVBまたは、フォーム上のテキストボックスのプロパティで組んだらよいのかわかりません。 Bテーブルには、過去の注文データもあるのですでに入力されているレコードには過去に受注した時の伝票番号入力されています。 新規入力したレコードに対してだけAと同じ伝票番号をつけたいのです。 Bテーブルで、         |商品名|価格  |伝票番号| 過去の受注データ|電卓 |¥500|1000  | 今回の受注データ|名刺 |¥800|2500  | と、こんな感じにしたいんですが うまく説明できず申し訳ありませんが、どうぞよろしくお願い致します。

  • Access97で自動入力と反映が違うテーブルの場合

    こんにちは、前の質問などでフォームへの自動入力は何とかできるようになったのですが、今度はその入力したデータを他のテーブルBに反映させたいのですが、どうしたら良いのでしょうか? テーブルA 店舗コード 店舗名 ※テーブルAの管理者は私ではなく、ネットワークで私のPCと「テーブルのリンク」でつながっています。 テーブルB 店舗コード 店舗名 商品番号 他に店の情報フィールドをいくつか作成 フォームC 店舗コード 店舗名 商品番号 他に店の情報テキストボックスをいくつか作成 フォームCで、店舗コードを入力したら店舗名が自動的に入力される方法は、フォームCのレコードソースをテーブルAにして、店舗コードの更新後処理をイベントプロシージャにして、下記イベントコードを設定しました。 Private Sub 店舗コード_AfterUpdate() Me![店舗名]=DLookup("店舗名","テーブルA","店舗コード=" & Me![店舗コード] & " ") End Sub そして、フォームの残りのテキストボックスに、店と商品に関するデータを入力し、入力した全てのデータをテーブルBに反映させたいのですが、どうしたら良いのでしょうか? 自動入力の方法でDLookupを使用したのがいけなかったのでしょうか? また、できればテーブルBは商品番号順に並びかえられているのですが、入力したら商品番号のリストの一番下に挿入されるという形にしたいのです。 どうかよろしくお願いします。

  • Access2007で。

    Access2007で。 今Access2007を使ってちょっとしたシステムを開発してるのですが、フォーム内のテキストボックスに入力した文字列と、テーブル内のデータを参照する事ってできるのでしょうか? 例えば テーブルA、フォームBとして テーブルAには 問題番号 問題文 答え 上記のフィールドがあり、 フォームB内の解答テキストボックスと、テーブルAの答えフィールド内データを参照し、 同じデータがあった場合はフォームCを開き、データがなかった場合はフォームDを開く。 このような形にしたいのですができるのでしょうか? 無知な質問で恐縮ですが、ご教授ください。

  • Access サブフォームにフィルターをかけるには

    Access初心者です、教えてください。 AのテーブルにIDと名前、BのテーブルにIDと電話番号と管理番号と業種があります。 メインフォームのテキストボックスでAのテーブルからあいまい検索で電話番号を検索、検索結果のIDでBテーブルのサブフォームにフィルターを掛けたいのですが、 どのようにしたらいいのでしょうか?

  • ACCESS2007 クエリの抽出条件について教えてください

    ACCESS2007で、ルックアップ列(コンボボックス)を使用したテーブルがあります。そのテーブルをクエリにて、コンボボックスの条件別に抽出させたいのですが、その抽出条件を教えていただけませんでしょうか。 コンボボックスリストの中身(A,B,C)       A→Aのみ抽出したクエリ       B→Bのみ抽出したクエリ       C→Cのみ抽出したクエリ という風に作成したいのですが。 お忙しいところ申し訳ありません。よろしくお願いします。

  • Access2002:帳票形式のフォーム内に明細を表示させたい

    下記の様なテーブルがあります。 テーブル名:T_明細 +----------------------------------------------+ ID   受注番号   名称   数量   発注先 +----------------------------------------------+ 1   1      りんご   1   A商店 2   1      ぶどう   3   A商店 3   2      みかん   2   A商店 3   2      キウイ   2   A商店 4   2      桃     1   Bショップ 5   3      メロン   3   A商店 6   3      バナナ   2   Cストア +----------------------------------------------+ このテーブルの情報を下記の様なフォームを作成し 表示しようとしています。 フォーム名:F_発注処理(受注番号単位で開かれます)※帳票形式にて表示 ■受注番号1 で開いた場合 ------------------------------- A商店      発注明細       りんご   1       ぶどう   3 ------------------------------- ■受注番号2 で開いた場合 ------------------------------- A商店      発注明細         みかん   2         キウイ   2 ------------------------------- Bショップ   発注明細       桃   1 ------------------------------- ■受注番号3 で開いた場合 ------------------------------- A商店      発注明細       メロン   3 ------------------------------- Cストア      発注明細       バナナ   2 ------------------------------- Accessの仕様で、帳票形式のフォーム内にサブフォームを設置できないのは、知っています。 また、別の方法で「発注明細」部分をリストボックスにし 親レコード毎に、Rowsourceの値を変更するような仕組みにしてみましたが これも上手くいきませんでした。(元々こういう使い方は出来ないのでしょうか・・・) 参考:Form Loadイベントに    Me.明細.RowSource = "SELECT 名称,数量 FROM T_明細 WHERE 受注番号 = " & Me.受注番号 & " and .発注先 = '" & Me.発注先 & "';" 要は、 1.受注番号毎に、F_発注処理フォームは開かれる 2.発注先毎に帳票表示し、各発注先毎に明細を表示 という条件を満たしたいのですが、良い方法が思いつきません。 どなたかご助言頂けませんでしょうか。宜しく御願い致します。

  • VBAでのプログラム

    AccessにてExcelのファイルをインポートしてA,B,C・・・ という複数のテーブルを作成しました。でそのテーブルからA-1,A-2,B-1,B-2・・・というクエリを作成し、それからオートフォームで個別に表示できるフォームをそれぞれ作成しました。 ここからが質問なのですが、上記のファイルをフォームを 作成して検索できるようにしたいと思い、フォームは作成できたのですが、それに対応するアクションのプログラム がわからないのでご存知でしたら教えてください。 まず2つのチェックボックスで*-1,*-2とクエリ、フォームを選択し、コンボボックスでA,B,C・・・を選択して、コマンドボックスでボタンをクリックすると希望どおりのクエリかフォームが表示されるといった具合です。 かなりわかりづらいと思いますが、補足をさせて頂きますのでよろしくお願いします。

  • Access チェックボックスを利用した絞込検索のクエリ記述

    ここ数日、試行錯誤やgoogle検索したのですが、分からないためヒントを下さい。 Accessで、チェックボックス(Yes/No)を含むテーブルがあります。 検索フォームを作成し、ここにチェックを入れることで、テーブルから一致するデータを抽出したいです。 ただし、「Yes」のみが有意なデータで、「No」は無視したいです。    チェックA チェックB チェックC 1    Yes    No     No 2    Yes    Yes    No 3    Yes    Yes    Yes (得たい結果) チェックAをYesで検索…1,2,3 チェックA+BをYesで検索…1,2 チェックA+B+CをYesで検索…3 単に検索フォームのチェックボックスの値を「抽出条件」に入れますと、「No」まで一致するように抽出するので意図と違います。 チェックを入れなかった項目については無視して、クエリを働かせられればよいのですが...。 どのようにクエリを記述したらよいのでしょうか。 フォームにあるチェックボックスからのデータの取得や抽出結果のフォームへの表示などはできています。 よろしくお願いいたします。

専門家に質問してみよう