A ver si alguien me puede ayudar. Tengo esta función que busca un stored
procedure en la BD. Extrae sus parámetros y de la cadena ActualValues
extrae los valores para ejecutar el stored procedure. El problema es que
los parámetros de tipo varchar, si por ejemplo, es de longitud 40 y le
paso al parámetro %pepe% , me completa con espacios hasta completar la
longitud del campo y eso le pasa al stored procedure. Ahora estamos
trabajando con SQL 2000, anteriormente con SQL 7 esto no pasaba.
Cómo lo puedo solucionar? Alguna idea? Probé ponerle Trim, Ltrim, etc. Y
nada, siempre me completa la longitud del campo.
Gracias,
Claudia.
Public Function StoredProcedures(SQLConnection As ADODB.Connection,
ProcedureName As String, Optional ActualValues As String) As
ADODB.Recordset
Dim ParametersInfo() As String
Dim ParametersList() As String
Dim ParametersValues() As String
Dim ADOcmd As ADODB.Command
Dim oParam As ADODB.Parameter
Dim bReturnParamFlag As Boolean
Dim Index As Integer
Dim i As Integer
Dim AllParameters As ADODB.Recordset
Dim paramType As String
Dim paramNro As Integer
On Error GoTo errStored
bReturnParamFlag = False
Set ADOcmd = New ADODB.Command
Set ADOcmd.ActiveConnection = SQLConnection
Set AllParameters =
SQLConnection.OpenSchema(adSchemaProcedureParameters)
Index = 0
Do While Not AllParameters.EOF
If AllParameters!PROCEDURE_NAME = ProcedureName & ";1" Then
paramNro = AllParameters.Fields(5).Value
Select Case paramNro
Case adParamOutput:
paramType = "OUTPUT"
Case adParamInputOutput:
paramType = "INPUT/OUTPUT"
Case adParamInput:
paramType = "INPUT"
Case adParamReturnValue:
paramType = "RETURN VALUE"
Case adParamUnknown:
paramType = "UNKNOWN"
End Select
ReDim Preserve ParametersInfo(Index + 1)
ParametersInfo(Index) = AllParameters!PARAMETER_TYPE & Chr(9)
& paramType & Chr(9) & AllParameters!PARAMETER_NAME & Chr(9) &
AllParameters!TYPE_NAME & Chr(9) & AllParameters!DATA_TYPE & Chr(9) &
AllParameters!CHARACTER_MAXIMUM_LENGTH
AllParameters.MoveNext
Index = Index + 1
Else
AllParameters.MoveNext
End If
Loop
If Not IsNull(ActualValues) Then
'Crea el array con los valores de los parámetros
ParametersValues = Split(ActualValues, ";")
'Crea los objetos Parameters
For i = 0 To Index - 1
ParametersList() = Split(ParametersInfo(i), Chr(9))
Set oParam = ADOcmd.CreateParameter
oParam.Name = ParametersList(2)
oParam.Type = ParametersList(4)
oParam.Direction = ParametersList(0)
If oParam.Type = 129 Or oParam.Type = 130 Then
oParam.Size = ParametersList(5)
End If
If oParam.Direction = 4 Then
bReturnParamFlag = True
End If
If oParam.Direction = 1 Then 'adParamInput
If bReturnParamFlag = False Then
oParam.Value = ParametersValues(i)
Else
'Si el parámetro es tipo texto
If (oParam.Type = 129 Or oParam.Type = 130) Then
If (ParametersValues(i - 1) = sEmptyString) Then
oParam.Value = Null
Else
oParam.Value = LTrim(ParametersValues(i - 1))
End If
'Si el parámetro es tipo numérico y además es vacío
ElseIf (ParametersValues(i - 1) = sEmptyString) And
(oParam.Type = 3) Then
oParam.Value = 0
Else
oParam.Value = ParametersValues(i - 1)
End If
End If
End If
ADOcmd.Parameters.Append oParam
Next i
End If
ADOcmd.CommandText = ProcedureName
ADOcmd.CommandType = adCmdStoredProc
Set StoredProcedures = ADOcmd.Execute
Exit Function
errStored:
Err.Raise Err.Number, "StoredProcedures", Err.Description
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.3.0/758 - Release Date:
12/04/2007 11:52 a.m.