0

次のシンプルで簡単なコードがあります。

Private Sub Add_Click()
Dim db As Database, rsAtype As Recordset, Criteria As String

    Set db = CurrentDb
    Set rsAtype = db.OpenRecordset("Asset_Types", DB_OPEN_DYNASET)

Criteria = "Type='" & NOA & "'"

rsAtype.FindFirst Criteria

'****  Following code is Adding a new type of asset to the Asset_Types Table****
If rsAtype.NoMatch Then

        rsAtype.AddNew
        rsAtype("Type") = Me!NOA
        rsAtype("Description") = Me!Desc
        rsAtype.Update
MsgBox "New Asset Added"
    rsAtype.Close
    db.Close
    DoCmd.Close
Else
        MsgBox "Asset Type " & Me!NOA & " already exists.", 48, "ERROR!"
        Me!NOA.SetFocus

End If

End Sub

ここで、アセット タイプが既に存在するかどうかを検索し、更新する代わりに警告を表示します。If ステートメントを 1 つだけ使用してテーブル内の複数の列を検索する方法はありますか? ネストされた If ステートメントを作成したくありません。

4

2 に答える 2

0

はい、複数の条件を組み合わせるだけです。例えば:

strCriteria = "[PlantID]=" & Me!PlantID & " AND [Location]= '" & Me!Location & "'"

ここで、最初のパラメーターPlantIDは整数で、2 番目のパラメーターはLocation文字列 (したがって、一重引用符) です。

于 2013-05-29T01:26:03.517 に答える
0

私は答えを見つけました.ANDは引用符の一部でなければなりませんでした:

古いコード

Criteria = "Supplier_name='" & Me!Supnamebox & "'" And "Contact_name='" & Me!ContPerbox & "'" And "Contact_number='" & Me!Me!Phonebox & "'" And "Contact_email='" & Me!emailbox & "'"

新しいコード

Criteria = "Supplier_name='" & Me!Supnamebox & "' AND Contact_name='" & Me!ContPerbox & "' AND Contact_number='" & Me!Phonebox & "' AND Contact_email='" & Me!emailbox & "'"

私はそれをテストして動作しますが、アドバイスの言葉ですが、構文は正しいですが、使用していたロジックが間違っています.ANDの代わりにORを使用する必要があります. OR は、一致するフィールドがあるかどうかをテストします。AND は、すべてのフィールドが一致する場合にのみエラーを返します。それ以外の場合は、重複レコードを追加できます。

于 2013-05-29T23:56:38.117 に答える