• 締切済み

MSアクセス 条件に合うデータのみを抽出してフォームを開けたい

アクセスの初心者です。ご指導よろしくお願いします。 フォームで条件に合うデータのみを抽出してフォームを開けたいと四苦八苦しています。 現在は汎用フォームを使い、パスIDとパスワードを入れて照合するとDoCmd.OpenForm "フォーム名", , , " [社員No] = 1" で[社員No]「1」のデータのみ抽出した別フォームが開くようになっています。 希望としては、照合した人が照合した人が持つ[社員No]のデータのみが開くようにしたいと考えています。 パス管理のテーブルは ID、 社員No、社員名、パスID、パスワードになっています。   DoCmd.OpenForm "フォーム名", , , " [社員ID] = 1" の「=1」のところが[パスID][パスワード]と一致する社員Noに置き換える方法を教えてください。 わかりにくい質問で申し訳ないですが、よろしくお願いします。

みんなの回答

  • tohru999
  • ベストアンサー率49% (76/154)
回答No.3

かなり昔にAccessをやっていただけなので、コードの書き方が昔風かもですが・・・ (以下のような理解で正しいでしょうか?) [名称の定義] パス管理のテーブル ・・・ T1 パスIDの入力(TextBox) ・・・ txtID パスワードの入力(TextBox) ・・・ txtPass [コード] Dim objMyDB As Database Dim objRecordset As Recordset Set objMyDB = DBEngine(0)(0) Set objRecordset = objMyDB.OpenRecordset("SELECT [社員No] FROM [T1] WHERE [パスID] = '" & Me![txtID].Value & "' AND [パスワード] = '" & Me![txtPass].Value & "' ", dbOpenForwardOnly, dbReadOnly, dbReadOnly) If objRecordset.RecordCount = 0 Then MsgBox ("IDとPASSが一致しない") Exit Sub End If DoCmd.OpenForm "フォーム名", , , " [社員ID] = " & CStr(objRecordset.Fields(0).Value) objRecordset.Close Set objRecordset = Nothing Set objMyDB = Nothing

chibaole
質問者

お礼

すみません!ちょうどさきほど行き違いで回答(補足)してしまったところです。別途の画面で解決はできましたが、せっかく回答いただいたものは勉強の為、トライしてみます。ご親切に本当にありがとうございました。

  • tohru999
  • ベストアンサー率49% (76/154)
回答No.2

No.1です。 文字列ならば、シングル クォーテーションを入れた方が良かったかもです。 ↓ DoCmd.OpenForm "フォーム名", , , "[パスID] = '" & 入力されたパスID & "' AND [パスワード] = '" & 入力されたパスワード & "' "

chibaole
質問者

お礼

早速の回答ありがとうございました。 早速やってみましたが、ちょっと目的と違う結果になってしまいました・・・。私の伝え方がまずかったのと思いますのでもう一度お伝えします。 認証後に開けたいフォームは[パスID]と[パスワード]のフィールドがないフォームで、関連できるのは[社員No]だけです。 フォームを開ける前に汎用認証フォームでIDとパスワードを入れ、パス管理テーブルと認証させ、そのテーブル内のID、パスワードに関連する社員Noを抽出させてから開けたいフォームの社員Noにマッチさせたいのです。(うまく伝わりますでしょうか・・・)

chibaole
質問者

補足

何故か2つ質問が流れてしまったようで・・・、別の画面で解決できました。 ありがとうございました。

  • tohru999
  • ベストアンサー率49% (76/154)
回答No.1

DoCmd.OpenForm "フォーム名", , , "[パスID] = " & 入力されたパスID & " AND [パスワード] = " & 入力されたパスワード

