• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MSアクセス 条件に合うデータのみの抽出してフォームを開けたい)

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

このQ&Aのポイント
  • MSアクセスの初心者が条件に合うデータのみを抽出してフォームを開く方法についてご指導ください。
  • 現在は汎用フォームを使用して[社員No]が1のデータのみを開いていますが、希望としては照合した[社員No]のデータのみを開きたいです。
  • パス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