2011-12-07 31 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) 

然後將它們追加到命令對象。

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

CNameValparam4)是空的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

您的If不起作用,因爲CNameVal = Empty永遠不會是True。檢查Empty的正確方法是IsEmpty(CNameVal)

+0

Len(Empty)= 0'確實是問題!我現在在length = 0時手動將長度設置爲1.你說'CNameVal = Empty'不是正確的方法:在我的例子中,'IsEmpty(CNameVal)'永遠不會是'True','CNameVal = Empty '或'CNameVal =「」'是...那是不是很奇怪? :) – netiul

+0

@ZacL我錯了,你可以用'Empty'來比較一下(你不能用'Null')。但'Empty'是'Variant'數據類型中的一個特殊值,並且您正在使用它來判斷該字符串是否具有零長度。這是有效的,因爲VB會爲你處理轉換,所以儘管它們是不同的東西,Empty =「」會產生「True」。爲了讓你的代碼更加清楚它的目標,建議你檢查'Len(a_string)= 0'而不是'a_string = Empty'。 – GSerg