Crear variables indefinidas desde recordset

Tengo una pregunta un poco complicada, acerca de crear variables de forma dinámica desde un recordset.
1 - Tengo una tabla con tres campos: 'id', 'nombrevariable' y 'valorvariable'.
2 - Quiero crear una variable para cada registro, de forma dinámica, para lo cual creo el recordset 'rs'. Básicamente, se trataría de crear variables con la forma siguiente:
dim nombrevariable as integer
nombrevariable = valorvariable
3 - Éste es mi código, de momento:
<%
For Each value In rs.Fields
value = rs("nombrevariable")
rs.moveNext
Next
%>
De esta manera, se podría decir que tengo el nombre de la variable, pero ahora quiero asignar un valor a ese nombre. Estoy estancado.
Básicamente se trataría de crear las variables en la base de datos, sin que tenga que modificar el código ASP de la página cada vez que cree una nueva variable. Es decir, que las variables no son ciertas, sino que cambian o se amplían según los registros de una tabla.
He oído que eres la ostia en ASP. Yo no soy malo del todo, pero esto me supera, y tengo claro que debe haber alguna manera de hacerlo.

1 Respuesta

Respuesta
1
La verdad es que la declaración dinámica de variables no está implementada VBScript... de hecho, ni siquiera en Visual Basic (a menos que utilices algunos trucos complicados).
La única forma de hacerlo que se me ocurre en este momento es con clases. Podrías tener una clase del tipo
Class varDinamica
Public Nombre
Public Valor
End Class
De esta manera, podrías crear un arreglo de objetos de la clase varDinamica... o bien variables con nombres "genéricos" que se identificarían por la "propiedad" Nombre... a lo mejor con un ejemplo quedaría más claro:
Suponiendo que el recordset rs contiene un Select * de tu tabla, podrías tener lo siguiente:
Dim MyVars()
Redim MyVars(rs.RecordCount - 1) 'Para iniciar con el índice 0
For i = 0 to ubound(MyVars)
Set MyVars(i) = New varDinamica
MyVars(i).Nombre = rs.Fields("nombrevariable").value
MyVars(i).Valor = rs.Fields("valorvariable").value
rs.movenext
next
Por supuesto, a la clase varDinamica se le pueden agregar métodos que te permitirían manejar sólo un objeto que contenga las variables que desees. Por ejemplo:
Class varDinamica
Private Nombre()
Private Valor()
Private Sub Class_Initialize()
Redim Nombre(0)
Redim Valor(0)
End Sub
Public Sub AddVariable(parNombre, parValor)
if Ubound(Nombre) = 0 then
if trim(Nombre)= "" then
Nombre(0) = parNombre
Valor(0) = parValor
else
Redim Preserve Nombre(UBound(Nombre)+1)
Redim Preserve Valor(UBound(Valor)+1)
Nombre(UBound(Nombre)) = parNombre
Valor(UBound(Valor)) = parValor
end if
else
Redim Preserve Nombre(UBound(Nombre)+1)
Redim Preserve Valor(UBound(Valor)+1)
Nombre(UBound(Nombre)) = parNombre
Valor(UBound(Valor)) = parValor
end if
End Sub
End Class
Con esta clase, el ciclo anterior se transforma en lo siguiente:
Dim MyVars
Set MyVars = New varDinamica
For i = 0 to rs.RecordCount - 1
MyVars(i). AddVariable rs. Fields("nombrevariable"). Value, rs. Fields("valorvariable").value
rs.movenext
next
Como puedes ver, tienes varias posibilidades. Puedes elegir la que más se acomode a tus necesidades. Ten en cuenta que la flexibilidad es un parámetro importante a considerar, ya que aunque le segunda clase es más complicada (vas a necesitar agregar métodos para recorrer tus variables, obtener los valores, etc.) es mucho más flexible que la primera.
Otra cosa: los ejemplos que coloqué acá los acabo de inventar, por lo que no los he probado, y es posible que tengan algunos errores. Pero la idea general es tal como te la planteo acá. Puedes seguir investigando por tu cuenta, y verás que al utilizar clases se te solucionan muchos problemas. Pero cuidado! Generalmente cuando uno tiene un martillo en la mano, todos los problemas se transforman en clavos... lo que quiero decir es que utilices las clases con cuidado y cuando sea necesario, no para todas las cosas, a menos que llegues a un nivel que te permita entender tu código fácilmente. Esto último es sólo un consejo, ya que por experiencia sé que un programa que mezcla clases con "programación normal", sobre todo en ASP, se puede volver una pesadilla de mantención rápidamente.
Por último, una apreciación personal: realmente no se me ocurre para qué necesitas esta creación dinámica de variables. Es posible que existan otras soluciones menos complicadas... te recomiendo que pienses bien el problema, y consideres todas las soluciones disponibles antes de decidirte por una.
Ojalá te sirva!
P.D.: Disculpa la demora en la respuesta...
Hola,
Esta respuesta es una pasada. Nunca había visto a nadie con ese nivel de respuestas, ... ¿dónde te envío el jamón?.
Otra cosa, hemos resuelto el problema, creando arrays multidimensionales, donde las filas son los registros, y la primera columna es el nombre de la variable, y el resto sus valores.
Sin embargo, me voy a estudiar lo que me indicas, porque me parece muy ingenioso.
Saludos, y un abrazo.
José Luis

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas