Foros del Web » Programando para Internet » ASP Clásico »

Busco una función o bucle para ahorrar codigo

Estas en el tema de Busco una función o bucle para ahorrar codigo en el foro de ASP Clásico en Foros del Web. Hola ¿Puede ayudarme alguien a automatizar con un For ...next a algo así este código? Simplemente estoy automatizando la escritura del nombre de una serie ...
  #1 (permalink)  
Antiguo 17/06/2005, 03:49
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 23 años, 1 mes
Puntos: 2
Busco una función o bucle para ahorrar codigo

Hola ¿Puede ayudarme alguien a automatizar con un For ...next a algo así este código?

Simplemente estoy automatizando la escritura del nombre de una serie de fotos para un registro de una BD.


'Bucle para insertar automáticamente el nombre de las fotos

fotos = Request.Form("fotos") 'Puede ser de 1 a 6
ref = Request.Form("ref") 'Número de referencia. (Numero Entero)

If fotos = 1 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = ""
rs.Fields("fotoG2") = ""
rs.Fields("fotoP3") = ""
rs.Fields("fotoG3") = ""
rs.Fields("fotoP4") = ""
rs.Fields("fotoG4") = ""
rs.Fields("fotoP5") = ""
rs.Fields("fotoG5") = ""
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""
Elseif fotos = 2 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
rs.Fields("fotoP3") = ""
rs.Fields("fotoG3") = ""
rs.Fields("fotoP4") = ""
rs.Fields("fotoG4") = ""
rs.Fields("fotoP5") = ""
rs.Fields("fotoG5") = ""
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""
Elseif fotos = 3 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
rs.Fields("fotoP3") = "r" & ref & "f3P.jpg"
rs.Fields("fotoG3") = "r" & ref & "f3G.jpg"
rs.Fields("fotoP4") = ""
rs.Fields("fotoG4") = ""
rs.Fields("fotoP5") = ""
rs.Fields("fotoG5") = ""
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""
Elseif fotos = 4 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
rs.Fields("fotoP3") = "r" & ref & "f3P.jpg"
rs.Fields("fotoG3") = "r" & ref & "f3G.jpg"
rs.Fields("fotoP4") = "r" & ref & "f4P.jpg"
rs.Fields("fotoG4") = "r" & ref & "f4G.jpg"
rs.Fields("fotoP5") = ""
rs.Fields("fotoG5") = ""
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""
Elseif fotos = 5 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
rs.Fields("fotoP3") = "r" & ref & "f3P.jpg"
rs.Fields("fotoG3") = "r" & ref & "f3G.jpg"
rs.Fields("fotoP4") = "r" & ref & "f4P.jpg"
rs.Fields("fotoG4") = "r" & ref & "f4G.jpg"
rs.Fields("fotoP5") = "r" & ref & "f5P.jpg"
rs.Fields("fotoG5") = "r" & ref & "f5G.jpg"
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""
Elseif fotos = 6 Then
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
rs.Fields("fotoP3") = "r" & ref & "f3P.jpg"
rs.Fields("fotoG3") = "r" & ref & "f3G.jpg"
rs.Fields("fotoP4") = "r" & ref & "f4P.jpg"
rs.Fields("fotoG4") = "r" & ref & "f4G.jpg"
rs.Fields("fotoP5") = "r" & ref & "f5P.jpg"
rs.Fields("fotoG5") = "r" & ref & "f5P.jpg"
rs.Fields("fotoP6") = "r" & ref & "f6P.jpg"
rs.Fields("fotoG6") = "r" & ref & "f6G.jpg"
End If

rs.Update


  #2 (permalink)  
Antiguo 17/06/2005, 04:50
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 23 años, 2 meses
Puntos: 0
el truco esta en sustitir el nº por la i

estudia algo asi:

<%
fotos = Request.Form("fotos") 'Puede ser de 1 a 6
ref = Request.Form("ref") 'Número de referencia. (Numero Entero)
for i=1 to fotos
rs.Fields("fotoP"&i) = "r" & ref & "f"&i&"P.jpg"
rs.Fields("fotoG"&i) = "r" & ref & "f"&i&"G.jpg"
next

%>
  #3 (permalink)  
Antiguo 17/06/2005, 08:36
Avatar de Pachangero  
Fecha de Ingreso: marzo-2005
Mensajes: 102
Antigüedad: 20 años
Puntos: 0
Saludos

Siguiendo el consejo de rrufo esta puede ser una alternativa.

Código:
fotos = Request.Form("fotos") 'Puede ser de 1 a 6
ref = Request.Form("ref") 'Número de referencia. (Numero Entero)

