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