2012-08-23 2 views
1

이 항목에 대해 많은 것을 찾았지만 여전히 작동하지는 않습니다. 나는 다음 코드 줄이 : 문제는 값이 my_tablemy_field가 (작은 따옴표 포함) "커넬"입니다에필드에 작은 따옴표가있을 때 Access VBA에서 Dlookup 사용

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

을, 나는을 DLookup 그것을 찾을하는 방법을 잘 모르겠어요 . 나는 사용하려고 시도했다 :

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

다른 멀티 쿠어 옵션의 호스트지만, 나는 단지 작동시키지 않는 것 같습니다. VBA를 사용하여 작은 따옴표를 포함하거나 포함하지 않도록 temp_value를 수정할 수는 있지만 작은 따옴표가 이미 테이블에 있으므로이 테이블이 일치하는지 확인해야합니다. 나는 그걸 어떻게 다루어야할지 모르겠다.

+2

작은 따옴표를 두 배로 이스케이프 처리하여 작은 따옴표로 바꿀 수 있습니다. –

+0

Replace ("str'ing", " '", "' '")는 속임수를 사용합니다. – Scotch

답변

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 

오름차순 기능은 당신에게 문자에 대한 CHR 코드를 제공합니다, 그래서 이것은 문자열을 통해 루프하고 각 문자를 표시 및 관련 CHR 직접 실행 창 (debug.print 사용)의 코드 또한 문자열에있을 수있는 다른 "숨겨진"(또는 보이지 않는) 문자를 찾는 데 도움이됩니다.

일단 발견되면 HansUp에서 제안한 것처럼 replace 함수를 사용하여 chr (146)을 두 개의 작은 따옴표 (두 개의 chr (39))로 바꾸고 완벽하게 작동합니다.

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 

, 당신은 이름에서 작은 따옴표를 두 배로 할 수 있습니다. 이것은 제대로 작동하지만 double과 single quote를 구별 할 수 있는지 확인하십시오. 여기 제안에 대한 답변을 작동 및 텍스트에 따옴표와 함께 많은 문제를 해결할 않는 있지만

strCriteria = "my_field='" & Replace(temp_value, "'", "''") & "'" 
+1

@ HansUp - 이것은 옳은 것이며 고맙습니다.하지만 실제로이 두 가지 옵션을 모두 시도했지만 어느 것도 작동하지 않았습니다. 내 테이블에서 아포스트로피가있는 값은 실제 곱슬 아포스트로피 중 하나 (chr (146))가 아니라 정기적 인 아포스트로피 (chr (39))가 있음이 밝혀졌습니다. (아마도 그 각각에 대해보다 기술적으로 정확한 이름이있을 것입니다. 그러나 나는 그것들이 어떻게 보이는지 설명하고 있습니다.) Access에서는 테이블을 볼 때 차이를 말할 수 없었습니다 - 값을 복사 할 때 알아 냈습니다. 테스트를위한 메모장. 나는 누군가가 이것을 장래에 발견 할 수 있기를 바랍니다. 감사! – rryanp

+0

그 해결책을 답안으로 제출해두면 더욱 두드러집니다. 그리고 내 대답 대신에 대답을 받아 들일 때 시스템에서 그렇게 할 수 있습니다. 안부, 한스 – HansUp

+0

@rryanp 나는 그 아포스트로피가 싫다. 1 년 전에 내가 가지고 있었던 두통 때문에 그 중 한 가지로 인해 얼마나 많은 두통이 있었는지 전혀 알지 못합니다. Microsoft Word에서 내 코드에 붙여 넣은 것이 범인이었습니다. 내 IDE는 많은 경우와 같이 색상 코드 문자열을 작성하지 않았습니다. 오, 끔찍한, 끔찍한 기억들. – Scotch

관련 문제