- ベストアンサー
Access2000での質問
ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ フィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ものすごい初心者です!よろしくおねがいします!!
- みんなの回答 (20)
- 専門家の回答
質問者が選んだベストアンサー
aptivaさんも言われているように、No.15のコードで出来ているはずです。 ただし、最初のところを、 If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) End If と直します。(Else句を削除する。) これで、 txtユーザーIDが未入力なら2、 txtパスワードが未入力なら3、 IDとパスワードが[ユーザーマスタ]になければ4 のメッセージを表示するはずです。 メッセージが違うなら、 If DCount(・・・・・ の下の ret = myMsgBox(4) を希望するメッセージに変更して下さい。 3種類のみログインさせたいなら、[ユーザーマスタ]にその3種類のみ登録しておけばいいのです。
その他の回答 (19)
- aptiva
- ベストアンサー率36% (193/529)
フォームのプロパティってわかりますか? レコードソース、フィルタ、並べ替えとか並んでいるやつです。(メニューバーの表示→プロパティで出てくるウィンドー、それのタイトルがフォームになっている状態) それの、「読み込み時」のところ、[イベント プロシージャ]と入っていますか? ←重要です 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、Loadイベントのプロシージャが表示されるのを確認してもう一度試してみてください。
- aptiva
- ベストアンサー率36% (193/529)
ごめんなさい、「開く時」ではなく、「読みこみ時」でした。 #7の「開く時」を「読み込み時」と読み替えてやってみてください。
- aptiva
- ベストアンサー率36% (193/529)
MsgBox関数を使うと、画面にダイアログボックスのような物が出て、その中に値が表示されますが……。 ひょっとして、メインフォームのLoadイベントが動いてないかもしれません。 メインフォームのプロパティ「開く時」のところに、[イベント プロシージャ]と入っていますか? 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、今のLoadイベントのプロシージャが表示されるのを確認してもう一度試してみてください。
補足
>一応、Loadイベントの >Me!txtログイン者名1 = DLookup・・・・・ >の直前に、 >MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") >入れてみて、DLookup関数の戻り値を確認してみて下さい。 これをすると「Nullの使い方が不正です」とでます メインフォームのプロパティ「開く時」のところに、[イベント プロシージャ]と入っていますか? 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、今のLoadイベントのプロシージャが表示されるのを確認してもう一度試してみてください 上のおっしゃられてる意味が理解できないのですが… 「開く時」のイベントプロシージャは入っていますが、それは別の理由でコードを書いています。 今のLoadイベント…の文章の意味がよくわからないです…
- aptiva
- ベストアンサー率36% (193/529)
#4の >一応、Loadイベントの >Me!txtログイン者名1 = DLookup・・・・・ >の直前に、 >MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") >入れてみて、DLookup関数の戻り値を確認してみて下さい。 この時、ユーザー名は表示されますか? また、同様にメインフォームのLoadイベントの最初に MsgBox(LoginID & ":" & LoginPassword) と挿入してみて、ログイン画面で入力したユーザー名:パスワードが表示されますか?
補足
戻り値の確認の仕方がわからないのですが…
- aptiva
- ベストアンサー率36% (193/529)
ひょっとして、 Public LoginID As String Public LoginPassword As String をオブジェクトのモジュールではなく、ログインフォームとメインフォームにそれぞれ書かれているのでは? テーブル、クエリ、・・・、マクロ、モジュールの、モジュールの方に書かれてますか?
補足
ちゃんと書いています!なのにできません! 色々手は尽くしましたがどうしてもできないのです
- maruru01
- ベストアンサー率51% (1179/2272)
見たところ、おかしなところはないようです。 なので考えられることは、 ・[ユーザーマスタ]テーブルで、ログインで入力したIDとパスワードのレコードのユーザー名がない(""である)。 ・メインメニューフォームに別のテキストボックス(txtログイン者名)があり、それを見て、表示されないと勘違いしている。(実際に値が入るのは別のテキストボックス(txtログイン者名1)。) といったところです。 一応、Loadイベントの Me!txtログイン者名1 = DLookup・・・・・ の直前に、 MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") を入れてみて、DLookup関数の戻り値を確認してみて下さい。
補足
何をどうやってログイン者名が表示できません… 間違いはないはずなのですが… どうかお助けしてください…
- maruru01
- ベストアンサー率51% (1179/2272)
再びmaruru01です。 メインメニューフォームが表示されるということは、btnログインのクリックイベント内の、DCount関数が正常に動作しているということです。 で、メインメニューフォームのLoadイベントのDLookup関数の第2、第3引数はDCount関数と同じになっていますか。 とにかく、引数のテーブル名やフィールド名が正しいかどうか確認して下さい。 もしよければ、書いたコードをまるまるコピーして補足欄に貼り付けてくれると分かるかも知れませんが。 ちなみに自分で簡単なものを作ってみたところ、ちゃんと出来ました。
補足
えーとですね!エラーはなくなりましたがやっぱりメインメニューの方でテキストボックスにログイン者名がでません! これがログインフォームでのコード Private Sub btnログイン_click() Dim ret As Integer LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value If DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If End Sub これがメインメニューでのコード Private Sub Form_Load() Me!txtログイン者名1.Value = DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") End Sub です! よろしくお願いします
- aptiva
- ベストアンサー率36% (193/529)
フォーム:ログインをAutoExecマクロで開くか、ツールメニューの「起動時の設定」で、フォームの表示をログインに設定します。 そうすると、ログインフォームが最初に開かれるので、そこでログインID、パスワードを入力します。 そこで入力されたログインIDをテーブルなりどこかに保存しておいて、メインフォームを開き、ログインフォームを閉じるか非表示とします。 メインフォームでユーザーマスタを参照し、さきほどのログインIDと照合して名前を表示します。(いろいろ方法はあると思います。) 手順の説明しかしてないですが、少しがんばってみてください。 レコードセットの操作は多少でもわかりますか?
補足
下のmaruruさんへ! エラーはなくなりましたがメインメニューでのログイン者名が表示されません!どうしたらいいのですか? 何が原因ですか?
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 標準モジュールに、 Public LoginID As String Public LoginPassword As String と宣言しておきます。 ログインフォームにテキストボックス、[txtLoginID]と[txtLoginPassword]があるとします。 btnログインのクリックイベントに、 Private Sub btnログイン_Click() LoginID = Me!txtLoginID.Value LoginPassword = Me!txtLoginPassword.Value If DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then MsgBox "IDかパスワードが違います", vbCriteria Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If End Sub メインメニューフォームのLoadイベントに、 Me!txtログイン者名.Value = DLookUp("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") とします。 ちなみに、txtLoginPasswordの定型入力に"password"と指定すると、パスワード入力ボックスっぽく"*"で表示されます。 あと、ログインをキャンセルするボタンをログイン画面につけた方がいいですよ。
補足
うまくいかないのですが… LoginID = Me!txtLoginID.Valueのところでエラーがでます! 指定した式で、閉じているかまたは存在しないオブジェクトを参照しています。 どこをどうすればいいのでしょうか?
- 1
- 2
補足
読み込み時のイベントプロシージャのところにコードは書いてあります!