1

私はこのトピックについて多くのことを見つけましたが、それでもそれを機能させることができないようです。次のコード行があります。

If isNull(DLookup("id", my_table, my_field & "='" & temp_value & "'")) Then

問題は、の値my_fieldmy_table「O'Connell」(一重引用符付き)であり、Dlookupにそれを見つける方法がわかりません。私は使用してみました:

my_field & "=" & chr(34) & temp_value & chr(34)

そして、他の多くのマルチクォートオプションがありますが、私はそれを機能させることができないようです。VBAを使用してtemp_valueを変更し、一重引用符を含めるか含めないようにすることはできますが、一重引用符は既にテーブルに存在するため、一致することを確認する必要があります。どうやって取り組むのかわからない。

4

2 に答える 2

2

ここでの提案と回答は機能し、テキスト内の引用符に関する多くの問題を解決しますが、私の問題は、実際には一重引用符ではなく、一重引用符として見た文字に関連することになりました。価値のあることとして、私が使用していたデータはSiebelからエクスポートされたものであり、私が見た一重引用符は実際にはchr(146)でした。ここで、通常の一重引用符(より適切な用語がないため「通常」と言います)はchr( 39)。

引用符に問題がある場合は、文字列内の各文字のchr値を調べると便利です。これを行うためのより良い方法があるかもしれませんが、このループは役立つはずです:

for i=1 to len(a_string)
    debug.print mid(a_string,i,1) & " - " & asc(mid(a_string,i,1)
next i

asc関数は、文字のchrコードを提供するため、文字列をループして、各文字とそれに関連するchrコードをイミディエイトウィンドウに表示します(debug.printを使用)。これは、文字列に存在する可能性のある他の「非表示」(または非表示)文字を見つけるのにも役立ちます。

発見されたら、HansUpによって提案されたように、replace関数を使用してchr(146)を2つの一重引用符(2つのchr(39))に置き換えました。これは完全に機能しました。

于 2012-08-30T12:53:45.943 に答える
1

この例でmy_tableは、は私のテーブルmy_fieldの名前であり、はそのテーブルのフィールドの名前です。

Dim strCriteria As String
Dim temp_value As String
temp_value = "O'Connell"
' use double instead of single quotes to avoid a '
' problem due to the single quote in the name '
strCriteria  = "my_field = """ & temp_value & """"
Debug.Print strCriteria
If IsNull(DLookup("id", "my_table", strCriteria)) Then
    MsgBox "no id found"
Else
    MsgBox "id found"
End If

必要に応じて、名前内の一重引用符を2倍にすることができます。これは機能するはずですが、どちらが二重引用符でどちらが一重引用符であるかを区別できることを確認してください。

strCriteria = "my_field='" & Replace(temp_value, "'", "''") & "'"
于 2012-08-23T05:54:29.083 に答える