Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/01/2011, 16:37
Avatar de DexterGlue
DexterGlue
 
Fecha de Ingreso: septiembre-2010
Ubicación: Managua
Mensajes: 60
Antigüedad: 14 años, 5 meses
Puntos: 0
Busqueda Uso de ParamArray dentro de una clase

Hola a Todos

En esta ocasiion necesito de su colaboracion para resolver el siguiente problemita...

Estoy desarrollando un clase de tipo utilitaria que sirva como capa intermedia entre la interrfaz de usuario y la base de datos. En dicha clase tengo la siguiente funcion

Código:
Public Function SaveRecords(Procedure As String, CommandType As ADODB.CommandTypeEnum, ParamArray Param() As Variant) As ADODB.Recordset
     Set SaveRecords = LoadProcedure(Procedure, CommandType, Param())   
End Function
La funcion manda a llamar a otra funcion que me permite ejecutar una sentencia TSQL cuaquiera, pasandole los parametros que requiere a un objecto ADO Command.

Los parametros son lo siguientes:
  • Procedure: contiene la sentencia TSQL a ejecutar (SELECT, INSERT, UPDATE, SP)
  • CommandType: Identificador del tipo de sentecia a ejecutar, segun lo indicado por ADODB.CommandTypeEnum
  • Param(): listado de parametros a utilizar por la funcion, propiamente dicho para los SP

Ejemplo:

Código:
Objecto.SaveRecords "PA_SaveRecord", adCmdStoredProc, txtSucursal, txtMonto, txtFecha
DOnde
"PA_SaveRecord", es un procedimiento que se encuentra en el servidor,
adCmdStoredProc, es un valor que le indica al command el tipo de TSQL a ejecutar
txtSucursal, txtMonto, txtFecha, son parte de los parametros que recibe "PA_SaveRecord"


La funcion LoadProcedure simplemente le pasa los parametros de la funcion SaveRecords y ejecuta un objeto command.

Código:
Public Function LoadProcedure(Procedure As String, CommandType As ADODB.CommandTypeEnum, ParamArray Param() As Variant) As ADODB.Recordset
On Error GoTo ValidateErr
Dim comMain As ADODB.Command, param2 As Variant

If cn Is Nothing Then Set cn = New ADODB.Connection
If cn.State <> adStateOpen Then cn.Open StrConn
If comMain Is Nothing Then Set comMain = New ADODB.Command

comMain.CommandType = CommandType
comMain.CommandText = Procedure

If UBound(Param(), 1) > 0 Then
    Select Case TypeName(Param(0))
    Case "Integer"
                comMain.Parameters.Append comMain.CreateParameter("IdParam", adInteger, , , Param(0))
    Case "String"
                comMain.Parameters.Append comMain.CreateParameter("IdParam", adBSTR, , Len(CStr(Param(1))), CStr(Param(1)))
    Case "Date"
                comMain.Parameters.Append comMain.CreateParameter("IdParam", adDate, , , Param)    
    End Select
End If
comMain.ActiveConnection = cn

Set LoadProcedure = comMain.Execute

ValidateErr:
          msgbox  MsgBox Err.Description, vbInformation, Err.Source & " - Error Number: " & Err.Number
           Err.clear

ValidateExit:

If comMain.State = adStateOpen Then comMain.Cancel
Set comMain = Nothing

End Function
Ahora el punto esta que al pasar el Param() de la funcion SaveRecords a la funcion LoadProcedure, este se va como un elemento del arreglo que esta dentro de la funcion LoadProcedure y en este punto no se como acceder a los elementos que se pasaron como parametros por la funcion SaveRecords.

Agradeceria la ayuda que me puedan brindar en este tema