- ベストアンサー
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)
補足説明します。 If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) Exit Sub ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Exit Sub End If この部分はユーザーID&パスワードが入力されているかどうかのチェックです。 LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value この部分はメインフォームでユーザー名を表示するために、ユーザーID&パスワードをグローバル変数に保存しています。 If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) MsgBox("ログインID、パスワードが違います!") DoCmd.Quit acQuitPrompt Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If この部分で「ユーザーマスタ」に、該当するユーザーID&パスワードが登録されているかどうか確認し(DCount) 登録されていなかったら、メッセージを表示し終了。 登録されていたら、メインメニューを開き、ログインフォームを閉じています。
- aptiva
- ベストアンサー率36% (193/529)
少し訂正&余分を少し省きます。 Private Sub btnログイン_click() Dim ret As Integer If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) Exit Sub ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Exit Sub End If LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) MsgBox("ログインID、パスワードが違います!") DoCmd.Quit acQuitPrompt Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If Exit_btnログイン_Click: Exit Sub Err_btnログイン_Click: MsgBox Err.Description Resume Exit_btnログイン_Click End Sub
お礼
本当にお手数かけました!やっとすべての謎が解けました!ありがとうございます!本当に助かりました!! 初めからすべてのコードを書けばよかったのですね… 大変ご迷惑をおかけしました… 色々勉強になりました! すごい悩ましてしまいまして申し訳ありません! 本当に感謝の気持ちでいっぱいです! ありがとうございました!!
- aptiva
- ベストアンサー率36% (193/529)
#15のプログラムで登録されていないログインIDではメインフォームは開かないはずです。 Private Sub btnログイン_click() Dim ret As Integer Dim stDocName As String Dim stLinkCriteria As String stDocName = "メインメニュー" If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Else ret = myMsgBox(4) End If LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) MsgBox("ログインID、パスワードが違います!") DoCmd.Quit acQuitPrompt Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If Exit_btnログイン_Click: Exit Sub Err_btnログイン_Click: MsgBox Err.Description Resume Exit_btnログイン_Click End Sub 以上のプログラムで該当しないユーザーIDか、パスワードが間違っていた場合はAccessが終了するはずです。 試してみてください。
お礼
違うでお礼の点数を差し上げようとしましたができませんでした… なので今度また質問したときに上乗せさせていたただきます! 今日一日つき合わせてしまってごめんさない! そしてありがとうございました!
- aptiva
- ベストアンサー率36% (193/529)
If Me.txtユーザーID = "000001" And Me.txtパスワード = "000001" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "000002" And Me.txtパスワード = "000002" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "111111" And Me.txtパスワード = "111111" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" これだと、上記のユーザーID、パスワードに一致してしまうと、 LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value MsgBox DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If この部分が実行されずにメインフォームが実行されてしまうプログラムとなってしまっています。 最初の部分はテストで入れられたものですか? 最初の部分を削除して、実行してください。 指定した式で・・、でのエラーはどこでおきていますか??
- maruru01
- ベストアンサー率51% (1179/2272)
No.13のコードを見て初めてわかりました。 3種類のID&パスワード(00001など)の時に、メインフォームを開いてログインフォームを閉じるコードを書いているからです。 そのあとで、 LoginID = Me!txtユーザーID.Value とすると、すでに閉じている[ログイン]フォームの[txtユーザーID]を参照しようとすることになり、「指定した式で・・・」というエラーが出ます。 さらに変数LoginIDとLoginPasswordに代入する前に、メインフォームを開いて、そのLoadイベントが実行されるため、DLookup関数の戻り値がNullになるのです。(DLookup関数の引数として渡される時点での、LoginIDとLoginPasswordは""ですから、当然です。) せっかく、ユーザーマスタからユーザーIDとパスワードを参照しようとしているのに、何故、 If Me.txtユーザーID = "000001" And Me.txtパスワード = "000001" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "000002" And Me.txtパスワード = "000002" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "111111" And Me.txtパスワード = "111111" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" という風にこの3種類の場合のみ、メインフォームを開く(+ログインを閉じる)コードを書いているのですか? 2つのテキストボックスの入力チェックをするために、 If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Else ret = myMsgBox(4) End If だけでいいのではないですか? とりあえず、以下のようにコードをかえて実行してみて下さい。うまく行くはずです。 Private Sub btnログイン_click() Dim ret As Integer Dim stDocName As String Dim stLinkCriteria As String stDocName = "メインメニュー" If IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Else ret = myMsgBox(4) End If LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If Exit_btnログイン_Click: Exit Sub Err_btnログイン_Click: MsgBox Err.Description Resume Exit_btnログイン_Click End Sub
お礼
やっとのおもいでできました!本当にありがとうございます!ものすごいご迷惑おかけしました!! 本当に感謝しております! ありがとうございました!
補足
この3種類の場合のみログインできるようにしたいのです! それ以外はエラーメッセージを出して再入力させたかったのです!プラス、テキストボックスの未入力もチェックしたいです!
- aptiva
- ベストアンサー率36% (193/529)
ブレークポイントの使い方は、コード画面を表示し、止めたいところの行にカーソルを置きF9キーで設定・解除です。 実行中にその箇所へ行くと、コード画面に変わりますので、F8キーで1ステップづつ実行され、F5キーで続けて実行されます。
- maruru01
- ベストアンサー率51% (1179/2272)
とりあえず、ログインフォームにある、2つのテキストボックス(txtユーザーIDとtxtパスワード)を一度削除して、新たに同じ名前で作成し直してみて下さい。 それで、「指定した式で・・・」のエラーが出なくなったら、No.10のことを確認して下さい。 ちなみにブレークポイントの使い方は以下の通り ・VBE画面で、メニューの[表示]→[ツールバー]→[デバッグ]を選択して、デバッグのツールバーを出す。 ・ブレークポイントを置きたい行をクリックしてカーソルを置く。 ・デバッグツールバーの[ブレークポイントの設定/解除]ボタン(手のひらマーク)をクリックすると、その行が別の色でハイライトされ、先頭に●がつく。 ・普通に、プログラムを実行する。 ・ブレークポイントの個所で実行が中断する。 ・デバッグツールバーの[ステップイン]をクリックするごとに、1行ずつ実行される。(F8を押しても同じ) ・デバッグツールバーの右向き三角をクリックすると、そこから一気に実行される。 ・別のところにブレークポイントがあれば、そこでまた中断する。
補足
いったん削除してあらたにテキストボックスを作成しましたがまたしても「指定した式で…」のエラーがでました! ちなみにbtnログインに書いてあるコードのすべてはこれです! Private Sub btnログイン_click() Dim ret As Integer Dim stDocName As String Dim stLinkCriteria As String stDocName = "メインメニュー" If Me.txtユーザーID = "000001" And Me.txtパスワード = "000001" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "000002" And Me.txtパスワード = "000002" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf Me.txtユーザーID = "111111" And Me.txtパスワード = "111111" Then DoCmd.OpenForm stDocName, , , stLinkCriteria DoCmd.Close acForm, "ログイン" ElseIf IsNull(Me.txtユーザーID) Then ret = myMsgBox(2) ElseIf IsNull(Me.txtパスワード) Then ret = myMsgBox(3) Else ret = myMsgBox(4) End If LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value MsgBox DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If Exit_btnログイン_Click: Exit Sub Err_btnログイン_Click: MsgBox Err.Description Resume Exit_btnログイン_Click End Sub
- aptiva
- ベストアンサー率36% (193/529)
#10のエラーは直りましたか? 直っていたら、メインフォームのLoadイベントの Me!txtログイン者名1.Value = DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") を Me!txtログイン者名1.Value = LoginID & ":" & LoginPassword に変えてみてください。 ログイン者名1に、ログイン画面で入力した、ログインID、パスワードは表示されますか?(ログインID:パスワードとなるはずです。) 何も表示されないようであれば、メインフォームのLoadイベントが動いてないですし、「:」のみ表示されれば、ログインID、パスワードの受け渡しがうまくいっていません。 結果を教えてください。
- maruru01
- ベストアンサー率51% (1179/2272)
>を行った結果「指定した式で、とじているかまたは存在しないオブジェクトを参照しています」というエラーがでます。 No.3の補足で出なくなったと言っていましたが、また出るようになったのでしょうか。 具体的にどこで出ますか。 If文ですか?それとも、その前のテキストボックスの値を変数に代入するところですか? この警告が出る場合は、メインフォームは開かれないんですよね。 できれば、ログインフォームのbtnログインのClickイベントの先頭にブレークポイントを置いて、1行ずつ実行してエラー個所を確かめてみて下さい。 ちなみにNo.1の補足欄のような場所で上記エラーになる場合は、テキストボックスをいったん削除して、同じ名前で新しく作成してみて下さい。
補足
具体的なエラー場所は LoginID = Me!txtユーザーID.Value ここにチェックが入ってました… ブレークポイントの使い方をしりません…一行ずつ実行してエラー個所を確かめるやり方をしりません…
- maruru01
- ベストアンサー率51% (1179/2272)
>これをすると「Nullの使い方が不正です」とでます この警告が出るのは、[ユーザーマスタ]テーブルの、該当するIDとパスワードのデータのログイン者名がNull(未入力)の場合があります。 [ユーザーマスタ]テーブルを確認して下さい。 現在試している、IDとパスワードのデータが2つ(以上)ありませんか。 そしてその内の1つはログイン者名があり、別の1つにはログイン者名がない、ということはありませんか? 試しに、ログインフォームの、 If DCount(・・・・・ の直前に、 MsgBox DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") を入れて個数を確認して下さい。 2以上なら、[ユーザーマスタ]に同じIDとパスワードを持つデータが複数存在していることになります。 その場合は、ログイン者名のないデータを削除して下さい。
補足
この警告が出るのは、[ユーザーマスタ]テーブルの、該当するIDとパスワード・・・ これに関してはそれぞれひとつしかありあません。特に疑問視されておられるところに問題はありません! If Dcount… を行った結果「指定した式で、とじているかまたは存在しないオブジェクトを参照しています」というエラーがでます。 LoginID = Me!txtユーザーID.Value LoginPassword = Me!txtパスワード.Value MsgBox DCount("ログインID", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") If DCount("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") = 0 Then ret = myMsgBox(4) Exit Sub Else DoCmd.OpenForm "メインメニュー" DoCmd.Close acForm, "ログイン", acSaveNo End If
- 1
- 2
お礼
お礼の点数が10点しか選べなかったのでもうひとつの方で上乗せしておきます! ありがとうございました!