0

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

非常に冗長な質問をお詫びします。うまくいけば、すべての詳細が必要であり、それが理にかなっていることを願っています。どんな提案も大歓迎です!

4

2 に答える 2