• 締切済み

Accessの認証について

お世話になっております。 以前に、ユーザー認証について質問がありまして、その回答を参考にさせていただいたのですが、ユーザーIDとPasswordを確認して、合っているならばデータベースを開いて作業できるという方法が分かりません。 RecordSetを使うとあったのですが、具体的にはどのようにVBAを組めばよろしいのでしょうか?テーブル(テーブル名:Login)は、User_Idと、Passwordのフィールドがあり、User_IDの値に対応するPasswordを参照して、一致したらAccessにアクセスできるという感じで管理したいと要望があがっています。まったくの、初心者ですので、よろしくお願いいたします。

みんなの回答

noname#89342
noname#89342
回答No.6

横ヤリ失礼。 テキストボックスの型よりも、テーブルの型とWHERE句の記述が合っているかを 確認した方が良いと思います。 Dcountでこれだけハマルのも珍しいので(失礼)、目先を変えて調べてみるのも 良いかもしれません。 たとえば、参照設定を確認してみるとか、新しいMDBに全部インポートして 新MDBで動かしてみるとか。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.5

Me![user]とMe![password]をウォッチして、ちゃんとTextBox型になっているか確認してみては。 それとも、フォームのインスタンス化のタイミング絡みで、なんか私が間違っているのかも。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.4

> あれからいろいろ試してみたのですがどうしても同じエラーメッセージが出てしまいます えーと、エラーが "User_ID = " & Me![user] & " and Password = " & Me![password] のところで、出てるなら、 Me![user] を Me![user].text にかえてみて下さい。passwordも同様。 外しているかな?

hunnbaruzo
質問者

補足

度々、申し訳ございません・・・ textてに直してみましたが、「コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することができません」と言うエラーがでてしまいました。Valueにしても、「データ型が一致しません」と出てしまいます・・・どうしたらよろしいのでしょうか・・・ ほんとに分からなくてすみません。。。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> IDと、Passwordはそれぞれ数値型でやってみたのですが、 > 「データの型は一致しません」というエラーメッセージがでてしまいます。 という事なら、 > count1 = DCount("*", "Login", "User_ID = '" & Me![user] & "' and Password = '" & Me![password] & "'") を < count1 = DCount("*", "Login", "User_ID = " & Me![user] & " and Password = " & Me![password] ) ――としなきゃいけません。SQLのお約束として。 ですが、例えばテキストボックスpasswdに数値以外のものがきたり、何も入力されてなければ、不正なSQL文になるので、zerosixさんが回答されているようにUser_ID/Passwordは文字列型にしとくのが手っ取り早いかと。 どうしても数値型でなければいけないなら、テキストボックスの内容について、事前チェックを行う必要があります。

hunnbaruzo
質問者

補足

度々すみません・・・あれからいろいろ試してみたのですがどうしても同じエラーメッセージが出てしまいます。。。 テーブルの構造は、ID(オートナンバ)、User_ID(テキスト型)、Password(テキスト型)にしてやってみました。(テーブル名;Login)フォームは、同じく非連結にしてやってみているのですが・・・また、Loginテーブルはリンクテーブルを使ってデータベースを分けています。どうしたらよろしいのでしょうか?なにとぞよろしくお願いいたします。

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.2

>IDと、Passwordはそれぞれ数値型でやってみたのですが、 >「データの型は一致しません」というエラーメッセージがでてしまいます。 >どうしたら、よろしいのでしょうか? 数値型がいけないのです。 別の型にすればいいですよ。文字型にすればどうですか?

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

AutoStartマクロで、フォームを立ち上げ、その中で、ユーザー名とパスワードの入力を促し、 ログインボタンを押したら、 IF DCount( "LOGIN","User_ID", "User_ID='" & Me![txtUSER] & "' and Password = '" & Me![txtPass] & "'" ) = 1 Then F_Menu.show Unload Me End If みたいなスクリプトを実行する。 ----ってな感じでどうでしょう? ただこの程度のものは、簡単に無効にできるので、セキュリティとしては、ダメダメなんですけどね。

hunnbaruzo
質問者

補足

早速のご回答ありがとうございます。 試してみたところ、それぞれのテキストボックスを非連結にして、テキストボックスの名前を、User_IDに対応するところを、「user」とし、Passwordに対応する名前を「password」にしてやってみました。 IDと、Passwordはそれぞれ数値型でやってみたのですが、「データの型は一致しません」というエラーメッセージがでてしまいます。 どうしたら、よろしいのでしょうか? Private Sub OK_Click() Dim count1 As Long count1 = DCount("*", "Login", "User_ID = '" & Me![user] & "' and Password = '" & Me![password] & "'") If count1 <> 0 Then Switchboard.show Unload Me Else MsgBox "ID若しくは、Passwordが違います。" End If End Sub このように組んでみましたが、よろしくお願いいたします。

関連するQ&A

  • pearの認証(Auth)ができません。

    下記のサイトを参考にして認証サンプルを作成しました。 http://blueeyesblue.cocolog-nifty.com/technote/2007/09/pearauthmdb2-e2.html 下記のコマンドを実行してインストール済みかを確認しました。 pear list -------------------------------------------------- Auth 1.6.4 stable MDB2 2.5.0b3 beta MDB2で正常にデータベースに接続できるかを確認しました。 問題なく接続できました。 下記のテキストボックスに値を入力して[Login]ボタンをクリックしたら下記のエラーが出力されました。 ・Username ・Password ※ログイン画面はAuthのデフォルト画面を使用しています。 [エラー] login failed テーブルは下記のように作成しています。 CREATE TABLE TBL_USER (  no BIGSERIAL PRIMARY KEY,  name VARCHAR(64) NOT NULL,  mail VARCHAR(128) NOT NULL,  password VARCHAR(128) NOT NULL,  del VARCHAR(1) DEFAULT '0' NOT NULL,  ins_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  ins_name VARCHAR(64) NOT NULL,  upd_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  upd_name VARCHAR(64) NOT NULL ); ※テーブルのpasswordフィールドに格納している値は下記のように生成して追加しました。 mkpasswd -l 7 php -r 'echo md5(*******);' ※md5に指定している値はmkpasswdで出力された値を指定しました。 サンプルコードは下記の個所のみを変更しました。 $options = array(  "dsn" => "pgsql://ユーザー名:パスワード@localhost/データベース名",  "table" => "TBL_USER",  "usernamecol" => "name",  "passwordcol" => "password", ); 正直、何が原因なのかわからず困っています。 どうかご存知の方がいましたらアドバイスいただけませんでしょうか。 また今まで認証は1から自作していましたがpearの認証は使いやすいみたいな記事を読んだので使用しようと思いましたが・・・ 自作の認証とpearの認証ではどちらがいいのでしょうか。 ご意見等、何でも構いませんので教えていただけませんでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • ACCESSのクエリ計算

    Access2003でクエリで特定条件に一致するIDを出して 今度はそのそれぞれのIDから+100(IDが2なら2~102の範囲でというように)の元のテーブルの 値の中からフィールド1が5以上の条件に一致するものの最小のIDをもとめたいと思ってます。 始めたばかりの初心者です DMINでできるのかなと思って下記式にしてみたのですが パラメーターエラーでうまくいかなくて、、 DMin("[テーブル1].ID","[テーブル1]","[テーブル1].ID>=[クエリ1].ID&[ID]<[クエリ1].ID+100&[テーブル1]フィールド2>5")

  • md5の認証が通らない

    PHP 5.1.6 MySQL 5.0.77 で開発しています。 ログインの処理で以下のコードを書いています。 入力したパスワードをサーバに送っているところです。 print $row["user_password"] . "<br />"; $entry_password = mysql_real_escape_string(trim($_POST['password'])); $crypted_password = hash('md5',$entry_password) ; print "crypted_passwordは " . $crypted_password . "<br />"; // 認証OK? //ハッシュ化後の処理 if ( $_POST["mode"] == "login" && mysql_num_rows($res) > 0 && $crypted_password == $row["user_password"] ) { $_SESSION["userid"] = $row["user_id"]; header("Location: top.php"); } ?> $row["user_password"] はデータベース内に格納してあるユーザーパスワードで 既に「md5」でハッシュ化されて格納されています。 利用者が入力したパスワードを「$_POST['password'」でサーバに送り、 同じく「md5」でハッシュ化して「$crypted_password」としています。 ここからが問題ですが、 「$_POST['password'」も「$crypted_password」もまったく同じわけのわからない 同じ32文字のテキストですが、(「print」で目視確認しています。) 何回やっても認証が通りません。 目視した限りではまったく同じ文字列です。 $_POST["mode"]が「"login"」になっているのも確認しました。 「mysql_num_rows($res) > 0」は $row["user_password"] が帰ってきているので 間違いありません。 どこに原因があるのでしょうか。 お分かりの方、教えて下さい。

    • ベストアンサー
    • PHP
  • Accessのテーブルの値を更新したい

    お世話になります。 Access2000のVBAで、教えて頂ければと思います。 下記の「テーブルA」がある状態で、 「ID=1」の「フィールド:名前」の値を「名称なし」に更新したいのですが、 どのようにVBAで記載したらよいでしょうか? ------テーブルA------- ID  名前 1 やまだ ----------------------- お手数ですが何卒宜しくお願いします。

  • PHP PEAR AUTH 認証でのパスワードを忘れた場合

    AUTHを利用しての、認証を行う場合、usernameとpasswordの カラムを持つテーブルを参照しますが、このpasswordは MD5でハッシュした値で、テーブルに格納しなければならないようです。 この場合、パスワードを忘れてしまった際など、テーブルを 見てすぐにpasswordの値が確認できないので不便です。 なのでテーブルに格納するパスワードは平文としたいと思います。 平文でpasswordを格納しても、'cryptType'=>"none"とすれば 認証は通りますが、やはり平文では心配な所があります。 良い解決方法があれば教えてください。

    • ベストアンサー
    • PHP
  • VBとAccessを使ったユーザー認証の仕方

    こんにちは。 今プログラムの勉強のためにVB.NETとAccess2003データベースを使用した簡単なソフトを作っています。 ログインする際、ユーザにIDとパスワードを入力させ、その情報と新規ユーザ登録時にユーザがAccessデータベースに登録したIDとパスワードが一致すればログインを許可するようなことをしたいのですが、こうすればできるよっていうヒントを下さい。 また、参考になるサイト、書籍等あれば教えていただきたいです。 よろしくお願いします。

  • ユーザー認証でSQLのデータと一致するものだけをログインできるようにするには

    PHP初心者です。 タイトルが長くなり、申し訳ありません。 ユーザーのBASIC認証ダイアログを表示させ、データベースのテーブルに書かれたデータと一致するものだけをログインできるようにするにはどうしたら良いでしょうか。 まずデータベースにあるテーブルからIDとパスワードを抽出します。 でも、この場合変数は配列になりますよね。 その配列の変数の宣言の書き方とデータ照合を一致させる方法を知りたくて質問しました。 どうぞ宜しくお願い致します。

    • 締切済み
    • PHP
  • エクセルのデータをアクセスのテーブルに移動入力する

    エクセルのデータをアクセスのテーブルに移動入力するVBA フォルダAにおいて、a1.xlsxというファイルがあり、 そのsheet1のセル(a,1)=1 A1が1 とします その値をアクセスのデータベース(これもフォルダAにあります)  b.accdbのテーブル1の フィールド1に入力したいときの エクセルマクロのVBAを御教示いただけると助かります さらに続けて フォルダAにおいて、a2.xlsxというファイルがあり、 そのsheet1のセル(a,1)=2 A1が2 とします その値をアクセスのデータベース上記と同じ  b.accdbのテーブル1の フィールド1に追加で入力したいときの エクセルマクロのVBA 以上わかると助かります よろしくお願いします win10 office365

  • ユーザー定義関数の意味

    下記のユーザー定義関数の意味を自分なりに解釈しました。 下記の意味で合っていますか? // $dbと$user_idを受け取ったget_user関数は、$dbと$sqlを受け取ったユーザーの情報を取り出す function get_user($db, $user_id){ // データベースに接続してusersテーブルからuser_idが$user_idに一致するuser_id、name、password、typeを1行だけ表示する $sql = " SELECT user_id, name, password, type FROM users WHERE user_id = {$user_id} LIMIT 1 "; return fetch_query($db, $sql); } // $dbを受け取ったget_login_user関数は、変数dbと変数login_user_idを受け取ったget_user関数を返す function get_login_user($db){ // 変数login_user_idをセッションのユーザーIDと定義する $login_user_id = get_session('user_id'); return get_user($db, $login_user_id); }

    • ベストアンサー
    • PHP
  • oracle 7.3のアクセス権限

    パスとユーザー名が書かれたテーブルがあったとして、 それが一致するものだけ、他のデータを閲覧できるようにしたいのです。 テーブル上のデータはみられたくあ 上手くviewやアクセス権限を操作してパスとユーザーを一致させる方法はないでしょうか? 接続方法はVBAからoo4oを用いています。オラクルのアカウントは一つです。 select countのみ許可とかできればいいのですが、それは無理でしょうか? データベース初心者ですが宜しくお願いします。

専門家に質問してみよう