select case fotos
case 1:
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
for i=2 to 6
      rs.Fields("fotoP"&i) = ""
      rs.Fields("fotoG"&i) = ""
next

case 2:
rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
rs.Fields("fotoP2") = "r" & ref & "f2P.jpg"
rs.Fields("fotoG2") = "r" & ref & "f2G.jpg"
for i=3 to 6
      rs.Fields("fotoP"&i) = ""
      rs.Fields("fotoG"&i) = ""
next

case 3:
for i=1 to 3
rs.Fields("fotoP"&i) = "r" & ref & "f"&i&"P.jpg"
rs.Fields("fotoG"&i) = "r" & ref & "f"&i&"G.jpg" 
next
for i=4 to 6
      rs.Fields("fotoP"&i) = ""
      rs.Fields("fotoG"&i) = ""
next

case 4 :
for i=1 to 4
      rs.Fields("fotoP"&i) = "r" & ref & "f"&i&"P.jpg"
      rs.Fields("fotoG"&i) = "r" & ref & "f"&i&"G.jpg" 
next
rs.Fields("fotoP5") = ""
rs.Fields("fotoG5") = ""
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""

case 5:
for i=1 to 5
      rs.Fields("fotoP"&i) = "r" & ref & "f"&i&"P.jpg"
      rs.Fields("fotoG"&i) = "r" & ref & "f"&i&"G.jpg" 
next
rs.Fields("fotoP6") = ""
rs.Fields("fotoG6") = ""

case 6:
for i=1 to 6
      rs.Fields("fotoP"&i) = "r" & ref & "f"&i&"P.jpg"
      rs.Fields("fotoG"&i) = "r" & ref & "f"&i&"G.jpg" 
next
End select

rs.Update
Introduje el for en las lineas donde habia mayor cantidad de operaciones y en las sencillas, deje el codigo original.

También cambie la sentencia If por un Select case.

Espero te sirva.
  #4 (permalink)  
Antiguo 17/06/2005, 08:39
Avatar de Pachangero  
Fecha de Ingreso: marzo-2005
Mensajes: 102
Antigüedad: 20 años
Puntos: 0
Saludos

Si quieres reducirlo mas, lo que seria mejor, puedes utilizar una función. Nada mas tienes que ver muy bien como plantearlo.

Suerte.
  #5 (permalink)  
Antiguo 17/06/2005, 11:18
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 23 años, 1 mes
Puntos: 2
ok, gracias amigos. Me ha servido de gran ayuda. AL final he hecho lo siguiente:


Código:
'Bucle para insertar automáticamente el nombre de las fotos
If fotos = 1 Then

	rsAdd.Fields("fotoP1") = "r" & ref & "f1P.jpg"
	rsAdd.Fields("fotoG1") = "r" & ref & "f1G.jpg"

	i= 2
	For i = 2 to 6
	rsAdd.Fields("fotoP"&i) = "e"
	rsAdd.Fields("fotoG"&i) = "e"
	Next

Elseif fotos = 2 Then

	i= 1
	For i = 1 to 2
	rsAdd.Fields("fotoP"&i) = "r" & ref & "f" & i & "P.jpg"
	rsAdd.Fields("fotoG"&i) = "r" & ref & "f" & i & "G.jpg"
	Next

	i= 3
	For i = 3 to 6
	rsAdd.Fields("fotoP"&i) = "e"
	rsAdd.Fields("fotoG"&i) = "e"
	Next


Elseif fotos = 3 Then

	i= 1
	For i = 1 to 3
	rsAdd.Fields("fotoP"&i) = "r" & ref & "f" & i & "P.jpg"
	rsAdd.Fields("fotoG"&i) = "r" & ref & "f" & i & "G.jpg"
	Next

	i= 4
	For i = 4 to 6
	rsAdd.Fields("fotoP"&i) = "e"
	rsAdd.Fields("fotoG"&i) = "e"
	Next

Elseif fotos = 4 Then

	i= 1
	For i = 1 to 4
	rsAdd.Fields("fotoP"&i) = "r" & ref & "f" & i & "P.jpg"
	rsAdd.Fields("fotoG"&i) = "r" & ref & "f" & i & "G.jpg"
	Next

	i= 5
	For i = 5 to 6
	rsAdd.Fields("fotoP"&i) = "e"
	rsAdd.Fields("fotoG"&i) = "e"
	Next

Elseif fotos = 5 Then

	i= 1
	For i = 1 to 5
	rsAdd.Fields("fotoP"&i) = "r" & ref & "f" & i & "P.jpg"
	rsAdd.Fields("fotoG"&i) = "r" & ref & "f" & i & "G.jpg"
	Next

	rsAdd.Fields("fotoP6") = "e"
	rsAdd.Fields("fotoG6") = "e"

