電子書籍の厳選無料作品が豊富!

Accessで作成したフォームに不特定のコピーを防止するための制限をかけたいのですが可能でしょうか。
任意のWindowsユーザー名のみ起動可能にできれば最も望ましいのですが。

A 回答 (5件)

お待たせしました。



エラー検証が出来ましたので、再度…

マクロの「プロシージャの実行」で指定できる関数は、Function関数のみでした。スミマセン。
したがって、この部分を書き直してください。
Public Sub sub起動チェック()
    ↓
Public Function sub起動チェック()
これで実行できます。

試しに、このモジュールとマクロを組み込んだMDBを作成しエクスフローラから実行してみました。
「db1.mdbが見つかりません。パスおよびファイル名が正しいか~確認してください」というメッセージが出ますが、これは起動直後にあっという間に終了させたため表示されるメッセージです。

終了させる時にメッセージを表示させればこのエラーは出なくなります。
  ↓修正バージョン
Function sub起動チェック()
 If Environ("USERNAME") <> "vaio" Then
  MsgBox "使用できない旨のメッセージ", vbOKOnly + vbExclamation
  DoCmd.Quit acQuitSaveNone
 End If
End Function
    • good
    • 0
この回答へのお礼

おかげさまで無事できました。
丁寧な解説で最後までおつきあいいただき本当にありがとうございました。

お手数をおかけいたしました。

お礼日時:2006/02/10 17:48

>を貼り付けてみたのですが、普通に起動しダメみたいです。


貼り付けただけではダメですよ(汗;

この関数をmdbを読み込んだ時に実行するよう仕掛けが必要です。

例えば、マクロを新規作成し、以下のように記述します。
・アクション:プロシージャの実行
 プロシージャ名:sub起動チェック()
と記述し、AutoExecという名前で保存します。
こうすると、mdbを開いた時に AutoExec マクロが自動実行され記述されているアクション(この場合はsub起動チェック())が実行されます。

マクロを保存したら一旦Accessを終了させ、再度mdbを開くと思い通りに動くと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます

丁寧な解説助かります。
マクロを実行すると
「Access が見つけることができない関数名が含まれています」とメッセージが出ます。

式ビルダでみると、作ったプロシージャでは下段の3つのウインドウの右端になにもでてきません。

すみません。とんちんかんなことをいっているでしょうか・・
ちなみにAccess 2000です

お礼日時:2006/02/09 22:46

s_husky です。



具体的なコードを見るとガッカリしますよ!

次の3行を某関数に仕組むだけです。

If Not FileExists("C:\Windows\Client.dll") Then
  Application.Quit
End If

Startupのコードは1行です。

FileWrite "C:\Windows\Client.dll", "んlffklfんkl;kl;"

*******************************************************************************

Public Function FileExists(ByVal FileName As String) As Boolean
  Dim fso As FileSystemObject

  Set fso = New FileSystemObject
  FileExists = fso.FileExists(FileName)
End Function

Public Function FileWrite(ByVal FileName As String, _
                ByVal Text As String) As Boolean
On Error GoTo Err_FileWrite
  Dim fso As FileSystemObject
  Dim txs As TextStream

  Set fso = New FileSystemObject
  Set txs = fso.CreateTextFile(FileName, True)
  txs.Write Text
  FileWrite = True
Exit_FileWrite:
  Exit Function
Err_FileWrite:
  MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"
  Resume Exit_FileWrite
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます

難しいですね。
コードはさっぱりです。

お礼日時:2006/02/10 09:42

No1さんの回答が基本です。


ですから、これは、読み流してもらって結構です。

1、MDEファイルに変換する。

・これで、事実上、フォームのコピーは無意味になります。

2、他のPCでの使用を禁止する。

大概のフォームで使っている関数の一つにコピーを感知して終了する仕掛けを施す。

・Windwosフォルダーに Client.dll などのさも在りそうなファイルを仕込む。
・一つの関数でClient.dllの有無を調べて、無ければ終了する。
・MDEにしておれば、この仕組みは解析不能です。

※Startup.exe を用意してClient.dll を忍ばせる訳ですが、結構、ばれません!
    • good
    • 0
この回答へのお礼

ありがとうございます。
おもしろい方法ですね。

ぜひ試してみたいのですが、具体的なコードをお教え願えないでしょうか?

お礼日時:2006/02/09 15:11

mdbファイルのコピーを制限するのは難しいと思います。



mdb自体にパスワードを設定して、パスワードを知っている人だけ使えるようにすることは出来ます。

特定のログオンユーザーでだけ実行できるようにするのは、
環境変数 USERNAME の内容を調べ、特定の文字列(ユーザー名)と一致しなかったら終了するというプロシージャを起動モジュールとして指定すれば、望ましい形になるのではないでしょうか?

Public Sub sub起動チェック()
 If Environ("USERNAME") <> "ここに任意のユーザー名を記述" Then
  ' 複数のユーザー名を指定したい場合は Or を使用する。
  DoCmd.Quit acQuitSaveNone
 Endif
End Sub

ただ、Shiftを押しながら起動させると、起動時の設定で指定された部分は無視されるので、完璧ではありません。
    • good
    • 0
この回答へのお礼

ユーザー名が vaio のパソコンで、Option Compare Database の下の行に

Public Sub sub起動チェック()
 If Environ("USERNAME") <> "vaio" Then
  DoCmd.Quit acQuitSaveNone
 Endif
End Sub

を貼り付けてみたのですが、普通に起動しダメみたいです。

追加アドバイスをいただけるとうれしいのですが

お礼日時:2006/02/09 15:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!