вставить пустую строку подготовленным оператором adodb - PullRequest
2 голосов
/ 07 декабря 2011

В цикле For Each моя программа VB выполняет итерацию по коллекции.

Внутри этого цикла я устанавливаю параметры для подготовленного утверждения.

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

Когда CNameVal (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

Ни одна из этих строк не решает проблему. Любая помощь приветствуется !!

1 Ответ

2 голосов
/ 07 декабря 2011

Len(Empty) = 0, что приводит к ошибке. Длина строки не может быть 0.
Правильным практическим приемом здесь является предоставление фактической фиксированной длины, установленной в базе данных, а не длины текущей строки. Я также сомневаюсь, что вам нужно adChar, вы, вероятно, имели в виду adVarChar.

Ваш If не работает, потому что CNameVal = Empty никогда не будет True. Правильный способ проверки пустых значений - IsEmpty(CNameVal).

...