次の方法で共有

Access 日付を元にして入力担当者を判別する方法

Anonymous
2011-12-07T05:03:58+00:00

またまた壁に当たってしまいました。

ネットで色々と調べたのですが、該当するものが見つけられなかったので

質問させて下さい。

ユーザー情報を管理するテーブル「T_取組先ユーザー」があります。

これをフォーム「F_01取組先ユーザー登録画面」にて複数名で入力してゆきます。

テーブル名:T_取組先ユーザー

フィールド名/データ型

管理ID/テキスト型(主キー)

最終更新日/テキスト型

最終更新担当者/テキスト型 ←ここにコンピューター名が入っています

[最終更新担当者]には、使用しているパソコンのコンピューター名を

参照して入力してコンピューター名が入力されます。

[最終更新日]には、最後に更新した日時が「2011/12/05 15:20:35」

のように入力されます。

しかし、退職などで別の担当者が同じパソコンを使った場合を

想定しなければならない事に気がつきました。

コンピューター名を変更する手が一番簡単なのですが

会社のものなので、コンピューター名を変更する事なく

DBを構築する必要があるのです。

そこで、テーブルを新規で2つ作成しました。

テーブル名:T_コンピューター

フィールド名/データ型

コンピューター名/テキスト型(主キー) ←ここにコンピューター名が入っています

テーブル名:T_事務局担当者

担当者ID/テキスト型(主キー)

担当者名/テキスト型

使用パソコン/テキスト型 ←ここにコンピューター名が入っています

入社日/日付/時刻型

退社日/日付/時刻型

ここから、どうクエリを作成したら良いのかわからなくなってきてしまいました。

「T_取組先ユーザー」のレコードを最終更新した人は誰なのか?

を「T_事務局担当者」の[入社日][退社日]を計算して担当者名を表示すれば良いのかと

思うのですが、どのようにしたらよろしいでしょうか?

そもそも、テーブルの作り方から、間違えているのでしょうか?

どなたか、ご教示頂けたらと思います。

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

使用環境:Access2003(XP)、2010(win7)

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-12-08T11:22:52+00:00

私が想定したのとは違います。

人によっていろいろな設計法があると思いますので、これだけが正解とは限りませんが、だれが更新したかというのが重要なので、T_取組先ユーザーテーブルには 担当者ID を格納するのが合理的だと思います。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

7 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-12-09T08:13:43+00:00

    登録用のフォーム「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

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-12-09T05:53:23+00:00

    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」に値を入力する方法などございますでしょうか?

    手入力やリスト選択だと間違えが想定されますので

    「いつ」「誰が」の部分は、自動化ができるなら

    自動化したいのですが、何か方法はございますでしょうか。

    度々申し訳ございませんが、ご教示頂けたら幸いです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2011-12-08T08:46:52+00:00

    hatena19

    いつもお世話になっております。

    http://s2.gazo.cc/up/s2_1376.jpg

    テーブルの構成を変えてみたのですが

    これでよいのでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2011-12-07T11:08:16+00:00

    T_事務局担当者に使用パソコンを格納する設計はよくないと思います。退職以外にも異動とかコンピューターの故障とかで使用コンピューターが変わることはよくあることだと思います。そのような場合、T_事務局担当者 テーブルだけでは対応できません。(現状の設計だと在職中は一つのコンピュータしか使用できません。)

    T_コンピューターに、コンピューター名以外に 担当者ID も格納しておくのがシンプルだと思います。これで、コンピュータと使用者の対応が決定できますので。また、T_取組先ユーザー テーブルにはコンピューター名を格納するのではなく、担当者ID を格納するようします。

    で、退職や異動、コンピューターの故障などでコンピュータの使用者が変わったときに、T_コンピューターの担当者IDも更新するようにすればいいでょう。そうすれば、担当者の入社日や退社日を考慮する必要はありません。

    で、入力フォーム「F_01取組先ユーザー登録画面」での更新前処理で、DLookupで"コンピューター名から担当者IDを取得して代入すればシンプルにできます。

    Me.担当者ID=DLookup("担当者ID","T_コンピューター", "コンピューター名='" & ComputerName & "'")

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません