ママのスキンケアのお悩みにおすすめアイテム

WIN XP、ACCESS2000で顧客管理のDBを使用しています。
プリンターなどの関係もあり アクセスは現在一台のパソコンを複数で使用しています。
複数の使用者(一度にアクセスを使うことはない)がDB起動時にパスワードを入力しないとDBに入ることが出来ないようにしたいのですができますでしょうか?
(ツール⇒セキュリティー⇒ユーザーの設定はしました)

また「誰がいつDBを開いたか」「DB書き込んだ人は誰か」などログのようなものの表示や設定などもできるのでしょうか?

教えてください。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

以前に自分も貴方の言われる事を100%実現出来ました。



1、パスワードについてはロジックを自分で組むより
回答No2のやり方でフォーム単位とかテーブル単位
とかで十分なセキュリティーの管理が出来ました。

2、ログについては自前でプログラムするしか方法はありませんでした。
サンプルとして以下はその時のソースです。
D!MSG = "閉じる"と固定になっていますが
この所を工夫すれば好きな記録が残せます。

Public Function LOG_WRITE()
Dim ACT_FORM As String
Dim DB As DATABASE, D As Recordset
Set DB = CurrentDb()
Set D = DB.OpenRecordset("ログ")
ACT_FORM = Screen.ActiveForm.Name
D.AddNew
D!日 = Date$
D!時間 = Time$()
D!アプリケーション = ACT_FORM
D!利用者 = CurrentUser()
D!MSG = "閉じる"
D.Update
End Function
    • good
    • 0

>ユーザーID及びパスワードのウィンドウは表示されませんでした。


>この部分は別の設定が必要なのでしょうか?
説明不足ですいません。m(__)m
ユーザーIDでチェックされるのはPCを立ち上げる時にユーザーを選択して立ち上げる場合でPCのパーソナルユーザーをチェックしています。LANで使用する場合とか誰が立ち上げたPCなのかというチェックです。
使用する個人ごとにPCを立ち上げてAccessを使用する場合などです。特にそのような運用をしていないのであれば必要ありません。データベースパスワードでの運用となります。下記に個別のIDの代用も含めて書きます。

>「ID等を保存するテーブルを作って・・・」というのは
>同じDB内にテーブルを作るのでしょうか
誰が書き込んだかなどのLogをPC内に取るには最低VBが必要になります。
しかし簡単にやるにはAccess内でテーブルを作りLogのように追加保存していくようにすれば出来ます。
まずIDとパスワードを保存するテーブルとLogテーブルを作ります。
Accessを起動するときにIDとパスワードを入力するフォームを作り起動時に最初にそのフォームを開くように起動時の設定をします。
パスワードのフォームに入力されたIDとパスワードがパスワードのテーブルのレコードと合っているか確認しOKならテーブル等を使えるようにしNGならAccessを終了するようにマクロでも組めば良いと思います。後は各テーブルにIDとシステム日付を保存するフィールドを追加します。
入力されたIDをLogテーブルにPCのシステム日付と一緒に追加保存すれば「いつ」「誰が」という項目はテーブルに保存できます。そのIDを変数に代入するかパスワードのフォームを最小化しておけばそれからIDを取得できるのでテーブルに書き込む様な処理はフォームを使って処理しデータと共にテーブルにIDとシステム日付を保存するようにすればLogテーブルと書き込まれたテーブルのIDとシステム日付フィールドを参照して何が書き込まれたか検索できるようになります。この場合テーブルからレコードを削除すると何を削除したかは判りませんが。
削除もフォームを使って処理するようにすればVB等で何テーブルの何のレコードを削除したか別のテーブルに保存することも出来ます。
雑然と書いてしまいましたがこの様な感じで出来ます。
    • good
    • 1
この回答へのお礼

早速ご回答いただきありがとうございました。

できるかもと思いながら その方法が全く思いつかなかったので
出来る方法をずばりお答え頂きとてもうれしいです。

ただ現在の私では作ることができないので 急ぎ(すぐにでもやらなきゃななので・・・)もう少し勉強してからチャレンジしたいと思います。

取り急ぎ ありがとうございました。

お礼日時:2005/11/25 01:22

>現在はパスワードなしでDBに入ることもできてしまう


パスワード設定が正しく出来ていないのではないでしょうか。データベースパスワードを再度設定しなおしてみてください。(パスワードを設定する前にmdbのバックアップは取っておいてください。)
データベースパスワードが設定できれば後はユーザーレベルの権限を与えてユーザーアカウントを作ればまずまずのセキュリティにはなります。
後はヘルプの Accessのセキュリティの概要 でも参照してみてください。
>「誰がいつDBを開いたか」「DB書き込んだ人は誰か」・・
>ログのようなものの表示や設定などもできるのでしょうか
「誰が」というのはそのままでは記録できません。開いたりする際にID等を保存するテーブルでも作って開いた人のIDや時間をテーブルに保存するようにしないとダメでしょう。

この回答への補足

ご回答ありがとうございました。

排他モードで1パスワードの設定ができました。
DBを開くとともにパスワードウィンドウが表示されるようになりました。

その状態でユーザーを新規登録しセキュリティーレベルを設定したのですが DBを開くとともに ユーザーID及びパスワードのウィンドウは表示されませんでした。この部分は別の設定が必要なのでしょうか??

また「ID等を保存するテーブルを作って・・・」というのは 同じDB内にテーブルを作るのでしょうか?また別にDBを作るのでしょうか?このレベルになるとVBAなどの知識がないと難しいのでしょうか?

教えてください。
よろしくお願いいたします。

補足日時:2005/11/23 00:44
    • good
    • 0
この回答へのお礼

O_cyan様
ご回答ありがとうございました。
排他モードでツール⇒セキュリティー⇒パスワードの設定で再度パスワードを設定したら、1パスワードの設定が出来ました。
今から全員のユーザーとパスワードを再設定してみます。
本当にありがとうございました。

お礼日時:2005/11/23 00:43

ツール → セキュリティ → データベースのパスワード設定 でよいのでは?

この回答への補足

早速お返事いただきありがとうございます。
ユーザー設定し そのパスワードを入れると「確認してください」と表示されます。
現在はパスワードなしでDBに入ることもできてしまう状態です。
ユーザー設定がおかしいのでしょうか??

補足日時:2005/11/19 12:52
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q大至急!アクセスのフォームを開く時にパスワードを設定する!

アクセスで、メニューフォームを作って、ボタンを配置しています。
そのボタンを押すと、フォームが開くのですが、その際、パスワードを聞いてくるようにしたいのです。(パスワードは固定です)
パスワードが間違えていたらフォームを開くことができず、パスワードが合っていたら指定のフォームを開くようにしたいです。

メニューフォームができていて、パスワード入力用のフォームもできています。(パスワード入力用のフォームは、テキストボックスを配置し、「OK」ボタンと「キャンセル」ボタンを作りました。このフォームの作りが悪ければ作り変えます)

大至急回答願いたいと思います。
よろしくお願いします。m(_ _)m

Aベストアンサー

もし、Password入力時に「***」と表示されなくてもよいなら、専用フォームを作らなくても、
ごく簡単なコードで対応できますが・・・

組み込み方としては、
1)フォームをデザインビューを開く
2)フォームのプロパティシートを開き、『イベント』タブをクリック
3)『開く時』のところにカーソルを移動し、右側に現れる「...」をクリック
4)以下のようなコードを入力;
(1・3行目は自動で入力されるので、実際に手で入力するのは2行目だけです)

Private Sub Form_Open(Cancel As Integer)
If InputBox("Password= ") <> "Test" Then Cancel = True
End Sub

・・・以上で、正しいパスワード(=「Test」)を入力しないと、フォームを開くことが
できなくなります。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QExcelからパスワード付きAccess

現在 パスワードが設定されたAccessファイル(accdb形式)のデータをExcelに取り込むプログラムを作成しています.
接続時のプログラムは以下のように記述しました.

Dim cn As New ADODB.Connection
Dim cnStr As String, dbDir As String, Pswd As String

dbDir = "c:\test\test.accdb"
Pswd = "pass"
cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & dbDir & ";" & _
"Jet OLEDB:Database Password=" & Pswd & ";"
cn.Open cnStr

上記でexcel2003及び2007からaccdbに接続したところ問題なくデータ取得できました.
excel2010で上記プログラムを実行すると
「パスワードが正しくありません」
と表示され,データが取得できません.

このような場合,どうすれば解決出来るでしょうか?

現在 パスワードが設定されたAccessファイル(accdb形式)のデータをExcelに取り込むプログラムを作成しています.
接続時のプログラムは以下のように記述しました.

Dim cn As New ADODB.Connection
Dim cnStr As String, dbDir As String, Pswd As String

dbDir = "c:\test\test.accdb"
Pswd = "pass"
cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & dbDir & ";" & _
"Jet OLEDB:Database Password=" & Pswd & ";"
cn.Open cnStr

上記でexcel200...続きを読む

Aベストアンサー

Access Excel ともに2010で試しました。
パスワード・・のエラー発生。
ググリまくると
http://www.access-programmers.co.uk/forums/showthread.php?t=220521
Franz Haidacher さんによれば
Access2010 から採用された既定の暗号化方法(高度なセキュリティ)は
ADO OLEDB では接続できないようです。

Accessのオプションのクライアントの設定から
以前の暗号化方法を使用するに変更したうえでパスワードを設定するしか
現在のところ方法がなさそうです。
(-"-)
DAOなら・・・と試しましたが同じく orz

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

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

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

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

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング