使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
私が想定したのとは違います。

人によっていろいろな設計法があると思いますので、これだけが正解とは限りませんが、だれが更新したかというのが重要なので、T_取組先ユーザーテーブルには 担当者ID を格納するのが合理的だと思います。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
またまた壁に当たってしまいました。
ネットで色々と調べたのですが、該当するものが見つけられなかったので
質問させて下さい。
ユーザー情報を管理するテーブル「T_取組先ユーザー」があります。
これをフォーム「F_01取組先ユーザー登録画面」にて複数名で入力してゆきます。
テーブル名:T_取組先ユーザー
フィールド名/データ型
管理ID/テキスト型(主キー)
・
・
・
最終更新日/テキスト型
最終更新担当者/テキスト型 ←ここにコンピューター名が入っています
[最終更新担当者]には、使用しているパソコンのコンピューター名を
参照して入力してコンピューター名が入力されます。
[最終更新日]には、最後に更新した日時が「2011/12/05 15:20:35」
のように入力されます。
しかし、退職などで別の担当者が同じパソコンを使った場合を
想定しなければならない事に気がつきました。
コンピューター名を変更する手が一番簡単なのですが
会社のものなので、コンピューター名を変更する事なく
DBを構築する必要があるのです。
そこで、テーブルを新規で2つ作成しました。
テーブル名:T_コンピューター
フィールド名/データ型
コンピューター名/テキスト型(主キー) ←ここにコンピューター名が入っています
・
・
・
テーブル名:T_事務局担当者
担当者ID/テキスト型(主キー)
担当者名/テキスト型
使用パソコン/テキスト型 ←ここにコンピューター名が入っています
・
・
・
入社日/日付/時刻型
退社日/日付/時刻型
ここから、どうクエリを作成したら良いのかわからなくなってきてしまいました。
「T_取組先ユーザー」のレコードを最終更新した人は誰なのか?
を「T_事務局担当者」の[入社日][退社日]を計算して担当者名を表示すれば良いのかと
思うのですが、どのようにしたらよろしいでしょうか?
そもそも、テーブルの作り方から、間違えているのでしょうか?
どなたか、ご教示頂けたらと思います。
よろしくお願い致します。
使用環境:Access2003(XP)、2010(win7)
使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
質問作成者が受け入れた回答
私が想定したのとは違います。

人によっていろいろな設計法があると思いますので、これだけが正解とは限りませんが、だれが更新したかというのが重要なので、T_取組先ユーザーテーブルには 担当者ID を格納するのが合理的だと思います。
登録用のフォーム「F_01取組先ユーザー登録画面」
に今までは、下記VBで
Private Sub Form_BeforeUpdate(Cancel As Integer)
'「登録事務局担当者」「最終更新事務局担当者」にコンピューター名を入力
'「登録日1」と「最終更新日」に作業日時を入力する
Dim tmpDateTime As Date
tmpDateTime = Now
If Me.NewRecord Then
Me.登録事務局担当者 = Environ("COMPUTERNAME")
Me.登録日1 = tmpDateTime
End If
Me.最終更新事務局担当者 = Environ("COMPUTERNAME")
Me.最終更新日 = tmpDateTime
End Sub
と入れていたのですが、このテーブルの構造にした場合
自動で「T_取組先ユーザー」に担当者IDを取得して
「担当者ID」に値を入力する方法などございますでしょうか?
前回の私の回答のデーブル名、フィールド名のままだとすると、
Private Sub Form_BeforeUpdate(Cancel As Integer)
'「登録事務局担当者」「最終更新事務局担当者」にコンピューター名を入力
'「登録日1」と「最終更新日」に作業日時を入力する
Dim tmpDateTime As Date
Dim UserID
tmpDateTime = Now
UserID = DLookup("使用担当者","T_コンピュータ","コンピュータ名='" & Environ("COMPUTERNAME") & "'")
If Me.NewRecord Then
Me.登録事務局担当者 = UserID
Me.登録日1 = tmpDateTime
End If
Me.最終更新事務局担当者 = UserID
Me.最終更新日 = tmpDateTime
End Sub
hatena19 様
どうもありがとうございます。
そうなのです「T_取組先ユーザー」の情報を
「いつ誰が登録して、いつ誰が更新したのか?」
の情報を管理したいのでhatena様のアドバイス通りに変更してみます。
そこで、もう一つご相談です。
登録用のフォーム「F_01取組先ユーザー登録画面」
に今までは、下記VBで
Private Sub Form_BeforeUpdate(Cancel As Integer)
'「登録事務局担当者」「最終更新事務局担当者」にコンピューター名を入力
'「登録日1」と「最終更新日」に作業日時を入力する
Dim tmpDateTime As Date
tmpDateTime = Now
If Me.NewRecord Then
Me.登録事務局担当者 = Environ("COMPUTERNAME")
Me.登録日1 = tmpDateTime
End If
Me.最終更新事務局担当者 = Environ("COMPUTERNAME")
Me.最終更新日 = tmpDateTime
End Sub
と入れていたのですが、このテーブルの構造にした場合
自動で「T_取組先ユーザー」に担当者IDを取得して
「担当者ID」に値を入力する方法などございますでしょうか?
手入力やリスト選択だと間違えが想定されますので
「いつ」「誰が」の部分は、自動化ができるなら
自動化したいのですが、何か方法はございますでしょうか。
度々申し訳ございませんが、ご教示頂けたら幸いです。
T_事務局担当者に使用パソコンを格納する設計はよくないと思います。退職以外にも異動とかコンピューターの故障とかで使用コンピューターが変わることはよくあることだと思います。そのような場合、T_事務局担当者 テーブルだけでは対応できません。(現状の設計だと在職中は一つのコンピュータしか使用できません。)
T_コンピューターに、コンピューター名以外に 担当者ID も格納しておくのがシンプルだと思います。これで、コンピュータと使用者の対応が決定できますので。また、T_取組先ユーザー テーブルにはコンピューター名を格納するのではなく、担当者ID を格納するようします。
で、退職や異動、コンピューターの故障などでコンピュータの使用者が変わったときに、T_コンピューターの担当者IDも更新するようにすればいいでょう。そうすれば、担当者の入社日や退社日を考慮する必要はありません。
で、入力フォーム「F_01取組先ユーザー登録画面」での更新前処理で、DLookupで"コンピューター名から担当者IDを取得して代入すればシンプルにできます。
Me.担当者ID=DLookup("担当者ID","T_コンピューター", "コンピューター名='" & ComputerName & "'")