• ベストアンサー

Access2000での質問

ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ フィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ものすごい初心者です!よろしくおねがいします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.19

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)
回答No.9

フォームのプロパティってわかりますか? レコードソース、フィルタ、並べ替えとか並んでいるやつです。(メニューバーの表示→プロパティで出てくるウィンドー、それのタイトルがフォームになっている状態) それの、「読み込み時」のところ、[イベント プロシージャ]と入っていますか? ←重要です 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、Loadイベントのプロシージャが表示されるのを確認してもう一度試してみてください。

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.8

ごめんなさい、「開く時」ではなく、「読みこみ時」でした。 #7の「開く時」を「読み込み時」と読み替えてやってみてください。

moshamosha
質問者

補足

読み込み時のイベントプロシージャのところにコードは書いてあります!

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.7

MsgBox関数を使うと、画面にダイアログボックスのような物が出て、その中に値が表示されますが……。 ひょっとして、メインフォームのLoadイベントが動いてないかもしれません。 メインフォームのプロパティ「開く時」のところに、[イベント プロシージャ]と入っていますか? 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、今のLoadイベントのプロシージャが表示されるのを確認してもう一度試してみてください。

moshamosha
質問者

補足

>一応、Loadイベントの >Me!txtログイン者名1 = DLookup・・・・・ >の直前に、 >MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") >入れてみて、DLookup関数の戻り値を確認してみて下さい。 これをすると「Nullの使い方が不正です」とでます メインフォームのプロパティ「開く時」のところに、[イベント プロシージャ]と入っていますか? 入っていなければ、その項目の右の▼を押して[イベント プロシージャ]を選択し、次にその右の…を押して、今のLoadイベントのプロシージャが表示されるのを確認してもう一度試してみてください 上のおっしゃられてる意味が理解できないのですが… 「開く時」のイベントプロシージャは入っていますが、それは別の理由でコードを書いています。 今のLoadイベント…の文章の意味がよくわからないです…

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.6

#4の >一応、Loadイベントの >Me!txtログイン者名1 = DLookup・・・・・ >の直前に、 >MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") >入れてみて、DLookup関数の戻り値を確認してみて下さい。 この時、ユーザー名は表示されますか? また、同様にメインフォームのLoadイベントの最初に MsgBox(LoginID & ":" & LoginPassword) と挿入してみて、ログイン画面で入力したユーザー名:パスワードが表示されますか?

moshamosha
質問者

補足

戻り値の確認の仕方がわからないのですが…

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.5

ひょっとして、 Public LoginID As String Public LoginPassword As String をオブジェクトのモジュールではなく、ログインフォームとメインフォームにそれぞれ書かれているのでは? テーブル、クエリ、・・・、マクロ、モジュールの、モジュールの方に書かれてますか?

moshamosha
質問者

補足

ちゃんと書いています!なのにできません! 色々手は尽くしましたがどうしてもできないのです

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

見たところ、おかしなところはないようです。 なので考えられることは、 ・[ユーザーマスタ]テーブルで、ログインで入力したIDとパスワードのレコードのユーザー名がない(""である)。 ・メインメニューフォームに別のテキストボックス(txtログイン者名)があり、それを見て、表示されないと勘違いしている。(実際に値が入るのは別のテキストボックス(txtログイン者名1)。) といったところです。 一応、Loadイベントの Me!txtログイン者名1 = DLookup・・・・・ の直前に、 MsgBox DLookup("ユーザー名", "ユーザーマスタ", "ログインID = '" & LoginID & "' AND パスワード = '" & LoginPassword & "'") を入れてみて、DLookup関数の戻り値を確認してみて下さい。

moshamosha
質問者

補足

何をどうやってログイン者名が表示できません… 間違いはないはずなのですが… どうかお助けしてください…

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

再びmaruru01です。 メインメニューフォームが表示されるということは、btnログインのクリックイベント内の、DCount関数が正常に動作しているということです。 で、メインメニューフォームのLoadイベントのDLookup関数の第2、第3引数はDCount関数と同じになっていますか。 とにかく、引数のテーブル名やフィールド名が正しいかどうか確認して下さい。 もしよければ、書いたコードをまるまるコピーして補足欄に貼り付けてくれると分かるかも知れませんが。 ちなみに自分で簡単なものを作ってみたところ、ちゃんと出来ました。

moshamosha
質問者

補足

えーとですね!エラーはなくなりましたがやっぱりメインメニューの方でテキストボックスにログイン者名がでません! これがログインフォームでのコード 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)
回答No.2

フォーム:ログインをAutoExecマクロで開くか、ツールメニューの「起動時の設定」で、フォームの表示をログインに設定します。 そうすると、ログインフォームが最初に開かれるので、そこでログインID、パスワードを入力します。 そこで入力されたログインIDをテーブルなりどこかに保存しておいて、メインフォームを開き、ログインフォームを閉じるか非表示とします。 メインフォームでユーザーマスタを参照し、さきほどのログインIDと照合して名前を表示します。(いろいろ方法はあると思います。) 手順の説明しかしてないですが、少しがんばってみてください。 レコードセットの操作は多少でもわかりますか?

moshamosha
質問者

補足

下のmaruruさんへ! エラーはなくなりましたがメインメニューでのログイン者名が表示されません!どうしたらいいのですか? 何が原因ですか?

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。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"と指定すると、パスワード入力ボックスっぽく"*"で表示されます。 あと、ログインをキャンセルするボタンをログイン画面につけた方がいいですよ。

moshamosha
質問者

補足

うまくいかないのですが… LoginID = Me!txtLoginID.Valueのところでエラーがでます! 指定した式で、閉じているかまたは存在しないオブジェクトを参照しています。 どこをどうすればいいのでしょうか?   

