web-dev-qa-db-ja.com

Microsoft AccessVBA-実行時エラー「3075」

実行時エラー「3075」が発生しました。私はVBAの初心者です! >。<どこで問題が発生したのかわかりますか?解けない….

たとえば、テキストボックス(txtMainName)に「Sally」という名前を入力すると、検索ボタンをクリックするとエラーがポップアップ表示されます。

エラー:

実行時エラー「3075」:

クエリ式の構文エラー(演算子がありません) 'および[主な申請者名]' Sally 'のように。

Public Sub Search_Record()

Dim stDocName As String
Dim stLinkCriteria As String
Dim stLinkCriteria1 As String
Dim stLinkCriteria2 As String


    stLinkCriteria = ""
    stDocName = "frmDisplayInfo"

    If (Me!txtMainName <> "") Then
        stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"
        stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria1
    End If

    If (Me!txtIDNo <> "") Then
        stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'"
        stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2
    End If

    '(*This part is highlighted*)
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    DoCmd.Maximize

End Sub
5
GuessWho

Runtime error 3975Invalid operatorであり、access vba runtime error 3075でのグーグル検索によると(自分で作成した可能性があります)。

問題は、""の値のみをstCriteriaに割り当てることです。最初のifステートメントが実行されると、stCriteriaには無効なstCriteria AND stCriteria1の値が割り当てられます。

2番目のifステートメントが実行された場合も、同じことが起こります。 (実際、両方が実際に実行されている場合、stCriteriaにはAND stCriteria1 AND stCriteria2が含まれるようになりました。これはさらに悪いことです。)

解決策は、必要な場合にのみANDを追加するようにコードを変更することです。

stLinkCriteria = ""
stDocName = "frmDisplayInfo"

If (Me!txtMainName <> "") Then
    stLinkCriteria = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"
End If

If (Me!txtIDNo <> "") Then
    If stLinkCriteria <> "" then
        stLinkCriteria = stLinkCriteria & " AND "
    End If
    stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'"
    stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2
End If

将来の参考のために、これらの種類の問題を解決する方法は、エラーの原因となった行(ここではDoCmd.OpenForm行)の直前の変数(この場合はstCriteria)の値を実際に調べることです。 )が実行されます。これを行うには、エラーが発生した行にブレークポイントを設定し、ブレークポイントに到達するまでアプリを実行してから、変数の値を調べます。これにより、正確に変数に何が含まれているかがわかり、問題が明らかになる可能性があります。

7
Ken White

ロジックから、stLinkCriteriaが「and」で始まっているようです。これがエラーの原因です。

あなたはおそらく置くべきです:

If (Me!txtMainName <> "") Then

    stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"

    if stLinkCriteria <> "" then                   <==== add this

       stLinkCriteria = stLinkCriteria & " and "   <==== and this

    end if                                         <==== and this

    stLinkCriteria = stLinkCriteria & stLinkCriteria1  <=== change this

End If    

それがうまくいくことを願っています-そうでなければ、ロジックは良さそうです。

3
cardmagik

このエラーは、ドットと次のフィールド名の間の余分なスペースから発生します。

DoCmd.RunSQL "UPDATE  cp  INNER JOIN [char_lib] ON [cp]. [library_id]  = [char_lib].[id] set..

Microsoftへの注意:より正確で有用なエラーメッセージを作成してください。ありがとう。私はあなたがこれを正しく理解することは間違いありません。

0
Byterbit