나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 이형재 (redapricot)

추천:  0
파일:     조회:  44
제목:   access 테이블의 필드값 인식
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 액세스 버전(2007-2016):

* 아래줄에 질문을 작성하세요 >> 

두 개의 필드 중 어느 하나라도 빈칸인 레코드만 SQL 문으로 불러들이는 과정에 발생한 오류에 관하여 문의 드립니다.

필드명 하나는 '추가입력옵션'이고 또 다른 필드명은 '(추가) 추가입력옵션' 입니다. 테이블의 데이터 형식은 둘 다 '짧은 텍스트' 입니다. 그리고 필드명은 엑셀파일에서 따라오기 때문에 바꿀 수 없는 상황입니다. 

두 필드 중 어느 하나라도 빈칸(빈 문자열)인 레코드만 불러들인 후 원하는 값을 입력하고자 아래와 같이 코딩했습니다.

Dim rs As ADODB.Recordset 
Set rs = New ADODB.Recordset    
rs.ActiveConnection = CurrentProject.Connection 
rs.CursorType = adOpenDynamic 
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient 
    '원인은 알 수 없으나, 이 설정을 안 하면 rs.recordcount 값이 -1 로 나옴

rs.Open "select * from tbl주문1다운 where isnull(추가입력옵션) or isnull([(추가) 추가입력옵션])"

위 코드를, 실행했을 때, 엑셀에서 불러온 테이블에서는 원하는 레코드만 정상적으로 얻을 수 있었습니다.

그런데 엑셀에서 불러온 테이블에 아래와 같이 추가를 하는 경우, 
rs.AddNew
  필드별 데이터 입력
  [이 때 두 필드는 콤보박스를 이용하여 값을 입력하게 만들었지만, 입력하지 
  않고(스페이스 바로 빈칸도 넣지 않음) 빈칸으로 레코드를 추가했습니다.]
rs.Update
rs.MoveLast
rs.Close 
로 레코드를 추가한 후 select 문으로 검색하면, 추가한 레코드의 두 필드가 모두 빈칸이든 아니면 어느 하나가 빈칸이든 찾지 못합니다. 다만, 테이블을 강제로 열고 들어가 해당 필드에 스페이스 바를 2번 정도 눌러주면, 그 후부터는 검색이 되었습니다.

null과 빈문자열의 차이 같아 다양한 시도를 했지만 해결되지 않고 있네요. 
원인이 뭘까요?
 
[불량 게시물 신고]  
황동준아시다시피 Null과 Space는 다르지요.
AddNew다음에 어떤 내용인지 알 수 없어 확인이 어렵지만, Is Null로 검색되지 않는다면 어떤 다른 값이나 공백이 들어가 있다고 볼 수 있지 않을까요?

스페이스 바를 임의로 삽입했을 때 그 후로 검색이 되는 것은 엑세스 내부적으로 일반 텍스트 필드에서 스페이스만 입력한 경우 유효한 데이터로 간주하지 않고 Null로 변환하므로, 그 이후 Is Null로 검색 되어졌음을 알 수 있습니다.

혹시 ""로 검색 되는지 테스트 해보세요.

([필드1]) IS NULL OR Trim([필드1]) = "" OR ([필드2]) IS NULL OR Trim([필드2]) = ""

NZ(Trim([필드1])="" OR NZ(Trim([필드2])=""
03-03 (07:06)
삭제 ■신고
이형재NZ() 함수를 사용해서 해결했습니다~ 
감사합니다~
03-04 (23:52)
삭제 ■신고
        
  

작성일 : 2025-02-27(00:05)
최종수정일 : 2025-02-27(00:05)