関連するQ&A

  • わからないので再び!Access2000です

    ログイン画面で、ID、パスワードを入力後btnログインクリックするとメインフォームを開き、メインフォームにあるtxtログイン者名というテキストボックスにログイン者名をだしたいのですがどうすればいいのですか? テーブル名:ユーザーマスタ ユーザーマスタのフィールド名:ログインID、ユーザー名、パスワード フォーム名:ログイン、メインメニュー ログイン画面:txtユーザーID、txtパスワード、btnログイン メインメニュー:txtログイン者名 ものすごい初心者です!よろしくおねがいします!!

  • Access2010 テキストの連結

    よろしくお願いします。 Access2010を使用しております。 非連結のフォームに入力した情報を、 保存ボタンで、テーブルに追加しております。 そこで、サブフォームにある複数のテキストボックスをボックス毎に改行して、 一つのフィールドに入れたいと思っております。 一つ一つのテキストボックスは別テーブルを作っておりますが、メインにしているテーブルには、一つのフィールドに入れたいのです。 txt箱1、txt箱2、…txt箱20の空白ではないテキストボックスを改行して、一つのフィールドに追加したいです。 テキストボックスが、ランダムに記入されていたり、空白が間にあると、 うまく一つのフィールドに入れることができません。 改行が何個も入った箇所ができてしまいます。 間に空白があっても、改行を綺麗に入れて、 一つのフィールドに入力させるには、どうしたらよろしいでしょうか。 お世話になりますが、よろしくお願いします。

  • AccessVBAで質問があります。

    AccessVBAで質問があります。 VBAと選択させていただきましたが、正確にはAccess VBAで質問があります。 フォームがあり、そこにはテキストボックスが2つ、コマンドボタンが一つあります テキストボックスはそれぞれ、社員名、パスワードを入力します。 社員名とパスワードの元データはT社員にあり、その二つが両方とも合っていた場合、コマンドボタンを押したときに、メインメニューに移動できるという設定にしました。(ここまではできています) そして、質問の部分のメインメニューには、同様に二つのテキストボックスがあります。 ひとつは上記同様で「社員名」を表示というテキストボックスで、ログインメニューで入力されたのをそのまま持ってきているのですが、問題はもう一つのテキストボックスで、こちらには「T社員」にある、「社員ID」を表示させたいと思っています。 ここで質問なのですが、ログインメニューで入力していない情報(社員ID)を持ってきた情報(社員名)から表示させる方法はあるのでしょうか? また、上記以外での方法はあるのでしょうか? 回答を頂けたら大変ありがたく思います

  • Accessのフォームについて教えて下さい

    Access 2010のフォームについてお教え下さい。 テーブルにはテーブル名T1、フィールド「ID」、「Price」というテキストボックス。2フィールドがあります。 テーブルの各データは、 ID,Price 001,100 002,200 003,300 フォームにはにフォーム名F1、「cmb」というコンボボックスと、「price」というテキストボックスが配置されています。 「cmb」のデータは値集合ソースで、「SELECT T1.ID FROM T1;」と指定しています。 「cmb」で選択したデータのプライスを「Price」テキストボックスに表示したいと思います。 例えば、「001」を選択したら、「100」と表示されるようにしたいと思います。 色々調べているのですが、どうやってやるのかわかりません。どのように実現したらよろしいでしょうか? よろしくお願いいたします。

  • 画面遷移について(SQL,SELECT)

    概要です。 VisualBasic2010にてフォーム1(ログイン画面)→フォーム2(メニュー画面) を作成しようとしております。 現在の構成です。 ・ログイン画面 ・メニュー画面 ・ユーザー名とパスワードが入力されたテーブル(SQLサーバーで作成(ローカルデータベース) 質問です。 ログイン画面にユーザー名とパスワードのテキストボックスを設けているのですが、 ログインするボタンを押下したときに、ログイン画面に入力したユーザー名と パスワードのテキストボックスでテーブルを検索して、ユーザー名とパスワードが一致 したらメニュー画面に遷移し、一致しなかったらエラーメッセージボックスを出したいの ですが、どういったコードを書けば良いかわかりません。 また試行錯誤して、ボタンクリックイベントでSELECT文を書いて、取得した レコードの一部を抜き出してユーザー名とパスワードを比較させようとしても コードがわかりませんでした。 わかりにくい文かもしれませんが、ご回答よろしくお願いします。

  • ACCESS

    どうか皆さんのお力添えを下さい。 ACCESS2010を利用して、以下の様な注文フォームaccdbを完成させていと考えています。現在、以下のところまで作業が進んでいます。 (1)テーブル (1) 注文履歴テーブル 注文ID・・・オートナンバー型 商品No・・・テキスト型 数量・・・数値型 (2) 商品テーブル 商品No・・・テキスト型 商品名・・・テキスト型 単価・・・通貨型 (3) 顧客テーブル 顧客ID・・・数値型 顧客名・・・テキスト型 パスワード・・・テキスト型 (2)フォーム (1)ログインフォーム 顧客ID入力用テキストボックス パスワード入力用テキストボックス ログインボタン・・・VBAを使って顧客テーブルに入っている顧客ID、パスワードが一致すれば注文フォームが開くところまではできました。 (2)注文フォーム(商品画像一覧があり、それをクリックすると商品No毎に個別に作成した注文フォームにジャンプします) ・コントロールボックスで数量を選ぶ ・注文ボタンを押すと注文履歴テーブルに商品ID、商品名、商品数が反映されます。 ここからが質問内容になります。 まず、はじめにログインフォームで入力後、照合OKになった顧客ID、パスワードを その後開いた注文フォームでの注文作業が完了、または中断するまでの間、 注文履歴に自動的に入力させ続けることはできますでしょうか?複数商品の注文が あった際は注文履歴テーブルにおいて複数レコードが連続して同じ顧客IDになるような 方法はあるでしょうか? ネット通販のようなものをイメージしております。 その他にもっと効率の良いやりかたなどあればご教授下さい。 どうぞよろしくお願いします。

  • Access2000の重複チェック

    現在あるデータとあるフィールド内において値が重複してある場合こちら側からエラーを出したいのですがどうすればいいですか? テーブル名:テナントマスタ フォーム:txtビル区分、txtテナントコード、…etc テナントマスタ ビル区分 テナントコード ----------------------- 01 100 01 101 02 102 02 103 ここに新たにフォーム上でビル区分、テナントコードを入力し、この値がそれぞれ01、101だったときbtn登録をクリックしたときこちらからエラーをだしたいのです! どうかよろしくお願いします!!

  • Accessでシステムを作ってます

    AccessとVBAでシステムを作成してます。初心者です。 検索結果を非連結のテキストボックスに表示させる方法を教えてください。 条件(1) フォームのレコードはどのテーブルとも紐づいていない 条件(2) 2つのテーブルから1つの検索ボタンで検索できるようにしたい テーブルA;案件マスタ テーブルB:リソースマスタ ・検索テキストボックス(1つ) ・検索ボタン(1つ) 条件(3) 案件ID、リソースIDはともに数値型です。 検索結果表示テキストボックス(非連結) ・案件IDテキストボックス:案件マスタより検索した案件IDを表示する ・リソースIDテキストボックス:リソースマスタより検索したリソースIDを表示する 下記のように考えていますが ・非連結のテキストボックスに検索結果を表示させる ・1つの検索ボタンで2つのテーブルから検索ができるようにする 方法がわかりません。 どのようなコードを追記したらいいのか教えていただけないでしょうか。 よろしくお願いいたします。 Private Sub btn検索ID_Click() Dim strFilter As String Me![案件マスタ].SetFocus If Me!案件IDテキスト = Me![案件マスタ]![案件ID] Then strFilter = " AND 案件ID= " & Me!案件IDテキスト End If If Me!テキストリソースID = Me![リソースマスタ]![リソースID] Then strFilter = strFilter & " AND リソースID= " & Me!リソースIDテキスト End If 'Forms!ID検索.Filter = Mid(strFilter, 6) Forms!ID検索.FilterOn = True Me.案件IDテキストボックス= Null Me.リソースIDテキストボックス = Null

  • 【Access2000】VB記述でつまづいています。

     非連結のテキストボックスを2つ作成し、そのテキストボックスに、それぞれIDとパスワードを入力することにより「TOP」という名前のフォームを開くログイン用のフォームを作成しています。 ・このログイン用のフォーム名は「ログイン」。 ・フォームの中にあるID入力用のテキストボックス名は“txtNamePass” ・同じくパスワード入力用のテキストボックス名は“txtCountPass” ・IDとパスワードを入力した後に開くフォームは「TOP]。  この「ログイン」という名前のフォームにある“txtCountPass”の「更新後処理」の所に以下のコードを記述したところ、IDとパスワードを入力後、「TOP」のフォームは開くのですが、「ログイン」のフォームが閉じないままになってしまいます。  どのように書き直したらいいか御存知の方がいらっしゃったら御教示下さい。  Private Sub txtCountPass_AfterUpdate() Dim TextBoxA As TextBox Dim TextBoxB As TextBox Set TextBoxA = Me.txtNamePass ' --- A Set TextBoxB = Me.txtCountPass Const NamePass = "@@@@" ' --- B Const CountPass = "*****" If TextBoxA = NamePass Then ' --- C If TextBoxB = CountPass Then ' --- D DoCmd.OpenForm "TOP" ' --- E DoCmd.Close , "ログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical End If Else MsgBox "IDが異なります。", vbOKOnly + vbCritical End If End Sub

  • accessで年度の表示をさせたい

    いつもお世話になります。過去ログ参照し、いろいろやってみましたが、どうしても解決できないのでよろしくお願いします。 商品の売上の管理をするDBをつくろうとしています。 テーブルに会社マスタとして、会社名と会社IDが、商品マスタには商品名と商品IDが、伝票には伝票番号、会社番号、商品番号、日付、年度のフィールドが作ってあります。 伝票を入力するためのフォームとクエリも作成しています。 伝票を入力するフォームに年度というテキストボックスを作成し、コントロールソースに=IIf(Month([txt])<4,Format(DateAdd("yyyy",-1,[日付のテキストボックス名]),"gggee" & "年度"),Format([日付のテキストボックス名],"gggee" & "年度")) を入力し、日付が決定されると年度を表示されるようにしたかったわけです。 本来、日付のフィールドはデータ型に、「日付/時刻型」を選んでおり、日付カレンダーの表示により、目的の日にちを選択することでyyyy/mm/ddの表示をさせているものです。定型入力の欄は空白になっています。 ところが、フォームをデザインビューで開くと年度の欄に「#Name?」 の表示が出てしまいます。基本的なことなのでしょうが、わかりやすく説明していただけないでしょうか? あと、~月度のような考え方はどのようにしたらよいでしょう?