- ベストアンサー
MSアクセスで条件に合うデータのみを抽出してフォームを開く方法とは?
- MSアクセスの初心者が条件に合うデータのみを抽出してフォームを開く方法についてご指導ください。
- 現在は汎用フォームを使用して[社員No]が1のデータのみを開いていますが、希望としては照合した[社員No]のデータのみを開きたいです。
- パスIDとパスワードが一致する[社員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
お礼
ありがとうございます!レベルが高すぎて解読に時間を要しましたが、lngID = DBLookup("ID", "パス一覧", "パスID='" & Me.パスID & "' AND パスワード='" & Me.パスワード & "'", 0) If lngID > 0 Then DoCmd.OpenForm "パス一覧", , , "ID=" & lngID を元のVBAと合わせてみたらうまく機能しました!本当にありがとうございます。希望の通りとはなりましたが、ご指導いただいた全てがまだ解読できていません。奥が深いですね・・・。