2011-12-07 2 views
1

For Each 루프에서 내 VB 프로그램은 컬렉션을 반복합니다.adodb 준비 문으로 빈 문자열 삽입

이 루프 안에는 준비된 명령문에 대한 매개 변수가 설정되어 있습니다.

Set param1 = cmd.CreateParameter("sync_id", adChar, adParamInput, Len(sync_id), sync_id) 
Set param2 = cmd.CreateParameter("fieldname", adChar, adParamInput, Len(CName), CName) 
Set param3 = cmd.CreateParameter("pvname", adChar, adParamInput, Len(pvname), pvname) 
Set param4 = cmd.CreateParameter("value", adChar, adParamInput, Len(CNameVal), CNameVal) 

그런 다음 명령 개체를 추가하십시오. CNameVal (param4)이 비어있는 경우

cmd.Parameters.Append param1 
cmd.Parameters.Append param2 
cmd.Parameters.Append param3 
cmd.Parameters.Append param4 

는 VB는 나에게 오류를 제공하십시오 paramater 객체가 제대로 정의되지 않았습니다.

나는 매개 변수를 작성하기 전에 CNameVal을 확인하여이 문제를 해결하려 :

If CNameVal = Empty Then 
    Set param4 = cmd.CreateParameter("value", adEmpty, adParamInput) 
    'Set param4 = cmd.CreateParameter("value") 
    'Set param4 = cmd.CreateParameter("value", adEmpty, adParamInput, Len(CNameVal), CNameVal) 
Else 
    Set param4 = cmd.CreateParameter("value", adChar, adParamInput, Len(CNameVal), CNameVal) 
End If 

그 라인의 어느 쪽도이 문제를 해결한다. 어떤 도움을 주셔서 감사합니다!

답변

2

Len(Empty) = 0 오류가 발생합니다. 문자열 길이는 0 일 수 없습니다.
여기 올바른 올바른 연습은 현재 문자열의 길이가 아니라 데이터베이스에 설정된 실제 고정 길이를 제공하는 것입니다. 나는 또한 당신이 adChar을 필요로하는지 의심한다, 아마 adVarChar를 의미했다.

CNameVal = Empty은 결코 True이 아니기 때문에 If이 작동하지 않습니다. 비어 있음을 확인하는 올바른 방법은 IsEmpty(CNameVal)입니다.

+0

'Len (Empty) = 0'이 실제로 문제가되었습니다! 이제 길이 = 1 일 때 수동으로 길이를 1로 설정했습니다. 'CNameVal = Empty'에 대한 정확한 설명이 아닙니다. 제 경우에는 IsEmpty (CNameVal)이 절대로 True가 아니며 CNameVal = Empty '또는'CNameVal = ""'is ... 그 이상한가요? :) – netiul

+0

@ZacL 틀렸어. 뭔가를'Empty' ('Null '과 함께 할 수는 없다)와 비교할 수있다. 그러나'Empty'는'Variant' 데이터 타입 내에서 특별한 값으로 문자열 길이가 0인지를 알기 위해 사용하고 있습니다. 이것은 VB가 변환을 처리하기 때문에 작동합니다. 그래서'Empty = ""는'True'를 반환합니다. 여러분의 코드가 목표에 대해 더 명확하게하기 위해서는'a_string = Empty'가 아닌'Len (a_string) = 0'을 확인하는 것이 좋습니다. – GSerg