Ver Mensaje Individual
  #7 (permalink)  
Antiguo 03/06/2008, 01:58
Avatar de PosProdukcion
PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Llamada dinamica a Sub

Cita:
Iniciado por Myakire Ver Mensaje
A ver, dices que tus SP los llamas con un método de la forma ClaseBD.Llama(procedimiento_de_bd), entonces si conoces el nombre del SP y por ende, de la función que llamarias ¿no es así?
Cierto, SÍ lo conozco, quiero decir que cada vez es uno diferente...

Probaré eso que dices u_goldman de Call Eval(...), a ver...

u_goldman, ya que preguntas, te cuento: el código pienso que es demasiado extenso para ponerlo, te cuento un poco como está estructurada mi claseBD:

Código:
Propiedades:

moduloBD: Nombre del conjunto de procedimientos, másabajo explico como va...
NColumnas: Número de columnas
columnas(): Nombre o contenido de las columnas
rsQuery: Valores recuperados por el método Query, (con rs.GetRows)

Métodos:

Query: Ejecuta una llamada a un procedimiento o sentencia SQL
Ejecuta: Ejecuta una llamada a un procedure no query
(Pongo los que nos ocupan en este caso, hay otros muchos como htmlGrid, htmlSelect, etc.. que me permiten automatizar muchas acciones similares entre módulos)
Y en mi BD, ya sea esta SQL Server o MySQL5+ o Oracle, TODOS los procedimientos están agrupados por módulos, por ejemplo, el módulo de usuarios podría tener los siguientes procedures:

Código:
Para listar (query):

Usuario_Lista: Lista todos los datos de un usuario o de todos los usuarios
Usuario_Login: Devuelve el id de un usuario si los datos de login son correctos
Usuario_YaExisteLogin: etc...

(en oracle como hay módulos podrías ser Usuario.Lista, Usuario.Login etc)

Procedimientos No Query:

Usuario_Inserta: Crea un nuevo usuario
Usuario_Modifica: Modifica un usuario
Usuario_Borra: Borra un usuario


Es decir, de forma dinámica, solo con el nombre el módulo de BD (usuario) y la acción que quiero realizar (Lista, Login, Inserta...) hago la llamada a un procedimiento de BD (con RecordSet.Open o Conex.execute)....

¿Por qué venía esta pregunta?

Resulta que en las versiones anteriores a MySQL 5 no se soporta el uso de procedimientos de Base de Datos, por lo tanto tengo que reescribir mis módulos de BD (Usuario_Lista, Usuario_Inserta, etc...) y cambiarlos a ASP con SQL entremezaclado con el codigo SQL, asi, lo que antes era puro SQL Usuario_Lista ahora es una Function Usuario_lista de ASP, si pudiera hacer la llamada dinámica, por ejemplo con ese Call Eval("Usuario_Inserta") me bastaría con una pequeña modificación en claseBD y toda mi aplicación se adapta a esta nueva estructura, si no puedo hacer llamadas dinámicas, tengo que recorrer cada script (login.asp, usario.asp, etc...) y donde antes había una instancia a claseBD poner ahora la llamada que corresponda a Sub o Function de asp

Espero que hayas encontrado la información útil, si os resulta útil os puedo ir poniendo por aquí la clase, como ya habéis hecho con el módulo de usuarios o el sitio multilenguaje en XML, aunque supongo que cada uno tendrá su propia manera de estructurar las llamadas a BD

Saludos