Retroceder   Foros del Web > Programación para sitios web > ASP Clásico

Respuesta
 
Herramientas Desplegado
Antiguo 02-jun-2008, 02:36   #1 (permalink)
PosProdukcion tiene algunos puntos positivos de karma
 
Avatar de PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Mensajes: 509
Llamada dinamica a Sub

Hola, existe alguna manera en ASP de ejecutar una sub pero tener el nombre de esta sub dentro de un string??

O sea, algo como

Código:
Dim sub_llamada

sub_llamada = "MiProcedimiento"

¿Exec/Call? sub_llamada
Gracias
PosProdukcion está desconectado   Responder Citando
Antiguo 02-jun-2008, 02:59   #2 (permalink)
Lebennin está en el buen camino
 
Fecha de Ingreso: septiembre-2005
Mensajes: 127
Respuesta: Llamada dinamica a Sub

Juraría que no, pero... para que lo quieres? Es decir, si llamas a un procedimiento supuestamente sabes a cual quieres llamar. Pero vamos, me has dejado con la duda.
Lebennin está desconectado   Responder Citando
Antiguo 02-jun-2008, 03:08   #3 (permalink)
PosProdukcion tiene algunos puntos positivos de karma
 
Avatar de PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Mensajes: 509
Respuesta: Llamada dinamica a Sub

Pues el motivo es el siguiente:

Desde hace tiempo vengo programando mis rutinas de BD en procedimientos almacenados y tengo una clase que realiza llamadas a estos procedimientos de forma automatizada...

ClaseBD.Llama(procedimiento_de_bd)

Así, me da igual estar en una página de registro de nuevo usuario o de grabacion de un documento nuevo, simplemente ajusto los valores de las columnas ( ClaseBD.columna(0) = .... / ClaseBD.columna(N) = .... ) y llamo al procedure de BD correpondiente (ClaseBD.Llama(SQLRegistro_Usuario) o ClaseBD.Llama(SQLRegistro_Documento))

Ahora, me han pedido un proyecto con MySQL 4, que no soporta procedimientos de BD almacenados, así que tengo que rehacer la parte que estaba en BD y pasarla a ASP mezclado con SQL, si pudiera realizar llamadas dinámicas a procedimientos ASPpodría reaprovechar en parte la clase ClaseBD cambiando las llamadas a procedures SQL por subs de ASP, por ejemplo ASPRegistro_Documento o ASPRegistro_Usuario

O sea, que en realidad no conozco el nombre del subn que quiero llamar sino que este depende y por eso pregunto si podría estar dentro de una variable
PosProdukcion está desconectado   Responder Citando
Antiguo 02-jun-2008, 09:00   #4 (permalink)
Colaborador
JuanRAPerez tiene algunos puntos positivos de karma
 
Avatar de JuanRAPerez
 
Fecha de Ingreso: octubre-2003
Mensajes: 1.890
Respuesta: Llamada dinamica a Sub

en mi opinion

ummmm si haces todos los sub correctos no habria problema por llamarlos siempre y cuando los dejes bien depurados
__________________
JuanRa Pérez
San Salvador, El Salvador
JuanRAPerez está desconectado   Responder Citando
Antiguo 02-jun-2008, 11:54   #5 (permalink)
Moderador
Myakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy prontoMyakire llegará a ser famoso muy pronto
 
Avatar de Myakire
 
Fecha de Ingreso: noviembre-2002
Mensajes: 6.634
Enviar un mensaje por Yahoo  a Myakire
Respuesta: Llamada dinamica a Sub

Cita:
O sea, que en realidad no conozco el nombre del subn que quiero llamar sino que este depende y por eso pregunto si podría estar dentro de una variable


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í?
Myakire está desconectado   Responder Citando
Antiguo 02-jun-2008, 12:06   #6 (permalink)
Moderador
u_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy pronto
 
Avatar de u_goldman
 
Fecha de Ingreso: noviembre-2002
Ubicación: LA
Mensajes: 7.476
Respuesta: Llamada dinamica a Sub

mmmmmhhhh no estoy seguro pero podrías tratar:

call eval("procedimiento como string")