関連するQ&A

  • MSアクセス 条件に合うデータのみの抽出してフォームを開けたい

    アクセスの初心者です。ご指導よろしくお願いします。 フォームで条件に合うデータのみを抽出してフォームを開けたいと四苦八苦しています。 現在は汎用フォームを使い、パスIDとパスワードを入れて照合するとDoCmd.OpenForm "フォーム名", , , " [社員No] = 1" で[社員No]「1」のデータのみが開くようになっています。 希望としては、照合した人が照合した人が持つ[社員No]のデータのみが開くようにしたいと考えています。 パス管理のテーブルは ID、 社員No、社員名、パスID、パスワードになっています。   DoCmd.OpenForm "フォーム名", , , " [社員ID] = 1" の「=1」のところが[パスID][パスワード]と一致する社員Noに置き換える方法を教えてください。 わかりにくい質問で申し訳ないですが、よろしくお願いします。

  • Access2003 フォームを開くときの抽出設定について

    WindowsXP SP3+Access2003 環境です。 メニューフォームからデータのあるフォームを開こうと考えています。 ボタンウィザードでボタンを用意しようと思い、ウィザードの抽出条件としてメニューフォーム上のテキストボックス[txt_出庫用商品名]を設定しました。 データフォームの[商品名称]というフィールドと全てマッチすると抽出されるのですが、抽出したい文字列を【含む】場合の書式がうまく書けません。 (=ワイルドカードの配置がわかりません) ウィザードから自動的に記述されている以下について、"Me![txt_出庫用商品名]"を【含む】データを抽出する場合の記述を教えてください。 stLinkCriteria = "[商品名称]=" & "'" & Me![txt_出庫用商品名] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria よろしくお願い致します。

  • [Access2000] フォーム間で値の受け渡し

    フォームから、DoCmd.OpenFormを使って、 別のフォームを子画面として開くようにしています。 そのときフォーム間で、Functionの引数と戻り値のような感覚で 値の受け渡しをしたいと思っています。 値をわたす方は、OpenFormの引数のいちばん最後にある OpenArgsを使うことでうまく解決できたのですが、 値を返す方のやり方がイマイチわかりません。   DoCmd.OpenForm "フォーム名",,,,OpenArgs     (カンマの数が間違ってるかも…とりあえずテキトーです) という記述方法の他に、   DoCmd.OpenForm("フォーム名",,,,OpenArgs) という記述もできるようなんですが、そのようにすると 「=」をつけろ、というようなエラーがその場で出ます。 MsgBoxでも同じようなことが起こりますが、 MsgBoxだと「vbOk」やら「vbCancel」やらを返してくれるので OpenFormでも似たようなことができるのかな…と思うのですが。

  • Access フォームで条件抽出したものを印刷プレビューしたい

    条件抽出したフォームを印刷プレビューしたいのですが、プレビューすると 全データが表示されてしまいます。 出来ればフォームのままプレビューしたいのですが、この場合は、 別にレポートを作成しないとダメでしょうか? 1.メインフォームにサブフォームを組み込んであります。 2.サブフォームはクエリに関連させています。 3.コマンドボタン[印刷]で印刷プレビューを表示させたい。 メインフォーム:商品 サブフォーム:取引商品 クエリ:商品リスト -----コマンド[印刷]のイベント----- Private Sub cmdPrint_Click() '商品取引記録を印刷プレビューで開く DoCmd.OpenForm "商品", acViewPreview, Me.Filter End Sub

  • アクセスのフォームで抽出したデータに追加をしたい。

    アクセスのフォームで抽出したデータに追加をしたい。 はじめまして。アクセスの初心者ですが、どうぞお願いいたします。 添付のシートのようなアクセスのフォーム画面があります。これの前に、別のフォームで ORDER NO. 品番、数量、、、など、入力し終わっているので、その入力したデータがテーブルに入っています。 ここのフォームでは、ORDER NOを入力し、さきほど入力してテーブルに入っている品番数量などのデータを呼び出すようになっています。(私が作ったシステムではないのですが、抽出するためのクエリと結びついているようです) ここの画面において、たとえば、もう一つデータを加えたいとき、(この添付の画面で言えば、4番目のデータを付け加えたいとき)どうすればいいのでしょうか。 たとえば、品番、数量などだけ入力したところで、テーブルにデータは反映されません。 1,2,3番までのデータには、さきほど申しましたように、ORDER NO.も含めて前の画面で入力済み(テーブルに入っています)から、大丈夫ですが、それ以降のデータを付け加えるとなると、ここの画面でもひとつひとつORDER NOも入力しないと、テーブルに追加されなくなります。 添付したシートの右のほうに(ORDER NO)とあると思うのですが、1,2,3までのデータには、この欄にORDER NOが表示されます。だから、更新可能です。4番以降、追加したかったら、ここにひとつひとつORDER NOを入力しなければテーブルに反映されません。つまりお尋ねは、4番、5番のデータを入力したときに、この(ORDER NO)のところに自動的にORDER NOが入力され、そしてテーブルにデータが入るようになるにはどうしたらよいのでしょうか。 というのも、以前はそうなっていたのですが、私が一度ここのフォームをいじってしまったためこのような不具合が起こってしまったのです。しかし、私がさわった(一度消してしまった)のは、この(ORDER NO)のところだけですので、ここさえ直せば、今のトラブルは解消できるものと思います。 どなたか、説明が下手で申し訳ありませんが、助けてください。

  • ACCESS フォームからフォームへの連携

    例えば  A_テーブル(フィールド:会員NO・顧客名・連絡  先)でのA_フォーム上でコマンドボタン「B」を  作成しています。ボタンをクリックすると   Docmd. OpenForm"B_フォーム" が実行されます。  実行され新しく開いた  B_フォーム(フィールド:管理NO・会員NO・備考) の会員NOの中に、その時開いていたA_テーブルの会 員NOが入っている状態にすることは可能でしょう  か? 乱文で大変申し訳ありません。 現在顧客管理のデータベースを作りはじめましたが なにぶん手探り状態ですので、今後ともよろしくお 願いいたします。 ( WindowsXP : Access2000)

  • ACCESSフォームフィルタで抽出したデータのみをレポートで表示する方法

    フォームフィルターでデータを抽出した後,抽出されたデータのみをレポート上に表示させるコマンドボタンをフォーム上に作っています。 下記のコードを作成しましたが,これだと抽出前の全部のデータが表示されてしまいます。 どうしたら良いでしょうか。 Private Sub ラベルプレビュー_Click() Dim stDocName As String DoCmd.Echo False, stDocName = "rpt宛名ラベル" DoCmd.OpenReport stDocName, acViewDesign DoCmd.SelectObject acReport, stDocName, False ' Reports(stDocName).RecordSource = Me.RecordSource DoCmd.OpenReport stDocName, acViewPreview End Sub

  • ACCESS フォームでデータシートビューの表示

    いつもお世話になっています。 ACCESSでフォーム上のコマンドをクリックすると、表示するデータを「データシートビュー」に固定するにはどうしたいいのでしょうか? 現在 DoCmd.OpenForm "F_情報", AcFormDatasheetTable としていますが、フォームビューで表示されてしまいます。 どこが間違っているのか分かりません・・・。 よろしくお願いします。

  • アクセスフォームについて教えて下さい。

    アクセスフォームについて教えて下さい。 テーブル T_設備 設備管理No. 状態ID(フィールドプロパティ→コンボボックス) 分類ID(フィールドプロパティ→コンボボックス) 設備名 (その他項目あり) T_状態 ID  001  稼動中 002  停止中 T_分類 ID 001  専用機 002  マシニング T_設備、T_状態、T_分類はリレーションシップを組んでいます。 クエリ T_設備を元にクエリを作成 Q_設備 (全データを表示) 稼動中の設備を抽出 Q_稼働設備 停止中の設備を抽出 Q_停止設備 フォーム Q_稼働設備を元にフォームを作成 F_稼働設備一覧(表形式) Q_稼働設備を元にフォームを作成 F_稼働詳細(単票形式) 表形式のフォーム(F_稼働設備一覧)にコマンドボタン(コマンド1)を作成、 OPENFORMメソッドでクリックした行のデータを表示させるようにしました。 (単票形式のF_稼働詳細でデータの詳細を確認したい) Private Sub コマンド1_Click() DoCmd.OpenForm "F_設備詳細" Forms!F_設備詳細!設備管理No. = Forms!F_稼働設備一覧!設備管理No. End Sub しかし、コンボボックスの内容を変更(稼動中から停止中へ)し、フォームを閉じ、 再度F_稼働設備一覧を開くと、データがQ_停止設備へ移動しておらず、 コンボボックスも稼動中に戻ってしまっています。 コマンド1ボタンからではなく、直接F_設備詳細を開き、コンボボックスの停止中を 選択した場合は、データはQ_停止設備へ移動します。 OpenFormメソッドの記入に問題があるのでしょうか? 色々と試しましたが、解決できませんでした。 よろしくお願いいたします。   

  • Access 抽出したデーターの詳細の連続表示

    Filterで抽出した複数のデーターの詳細をそのデーターの順で連続して表示したいのでご指導ください。 F_物件検索  (メインフォーム) F_検索結果  (サブフォーム用) sub検索結果 (サブフォーム) F_店頭用   (詳細表示用) 抽出された最初のデーターの詳細を表示する場合は下記の通りで問題なく動作します。 Private Sub cmd物件詳細_Click() DoCmd.OpenForm "F_店頭用", acNormal, , "物件番号 = " & Me!sub検索結果.Form!物件番号, acFormReadOnly End Sub 上記で表示されたF_店頭用の詳細画面に【次へ】のボタンをAccessのマクロで設定しても、表示されるデーターは抽出されたものではなく、テーブルのデーター順に表示されます。 そこで、OpenFormコマンド、他で何とかならないものでしょうか? 下記ではエラーがでます。 Private Sub cmd連続詳細_Click() DoCmd.OpenForm "F_店頭用", , Me!sub検索結果, acFormReadOnly End Sub 尚、全てのデーターは下記にあります。 www.ky-housing.jp/oshiete-goo/q-2.accdb