Elseif fotos = 6 Then

	i= 1
	For i = 1 to 6
	rsAdd.Fields("fotoP"&i) = "r" & ref & "f" & i & "P.jpg"
	rsAdd.Fields("fotoG"&i) = "r" & ref & "f" & i & "G.jpg"
	Next

End If
¿hay alguna forma mejor de hacerlo?
  #6 (permalink)  
Antiguo 17/06/2005, 11:47
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
Hola

Pero no están aprovechando bien el for, creo que seria asi:

'Por lo que veo, tienes 6 espacios fijos, entonces
intEspacios = 6
'Espacios ocupados
intFotos = fotos

'Sabes que tienes que llenarlos todos, ya sea vacio o con valor real.

'For para recorrer todos tus espacios
for i = 1 to intEspacios

if i <= intFotos
'Es un espacio con valor valido

rs.Fields("fotoP" & Cstr(i)) = "r" & ref & "f" & Cstr(i) & "P.jpg"
rs.Fields("fotoG" & Cstr(i)) = "r" & ref & "f" & Cstr(i) & "G.jpg"

else

'Es un espacio con valor vacío
rs.Fields("fotoP" & Cstr(i)) = ""
rs.Fields("fotoG" & Cstr(i)) = ""

end if

next

Algo así es como tendría que ser, revisa la sintaxis y posibles errores, no es un codigo probado, pero esa es la mejor manera de hacerlo.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #7 (permalink)  
Antiguo 20/06/2005, 00:53
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 23 años, 2 meses
Puntos: 0
señors, co mi cogigo creo q se adecua perfectamente, el unico problema es q no realiza,
la operacion de espacio vacio,
'Es un espacio con valor vacío
rs.Fields("fotoP" & Cstr(i)) = ""

pero considero q esto se tiene qw hacer al crear el registro por defecto vacio
  #8 (permalink)  
Antiguo 20/06/2005, 09:34
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
De acuerdo..

Siempre es mejor tener declarados defaults desde la base de datos, pero no sabemos si mrgubu lo tiene así, o tiene un NULL, etc. entonces es mejor tener toda la validación necesaria.

Aunque estoy de acuerdo que si tiene el default desde la base de datos, se ahorra algunos pasos y hace más fácil el ASP.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #9 (permalink)  
Antiguo 21/06/2005, 02:40
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 23 años, 2 meses
Puntos: 0
Cita:
Iniciado por Neuron_376
Siempre es mejor tener declarados defaults desde la base de datos, pero no sabemos si mrgubu lo tiene así, o tiene un NULL, etc. entonces es mejor tener toda la validación necesaria.

Aunque estoy de acuerdo que si tiene el default desde la base de datos, se ahorra algunos pasos y hace más fácil el ASP.

Suerte!!

lo rero es tenr algo diferente a null
  #10 (permalink)  
Antiguo 21/06/2005, 07:40
Avatar de Pachangero  
Fecha de Ingreso: marzo-2005
Mensajes: 102
Antigüedad: 20 años
Puntos: 0
Saludos

Esta puede ser otra manera, mirala, no la he probado puede servir, revisa y corrige si es necesario.

Código:
Function llenado2(foto1,foto2)
    for i=foto1 to foto2
        rs.Fields("fotoP"&i) = ""
        rs.Fields("fotoG"&i) = ""
    next
End Function

If fotos = 1 Then

rs.Fields("fotoP1") = "r" & ref & "f1P.jpg"
rs.Fields("fotoG1") = "r" & ref & "f1G.jpg"
envia_foto1=2
envia_foto2=6
	operacion = llenado2(envia_foto1,envia_foto2)
end if
La idea es que puedes utilizar una función para ahorrarte mas lineas, unicamente seria cosa de ver como adaptarla.

Suerte
  #11 (permalink)  
Antiguo 21/06/2005, 09:37
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
Depende...

Cita:
Iniciado por rrufo
lo rero es tenr algo diferente a null
En bases de datos depende mucho de lo que quieres lograr, no siempre el default es NULL, tu puedes decir, NOT NULL default (''), esto a veces lo haces y mas en ASP porque no quieres problemas desde consultas hasta cuando lo recoges en una consulta..

Ejemplo:

select (campo1 + campo2) 'localidad'

Si tienes por defaults NULL, eso no funcionara y tendras que usar cosas como:

isnull(campo1, ''), etc.

También cuando recibes en ASP una consulta como:

select campo1 from tabla

Cstr(rs("campo1")) --> Da un error porque puede ser un NULL, entonces necesitas validaciones extras para ese caso.

Bueno, entonces esos detalles hacen que decidas si usar NULL o usar default.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:16.