LinkRefフィールドが指定された値に等しく、クリアランス適用またはクリアランスレベルが特定の値であるすべてのレコードをユーザーが表示できるフォームがあります。
LinkRef は、前のフォームから OpenArgs を使用して取得されるユーザー ID です。私が現在持っている form_load のコードは次のとおりです。
Private Sub Form_Load()
'MsgBox Me.OpenArgs
Me.C_LinKRef = Me.OpenArgs
Me.chbToggleEdit.Value = False
'MsgBox Me.C_LinKRef
Dim mySQL As String
mySQL = _
"Select * " & _
"From TabClearDetail " & _
"Where (C_LinKRef = " & Me.C_LinKRef & ") " & _
"And ([Clearance Applying For] = 'BPSS' " & _
"Or [Clearance Applying For] = 'BPSS (EDF)' " & _
"Or [Clearance Applying For] = 'BPSS (Magn)' " & _
"Or [Clearance Applying For] = 'BPSS (Sella)' " & _
"Or [Clearance Applying For] = 'BPSS Equiv' " & _
"Or C_ClearanceLevel = 'BPSS' " & _
"Or C_ClearanceLevel = 'BPSS (EDF)' " & _
"Or C_ClearanceLevel = 'BPSS (Magn)' " & _
"Or C_ClearanceLevel = 'BPSS (Sella)' " & _
"Or C_ClearanceLevel = 'BPSS Equiv' " & _
"Or C_ClearanceLevel = 'DESTROYED' " & _
"Or C_ClearanceLevel = 'Lapsed' " & _
"Or C_ClearanceLevel = 'NOT_FLWDUP' " & _
"Or C_ClearanceLevel = 'NOT_SPECIFIED' " & _
"Or C_ClearanceLevel = 'Refused' " & _
"Or C_ClearanceLevel = 'Withdrawn');"
Me.RecordSource = mySQL
'MsgBox Me.RecordsetClone.RecordCount
End Sub
一致するレコードがある場合、mySQL は正常に動作するようです。しかし、指定された人がこれらのクリアランスレベルを持っておらず、申請していないために記録がない場合もあります。その場合、フォームが空白になるか、クリアランスレベルがないことを示すメッセージが表示されるようにしたいと思います一致するレコード。
現在、一致するレコードがない場合、フォームは LinkRef を取得しますが、他のすべてのテキスト ボックスに完全に異なるレコードの値を入力します (最後に表示したレコードのようです)。これを修正する方法がわからないので、RecordsetClone.RecordCount を使用して 0 に等しい場合は msgbox を使用しようとしましたが、少なくとも 1 つのエントリが常にあるように見えるため、それを行うのが遅いようです。 0 である必要があります。別のフィールドからのデータがテキスト ボックスに既に取り込まれているため、1 が検出されます。
LinkRef テキスト ボックスは、OpenArgs から入力されます。他のすべてのテキスト ボックスは、TabClearDetail テーブルを参照して値を取得するクエリを使用して入力されます。クエリを使用するか、コードを使用する方がよいと思い始めていますが、OpenArgs の使用方法がわかりませんでした。コードよりもクエリを作成する方がはるかに高速です。
@Roland の投稿への返信で参照する保存ダイアログのコードを次に示します。このコードは Form_Close() サブで呼び出されます。
Private Sub SaveDialog()
Dim Msg, Style, Title As String
Dim Response As Integer
Msg = "Would you like to save your changes?"
Style = vbYesNoCancel
Title = "Save Changes"
On Error GoTo Err_BackFromAddBPSSButton_Click
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
'DoCmd.Close
DoCmd.OpenForm ("Basic Personal Information")
Else
If Response = vbNo Then
Me.Undo
'DoCmd.Close
DoCmd.OpenForm ("Basic Personal Information")
End If
End If
Exit_BackFromAddBPSSButton_Click:
Exit Sub
Err_BackFromAddBPSSButton_Click:
MsgBox Err.Description
Resume Exit_BackFromAddBPSSButton_Click
End Sub
非常に冗長な質問をお詫びします。うまくいけば、すべての詳細が必要であり、それが理にかなっていることを願っています。どんな提案も大歓迎です!