ここから本文です

accessの番号自動入力で質問です。 accessを前担当者から引継ぎした素人です。

umi********さん

2018/4/2721:52:06

accessの番号自動入力で質問です。
accessを前担当者から引継ぎした素人です。

変更したい部分の機能を検索してコピペなどを繰り返していくうちに、本当になんとなくですがBVAがどんなものなのか、書けないけど読めるような気がするレベルです。


テーブル(T_振分)にエリア番号があり、フォーム上で担当者番号を入力すると管理番号が自動的に入力されるように作りたいです。
同じエリア番号内に同じ担当者番号を入力すると同じ管理番号になる。
また同じエリア番号に別々の担当者番号を入力すると管理番号も別々になる。
担当者番号が別のエリア番号に入力されても別の管理番号になる。

エリア番号 担当者番号 管理番号
1______ 001___ 1
1 ______001___ 1
1
2 ______002___ 2
2 ______003___ 3
2______ 002___ 2
2 ______001 ___4


IIF担当者番号とエリア番号が同じなら、
Countを使うのかなと思うのですが、、、、

すみませんが、ご教授お願い致します。

閲覧数:
62
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nor********さん

2018/4/2808:14:07

同時にそのデータベースファイルにアクセスするのが一人と限定がされるならDMAX関数などが使用できるかと思います。
ただファイルサーバーなどで共有して使う場合は同時に複数のユーザーが違う組合せを入力した時に管理番号が被る可能性があります。
その場合はエラーをひろって対応する必要が出てくるので処理が面倒になります。

実際に動作させたい環境を教えてください。

  • 質問者

    umi********さん

    2018/4/2808:54:29

    ご返信ありがとうございます。

    現在の環境はaccessデータベースを使ってリンクテーブルにしています。本当におっしゃるとおりでして、複数人数で共有して使っていて管理番号が被らないようにしたいです。

    何卒よろしくお願い致します。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

zee********さん

2018/4/2810:02:25

下記のようなことがやりたいということでしょうか。

IIF(Dcount("*","T_振分","エリア番号=" & エリア番号入力 & " and 担当者番号=" & 担当者番号入力)>0,DlookUp("管理番号","T_振分","エリア番号=" & エリア番号入力 & " and 担当者番号=" & 担当者番号入力),Nz(Dmax('管理番号','T_振分'),0)+1)

Dcountによって、エリア番号と担当者番号が一致するものがT_振分に見つかれば、DlookUpによって、管理番号を読み出し、見つからなければ、Dmax+1とすることで、新しい管理番号となります。

エリア番号入力 と 担当者番号入力 は実際のフォーム内にあるフィールド名を入力してください。

nor********さんのおっしゃられている内容は、ここでのDmax+1による発番についてです。

この方法での利用は、非連結フォームであることが前提となるため、発番されても発番されたデータは登録されていません。
同じタイミングで、別の方が同じ処理を行おうとされた際に、Dmax+1による発番が同じ数値になってしまう場合があるということです。

もし複数人での利用が想定されるのであれば、エラーによる処理でも構いませんが、下記のように未登録時には事前にデータ登録を行ったうえで、管理番号が払い出されるようにする必要があるとお考え下さい。

エリア番号入力と担当者番号入植の入力枠にそれぞれの数値を入力の上、コマンド1ボタンをクリックした場合に「管理番号表示」という非連結フィールドに管理番号が表示されるプロシージャの例です。
入力内容に関するエラー処理(入力枠に文字列が入力された場合など)は個別で行ってください。



Private Sub コマンド1_Click()

If Nz(DCount("*", "T_振分", "エリア番号=" & エリア番号入力 & " and 担当者番号='" & 担当者番号入力 & "'"), 0) = 0 Then
'事前登録処理
DoCmd.RunSQL "Insert Into T_振分(管理番号,エリア番号,担当者番号)" _
& "Values(Nz(Dmax('管理番号','T_振分'),0)+1,エリア番号入力,担当者番号入力);"
Requery
End If

管理番号表示 = DLookup("管理番号", "T_振分", "エリア番号=" & エリア番号 & " and 担当者番号='" & 担当者番号 & "'")

End Sub


事前登録をSQLにしていますので、管理番号がオートナンバーであるなら、SQL文の管理番号の部分を以下のように削除してください。

DoCmd.RunSQL "Insert Into T_振分(エリア番号,担当者番号)" _
& "Values(エリア番号入力,担当者番号入力);"

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる