MSアクセスで条件に合うデータのみを抽出してフォームを開く方法とは?

このQ&Aのポイント
  • MSアクセスの初心者が条件に合うデータのみを抽出してフォームを開く方法についてご指導ください。
  • 現在は汎用フォームを使用して[社員No]が1のデータのみを開いていますが、希望としては照合した[社員No]のデータのみを開きたいです。
  • パスIDとパスワードが一致する[社員No]に置き換える方法を教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
noname#140971
noname#140971
回答No.1

パス一覧: [ID]_[社員No.]_[社員名_____]_[パスID]_[パスワード] ___1_______101__鈴木 一郎_____S101_____S777 ___2_______102__中村 主水_____N102_____N777 Private Sub Form_Load()   Me.TimerInterval = 100   Me.コマンド0.Enabled = False End Sub Private Sub Form_Timer()   Me.コマンド0.Enabled = CBool((Len(Me.パスID & "") > 0) And (Len(Me.パスワード & "") > 0)) End Sub Private Sub コマンド0_Click() On Error Resume Next   Static isClick As Boolean   Dim lngID  As Long      If Not isClick Then     isClick = True     lngID = DBLookup("ID", "パス一覧", "パスID='" & Me.パスID & "' AND パスワード='" & Me.パスワード & "'", 0)     If lngID > 0 Then       DoCmd.OpenForm "パス一覧", , , "ID=" & lngID     Else       MsgBox "[パスID]と[パスワード]とが一致しませんでした。", vbInformation, " お知らせ"     End If     isClick = False   End If End Sub フォームに[パスID]と[パスワード]との入力欄と合致するフォームをオープンするコマンド釦とを配置。 この場合、[パスワード]で{Enter}を押さないでコマンド釦を押すことも可能。 この時には、ちょっとユーザは該当するフォームが開かない原因h¥が判らずに戸惑うことも。 そこで、ともかく入力欄の入力が完了しているか否かを常時にチェックすることに。 そうして、入力がどちらも済んだ時点でDBLookup関数で[ID]を取得。 以下のDBLookup関数を使うも、AccessのDLookup関数を使うもどちらでも構いません。     lngID = Nz(DLookup("ID", "パス一覧", "パスID='" & Me.パスID & "' AND パスワード='" & Me.パスワード & "'"), 0) ただし、見つからなかった場合の対策要領は、このように少し違います。 Public Function DBLookup(ByVal strField As String, _              ByVal strTable As String, _              Optional ByVal strWhere As String = "", _              Optional ByVal ReturnValue = "") As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim strQuerySQL As String   Dim rst     As ADODB.Recordset   Set rst = New ADODB.Recordset   strQuerySQL = "SELECT " & strField & " FROM " & strTable   If Len(strWhere) > 0 Then     strQuerySQL = strQuerySQL & " WHERE " & strWhere   End If   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

chibaole
質問者

お礼

ありがとうございます!レベルが高すぎて解読に時間を要しましたが、lngID = DBLookup("ID", "パス一覧", "パスID='" & Me.パスID & "' AND パスワード='" & Me.パスワード & "'", 0)     If lngID > 0 Then       DoCmd.OpenForm "パス一覧", , , "ID=" & lngID を元のVBAと合わせてみたらうまく機能しました!本当にありがとうございます。希望の通りとはなりましたが、ご指導いただいた全てがまだ解読できていません。奥が深いですね・・・。

関連するQ&A

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

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

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

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

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

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

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

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

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

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

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

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

  • アクセス2007 フォームフィルターをレポートにも

    アクセス2007 フォームフィルターをレポートにも フォームA---「家」データ        「家ID」 佐藤さん、斎藤さん、住所、電話等 フォームB---「家族内」データ        各家の家族構成 お父さんの誕生日、お母さんの誕生日などなど「家ID」有り フォームBでフィルターをかけ、「家ID」を元にフォームAで該当するデータを表示させています。 ----------------------------------------------------   Set rs = Forms.フォームB.RecordsetClone   Do Until rs.EOF     フィルタ = フィルタ & "," & rs!家ID rs.MoveNext Loop rs.Close   フィルタ = "家ID IN (" & Mid$(フィルタ, 2) & ")"   DoCmd.OpenForm "フォームA", WhereCondition:=フィルタ, ---------------------------------------------------- ※フィルタは255文字を超える場合有り このフォームAを元に レポートC(はがき宛先)で DoCmd.OpenReport "レポートC", acViewPreview, WhereCondition:=フィルタ(または、forms.フォームA.Filter) とすると「フィルターが長い」とエラーになります。 OpenFormでのWhereCondition:=は長くても受け付けますが、OpenReportの方は受付ないみたいです。 リレーションの知識不足のまま、進めてきたシッペ返しが今きているのですが、 こんな場合どうしたらフォームの検索条件をレポートに反映できるでしょうか?

  • MS-ACCESSのフォーム切り替え表示について

    フォームA(少量データ)からフォームB(大容量データ)を呼び出して表示させる方法について 教えてください。 まず、フォームAは複数の個人名のボタンとサブフォームで全員の最新情報が表示される ものを作っています。 この個人名のボタンをクリックするとフォームBにその個人の全情報を表示させる仕組みなのですが、フォームBは情報量が多い為、表示させるのに時間がかかります。 そこで下記のようなVBAを記述し、Do~LoopでフォームBが開くまでの時間を稼ごうと思っても 次の処理が行なわれてしまい、エラーになってしまいます。 Private Sub ボタン_Click() DoCmd.OpenForm "フォームB" Do Until SysCmd(acSysCmdGetObjectState, acForm, "フォームB") = acObjStateOpen DoEvents Loop Application.Forms![フォームB].Controls![担当者名] = "担当A" Me.フォームB.Requery End Sub これでフォームBが開くまで待ってから次のステップのフォームB内の条件設定や Requery処理を行なうと思っているのですがうまくいきません。 DoEvents処理が入っているせいかと思い、はずしたのですがそれでもうまくいきません。 もともとはフォームBだけで運用していたのですがデータ量が増えて表示に時間がかかり すぎるので新たに項目は同じで件数の少ない最新情報のみのテーブルを作成し、 それをもとにフォームAを作成しています。 ですのでフォームA,Bともに同じようなサブフォームになっており、またそれぞれの サブフォームを構成するテーブルが異なる為に1つのフォームでの処理ができません。 拙い説明ですがどなたかご教授願います。

  • 無効なパスというエラーメッセージが出てフォームが開かない

    Access2000で検索システムを作りました。条件を入力したらマッチするデータが表示される(フォームを開く形にしています。)という流れです。それまで正常に機能していたのですが,ネットワーク上のパソコンの名前を変えたところ、「'\\変更前のパソコン名\****\**.mdb'は無効なパスです。パス名を正確に指定しているか、またはファイルが属するサーバーに接続しているかを確認して ください。」というエラーが出てフォームが開きません。  エラーが出て止まってしまう箇所の記述は DoCmd. Openform "フォーム名"となっています。フォーム名の前にパスを指定することができるのでしょうか?ヘルプではさがせなかったのですが。どなたか回避方法を教えてください。

  • Access2003 条件を指定してフォームを開く

    アクセス初心者です。 初歩的な質問で本当に申し訳ないんですが、教えてください! 下記コードに条件を追加してフォームを開きたいのですが、どのようなコードを追記すればよろしいでしょうか? 今までは「SAPコード」が一致するものを表示していましたが、それにプラス「品番」も一致するもので条件を変更したいです。 ※今回の対象フォーム名:SCALE  メインフォーム名:発注実績 Else ' [SCALE] フォームを開き、現在のSAPコードのSCALEを表示します。 strDocName = "SCALE" strLinkCriteria = "[SAPコード] = Forms![発注実績]![SAPコード]" DoCmd.OpenForm strDocName, , , strLinkCriteria DoCmd.MoveSize (1440 * 0.78), (1440 * 1.8) End If 下記コードに条件式を追記すればいいと思いますが、ちょっと上手くいきませんでした。。。 strLinkCriteria = "[SAPコード] = Forms![発注実績]![SAPコード]" よろしくお願いします!!