Aunque me quedé intrigado con esta solción ¿Nos dejarías ver algo de código?

Saludos
__________________
¿Qué darías por vivir un sueño?
u_goldman está desconectado   Responder Citando
Antiguo 03-jun-2008, 01:58   #7 (permalink)
PosProdukcion tiene algunos puntos positivos de karma
 
Avatar de PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Mensajes: 509
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
PosProdukcion está desconectado   Responder Citando
Antiguo 03-jun-2008, 02:37   #8 (permalink)
PosProdukcion tiene algunos puntos positivos de karma
 
Avatar de PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Mensajes: 509
Respuesta: Llamada dinamica a Sub

Cita:
Iniciado por u_goldman Ver Mensaje
mmmmmhhhh no estoy seguro pero podrías tratar:

call eval("procedimiento como string")

Aunque me quedé intrigado con esta solción ¿Nos dejarías ver algo de código?

Saludos
No funcionó

Código:
Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A000D)
No coinciden los tipos: 'Sub2'
/pruebas/ejemploEval.asp
PosProdukcion está desconectado   Responder Citando
Antiguo 03-jun-2008, 09:43   #9 (permalink)
Colaborador
Shiryu_Libra llegará a ser famoso muy prontoShiryu_Libra llegará a ser famoso muy prontoShiryu_Libra llegará a ser famoso muy pronto
 
Avatar de Shiryu_Libra
 
Fecha de Ingreso: febrero-2007
Ubicación: Localhost/Pruebas....
Mensajes: 2.955
Enviar un mensaje por MSN a Shiryu_Libra Enviar un mensaje por Yahoo  a Shiryu_Libra Enviar un mensaje por Skype™ a Shiryu_Libra
Respuesta: Llamada dinamica a Sub

no estoy seguro, pero a lo mejor Testeando

Cita:
'tu clase
Set Test = Server.CreateObject("ASPTest.Test")

'llamado de modulos
Test.modulo(datos)
esto a colacion de que tengo unas DLL registradas y en algunos casos mando llamar en fase de pruebas
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
Shiryu_Libra está desconectado   Responder Citando
Antiguo 03-jun-2008, 11:13   #10 (permalink)
Moderador
u_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy prontou_goldman llegará a ser famoso muy pronto
 
Avatar de u_goldman
 
Fecha de Ingreso: noviembre-2002
Ubicación: LA
Mensajes: 7.476
Respuesta: Llamada dinamica a Sub

Ya entendí un poco mejor...entonces esa clase solo sirve para llamar al procedimiento correcto dependiendo de una propiedad de la misma, y el problema es que necesitas hacer algo particular (llamar a otros procedimientos que no llaman SP) desde algo general.

Pues si lo estoy viendo bien, realmente no le encuentro mucha complicación, hazte una variable global que le diga a tu aplicación si usa SP o no, y en la clase que llamas a tus procedimientos, evalúas esa variable, si es verdadera llamas al SP, si no, llamas al código, siguiendo la lógica de tu aplicación, los nombres deberían ser similares.


Saludos
__________________
¿Qué darías por vivir un sueño?
u_goldman está desconectado   Responder Citando
Antiguo 03-jun-2008, 11:52   #11 (permalink)
PosProdukcion tiene algunos puntos positivos de karma
 
Avatar de PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Mensajes: 509
Respuesta: Llamada dinamica a Sub

Cita:
Iniciado por u_goldman Ver Mensaje
Pues si lo estoy viendo bien, realmente no le encuentro mucha complicación, hazte una variable global que le diga a tu aplicación si usa SP o no, y en la clase que llamas a tus procedimientos, evalúas esa variable, si es verdadera llamas al SP, si no, llamas al código, siguiendo la lógica de tu aplicación, los nombres deberían ser similares.


Saludos
Eso es lo que intento, ahí está el problema precisamente, ¿como hago eso? Call Eval() no funcionó...

Estoy mirando eso que me dijo Shiryu_Libra, nunca vi eso de ASPTest....

Código:
'tu clase
Set Test = Server.CreateObject("ASPTest.Test")

'llamado de modulos
Test.modulo(datos)
Gracias
PosProdukcion está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 00:09.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93