次の方法で共有

Accessで IPアドレスの自動取得

Anonymous
2011-11-10T08:04:44+00:00

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

複数台のパソコンでExcelファイルを共有して作業をしておりますが、

オペレーションミスで、重要な情報を上書きしてしまったり、

誰がいつ入力したのかなど・・・。作業ミスを防ぐ為にAccessにしようと

DBを組んでおります。

その際に、テーブルのフィールドにIPアドレスを自動で取得して

誰が作業したのかわかるようにしたいのですが

http://okwave.jp/qa/q4990218.html などを読んでも

やり方がよくわかりません。

コンピューター名の取得でも良いと思うのですが

とにかく、作業者が特定できればと思います。

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

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

環境 Access2003(XP)とAccess2010(Win7)

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

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

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

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

Anonymous
2011-11-11T03:39:17+00:00

MukkuMuku様

取り急ぎ、

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim tmpDateTime As Date

    tmpDateTime = Now

    If Me.NewRecord Then

        Me.Author = Environ("COMPUTERNAME")

        Me.CreatedDate_Time = tmpDateTime

    End If

    Me.Editor = Environ("COMPUTERNAME")

    Me.ModifiedDate_Time = tmpDateTime

End Sub

としてみたら動きました!!!

MukkuMuku様、本当にいつもどうもありがとうございす!!!

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

3 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

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

Anonymous
2011-11-10T13:30:43+00:00

MukkuMukuです。

簡易な方法としてフォームのイベントで制御します。

このようなテーブルに対し、

フォームを用意。

で、フォームの更新前処理/BeforeUpdateイベントで値を代入。

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Dim tmpDateTime As Date

    tmpDateTime = Now

    If Me.NewRecord Then

        Me.Author = Environ("COMPUTERNAME")

        Me.CreatedDateTime = tmpDateTime

    End If

    Me.Editor = Environ("COMPUTERNAME")

    Me.ModifiedDateTime = tmpDateTime

End Sub

form.NewRecordプロパティで新規レコードなのかどうかを判断してます。

なので、新規登録時にはすべてに、更新時にはEditorとModifiedDateTimeだけ。

フィールドと代入する値のアレンジはお好みで。

a2010だけだったら、TempVarやデータマクロを使った実装が可能です。

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

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

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-11-11T02:24:05+00:00

    MukkuMuku様

    ご回答どうもありがとうございます!

    テーブル1

    ID(オートナンバー&主キー)

    Data1(数値型)

    Author(テキスト型)

    CreatedDate Time(日付/時刻型)

    Editor(テキスト型)

    ModifiedDate Time(日付/時刻型)

    と作成してみたのですが、コンパイルエラー 

    メソッドまたはメンバがみつかりません (Error 461)

    となり

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    が黄色で

    .CreatedDateTime =

    が選択された状態になってしまいます。

    どうしたらよいのでしょうか。。。

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

    0 件のコメント コメントはありません
  2. Anonymous
    2011-11-10T10:33:45+00:00

    MukkuMuku

    MukkuMuku様いつも本当にどうもありがとうございます!

    >PC割り当てられるにIPアドレスってひとつとは限らないし、変わってしまうこともありますよね。

    確かにおっしゃる通りですね。

    書き込み後、色々と調べていたらWin32APIとかWMが出てきましたが

    訳がわからず困っておりました。

    コンピュータ名とかIユーザ名で対応したいと思います。

    フォームで入力する場合、レコードに更新があった時に、コンピュータ名をテーブルに

    入力するのには、

    Environ("COMPUTERNAME")

    をどこに書き込めばよろしいでしょうか?

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

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

    0 件のコメント コメントはありません
  3. Anonymous
    2011-11-10T09:45:00+00:00

    こんばんは。MukkuMukuです。

    主題として、

    VBAでIPアドレスを取得したいということなのか、

    取得できたIPアドレスをどののようにしてテーブルに収めるということなのか、

    と、いうこともありますがちょっとおいといて。

    PC割り当てられるにIPアドレスってひとつとは限らないし、変わってしまうこともありますよね。そう考えるとログに残すべき情報として適さない場合があるのでは?また、取得の方法としてはWin32APIとかWMIやWSHとかで取得はできますけど、どれを選択するかはコードを書く人次第でしょう。

    で、思うに、

    Environ("COMPUTERNAME")

    Environ("USERNAME")

    でコンピュータ名とユーザ名がVBA関数で取得できるからこっち使った方が難しくないかなと思います。

    要件を満たしそうな気がしますがどうでしょう。

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

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