Usuario
Uso de ParamArray dentro de una clase

Pregunta
-
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
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:
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.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
PD: Anteriormente habia posteado esta misma interrogante en http://www.forosdelweb.com/newreply.php?do=newreply&p=3715408 sin embargo todabia no he podido hallar como resolver.
Les agradesco de ante mano
Todas las respuestas
-
-
Si seria una opcion, el asunto que esta funcion puede recibir n parametros, ya que el sentido de la funcion es poder llamar a cualquier SP que esta en el server con su correspondientes parametros y devolver el resultado a la funcion que lo invoco. A como indicaba en el ejemplo:
Objecto.SaveRecords "PA_SaveRecord", adCmdStoredProc, txtSucursal, txtMonto, txtFecha
Igual podria ser un simple select a una vista o a una tablaSaludos -
-