2016-08-19 1 views
0

Excel-VBA를 사용하여 테이블에 데이터를 삽입하고 있습니다. 나는 .csv 파일을 파싱하여 삽입 문자열을 만드는 데 사용했습니다. 나는 그것을 여러 테이블에 연속적으로 사용하고있다. 첫 번째 테이블을 잘 처리하지만 두 번째 오류 날 준다 :데이터 형식이 MS-Access의 조건 식에서 일치하지 않습니다.

런타임 오류 '-2147217913 (8004e07)': 조건 식의 데이터 형식이 일치하지 않습니다.

이것을 조사한 후에 나쁜 형식으로 데이터를 전달하려고 시도하지만 첫 번째 테이블이 처리 된 곳이나 방법이 표시되지 않습니다. 같은 외모에 실패 마지막 삽입 문자열 :

INSERT INTO Table_Name VALUES ('Text_entry', 'Long_Integer_entry', 'Double_entry', '') 

편집 : 난 그냥 다른 테스트를 시도하고 문제가 발견 : 널 (null) '전달되는 더블 또는 싱글 정수로되어있는 필드'오류를 발생 . 이러한 데이터 형식에 Null 값을 전달하려면 어떻게해야합니까?

+0

당신이 따옴표로 시도? 'Table_Name'은'Long_Integer_entry'와'Double_entry'에 대한 문자열을 기대합니까? 그렇지 않다면 따옴표를 제거하십시오 - 따옴표는 숫자가 아닌'문자열 '값을 구분하는 데 사용됩니다. –

+0

숫자라면 모든 인용 부호를 생략해야합니까? – SandPiper

+0

그게 내가 말한거야 –

답변

1

SQL에서 문자열, 숫자 또는 날짜 시간 값을 포함한 모든 데이터 형식 열에 NULL을 추가하고 업데이트 할 수 있습니다. 따라서 추가 쿼리에서 전달하십시오. 문자열이나 숫자 값이 아니므로 인용 부호를 사용하지 마십시오. NULL 엔터티는 알 수없는 값을 의미합니다.

INSERT INTO Table_Name VALUES ('Text_entry', 'Long_Integer_entry', 'Double_entry', NULL) 

특히, 당신은 ''은 실제로는 숫자 열에서 작동하는 데 실패 이유는 길이가 0 인 문자열 (NULL이 아닌 값) 시도했다.

당신이 매개 변수화 된 쿼리를 사용하는 경우, 또한 VBA의 Null는 SQL 문에 바인딩 전달합니다

strSQL = "INSERT INTO Table_Name VALUES (?, ?, ?, ?)" 

Set cmd = New ADODB.Command 

With cmd 
    .ActiveConnection = conn 
    .CommandText = strSQL 
    .CommandType = adCmdText 
    .CommandTimeout = 15 
End With 

' BINDING PARAMETERS 
cmd.Parameters.Append _ 
     cmd.CreateParameter("textparam", adVarChar, adParamInput, 255, "Text_entry") 
cmd.Parameters.Append _ 
     cmd.CreateParameter("longtxtparam", adVarChar, adParamInput, 255, "Long_Integer_entry") 
cmd.Parameters.Append _ 
     cmd.CreateParameter("doubleparam", adDouble, adParamInput, , "Double_entry") 
cmd.Parameters.Append _ 
     cmd.CreateParameter("nullparam", adDouble, adParamInput, , Null) 
+0

"Null"키워드를 사용하면 Doubles와 Long Integers가 올바르게 처리되었습니다. 감사합니다. 길이가 0 인 문자열 대신 문자열에 Null을 사용하는 것이 단점입니까? – SandPiper

+0

잘 듣고 싶다! 스토리지 와이즈, 차이가 있는지 나는 모른다. 'NULL '은 길이가 0 인 문자열이 합법적 인 초기화 된 값인 경우 초기화되지 않은 값을 상징하는 경향이 있습니다. 쿼리는 다를 것이고 서로 교환 할 수 없다 :'[str] IS NULL' 대'[str] = '''. 대체로 여러분의 연산에 달려 있으며 숫자에 0 또는 NULL을 저장하는 것과 비슷합니다. – Parfait

관련 문제