I have a stored procedure that takes 6 parameters 5 inputs and 1 output. All of the parameters seem to be properly defined (parameter name, data type, input or output, size and value). My output size and data type does not seem to be the problem. however I get the error message "Parameter Object is improperly defined Run-Time error 3708" only sometimes. The odd thing is that If I run this code with all other values equal (including CurrentCnn, adCmdStoredProc, etc.)with a value of OptStore or OptCorporate True my code runs fine. If I have any other Opt* variable True instead then I get this error. all strStorNo values are string values at most 3 chars long. I can test my stored procedure and it returns my count value as expected with the stored procedure values I would pass in for all cases.
here is the vb6:
138 With cmdSP
140 .ActiveConnection = CurrentCNN
142 .CommandType = adCmdStoredProc
144 .CommandText = "HIcountProducts"
146 If blnUseUPCinSP Then
148 .Parameters.Append .CreateParameter("@upc", adVarChar, adParamInput, 13, objProdB.upc)
150 .Parameters.Append .CreateParameter("@cert_code", adVarChar, adParamInput, 15, Null)
152 .Parameters.Append .CreateParameter("@vendor", adInteger, adParamInput, , Null)
Else
154 .Parameters.Append .CreateParameter("@upc", adVarChar, adParamInput, 13, Null)
156 .Parameters.Append .CreateParameter("@cert_code", adVarChar, adParamInput, 15, objProdB.cert_code)
158 .Parameters.Append .CreateParameter("@vendor", adInteger, adParamInput, , Null)
End If
162 If intRetailVer = 2 Then
If OptStore.Value = True Then
.Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 3)
ElseIf OptCorporate.Value = True Then
.Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 6)
ElseIf OptZones.Value = True Then
.Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 2)
ElseIf OptRegions.Value = True Then
.Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 1)
ElseIf OptClasses.Value = True Then
.Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 1)
End If
End If
.Parameters.Append .CreateParameter("@count", adInteger, adParamOutput, 1, 1)
166 .Execute , , adExecuteNoRecords
End With
168 intRecordCount = cmdSP.Parameters("@count")
170 Set cmdSP = Nothing
Im stumped here, is there something else this parameter object improperly defined could be referencing besides my parameter definitions?
You are defining the @levelType
parameter as adVarChar
but you are passing an Integer
to it. Pass the parameter as String
instead.
...
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, "2")
...
I used "2"
instead of just 2
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.