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

Como hacer buen uso de los rs

Estas en el tema de Como hacer buen uso de los rs en el foro de ASP Clásico en Foros del Web. Cita: Iniciado por tammander Wow!! ¿Y no te conviene crear algun tipo de transaccion o meter algo de eso como trigger o como procedimeinto en ...

  #31 (permalink)  
Antiguo 19/04/2007, 12:02
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por tammander Ver Mensaje
Wow!! ¿Y no te conviene crear algun tipo de transaccion o meter algo de eso como trigger o como procedimeinto en la BD MSSQL?

Otra cosa, no uses tantos recordset o intenta optimizarlos. Ah! y cierra los que uses.

Es un consejo


Un saludo.

NOS VEMOS DENTRO DE 4 DIAS!!
Disculpa, que es un trigger?
  #32 (permalink)  
Antiguo 19/04/2007, 14:30
Avatar de CésarBalaguer  
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

un trigger es una rutina SQL que se ejecuta automàticamente en la base de datos cada vez que haces un insert, update o delete.
  #33 (permalink)  
Antiguo 19/04/2007, 15:36
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Como hacer buen uso de los rs

Cita:
Tienes toda la razón es de tipo numerico, eso quiere decir que debiera quedar asi:

ConsultaVivienda="select * from vivienda where id_vivien='"&request.QueryString(num)&"'"
De hecho no, no deberías de encerrarlo entre apostrofes, ya que es numérico, pero para SQL Server da lo mismo, el hace el casting implícito en este caso.

Pero a mi me interesa, como ya te lo puse antes, que postearas el código generado (botón derecho -> ver código) de donde mandas el parámetro:
Cita:
Quisiera ver el código fuente ya generado por el servidor de esto:

<script language="javascript">
if (confirm('Esta Seguro de eliminar la Vivienda...?')){
window.open('Eliminar.asp?num=<%=response.Write(re quest.QueryString("ID"))%>','_self','');
}else{
window.open('Vivienda.asp?SW=1','_self','');
}
</script>

Para ver que se manda se parámetro
Quiero ver que tiene request.QueryString("ID"), ahora, tambien quisiera saber que tabla es la que usas para generar el listado original, por que veo que involucras muchas.

Además, por último, quisiera que me confirmaras que has debugueado y rastreado con pruebas de escritorio las condiciones que te validan si se borra o no:

Código:
ConsultaVivienda="select * from vivienda where id_vivien='"&request.QueryString("num")&"'"
VarIDCASA=cint(trim(request.QueryString("num")))
set rs=conn.execute(ConsultaVivienda)
ConsultaGastosComunes="select * from gastocomun where id_vivien='"&request.QueryString("num")&"'"
set rs2=conn.execute(ConsultaGastosComunes)
if not rs.eof then
if rs("Rut_perso")="11.111.111-1" then
if not rs2.eof then
IF cint(rs2("id_vivien"))=VarIDCASA then
....
Luego hablamos de optimizar eso .... por que .... vaya que se puede hacer algo ahí
  #34 (permalink)  
Antiguo 19/04/2007, 19:04
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por Myakire Ver Mensaje
Pero a mi me interesa, como ya te lo puse antes, que postearas el código generado (botón derecho -> ver código) de donde mandas el parámetro:
Esto es de la página del listado original, en donde presiono la X para que elimine el registro, esto lo obtuve como me dijiste, viendo el código fuente.

Ahora, quise ver el código fuente de la página que me dijiste, pero resulta que esa página abre inmediatamente un cuadro de dialogo preguntando si estoy seguro de eliminar el registro y no me deja ver el código fuente, es por lo mismo que te mando este ya que debiera ser los mismos datos que se envian...

Cita:
<tr>
<td><span class="Estilo2">
12
</span></td>
<td>
<span class="Estilo2">
EVELYN RAQUEL LLANTEN
</span></td>
<td><div align="center"><a href="EliminaVivienda.asp?ID=12"><img src="../Imagenes/Eliminar.jpg" width="32" height="32" border="0" /></a></div></td>
</tr>

Efectivamente en el listado original utilizo la tabla de viviendas, y la tabla de personas


Saludos
  #35 (permalink)  
Antiguo 19/04/2007, 19:08
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por jpzapatas Ver Mensaje


Efectivamente en el listado original utilizo la tabla de viviendas, y la tabla de personas
Tambien utilizo la tabla tipovivienda
  #36 (permalink)  
Antiguo 20/04/2007, 08:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Como hacer buen uso de los rs

A ver ..... te pido que leas cuidadosamente lo que te voy a escribir y trates de comprenderlo para que así puedas debatirme si estoy en lo correcto o me des argumentos para que digas lo contrario.

He modificado tu código del post 25 y queda así con exactamente la misma funcionalidad:
Código:
<%
VarIDCASA= trim(request.QueryString("num"))

ConsultaVivienda="select * from vivienda where id_vivien= " & VarIDCASA
set rs=conn.execute(ConsultaVivienda)

if not rs.eof then
   if rs("Rut_perso")="11.111.111-1" then
 
      IF cInt(rs2("id_vivien"))=CInt(VarIDCASA) then
         'NO SE PUEDE BORRAR
         Response.Redirect("Vivienda.asp?SW=1&Error=8")
      ELSE
			   'BORRO LA VIVIENDA
            sentencia="delete from vivienda where id_vivien= " & VarIDCASA
            conn.execute(sentencia)
						
            sentencia="delete from cuentavivienda"
            conn.execute(sentencia)
						
            Sentencia="Select Count(id_vivien) as CantidadDeCasas from vivienda"
            Set rs6=conn.execute(Sentencia)
						
            sentencia="Select id_vivien from vivienda"
            set rs=conn.execute(sentencia)
						
            while not rs.eof
               Sentencia="insert into CuentaVivienda (ID_VIVIEN, Cantidad_CuentaVivienda)values('"&rs("ID_VIVIEN")& "', '"&rs6("CantidadDeCasas")&"')"
               conn.execute(Sentencia)
               rs.movenext
            wend
         end if
         Response.Redirect("Vivienda.asp?SW=1&Error=6")
   else
      ' NO PUEDE ELIMINAR LA VIVIENDA
      Response.Redirect("Vivienda.asp?SW=1&Error=7")
   end if
end if
%>
Lo modifiqué no para optimizarlo, por que igual a eso, hay que mejorarlo, por ejemplo no tiene caso que hagas un ciclo para hacer INSERT's de UNO en UNO de todos los registros de "vivienda" cuando con UN SOLO insert puedes agregarlos todos; creas objetos de forma implícita, etc, pero bueno, esa es otra historia.

Lo acomodé así para yo ver más facilmente que tienes mal. Veo para empezar que tienes código duplicado (lo eliminé), yo colocaría un Response.Write Sentencia debajo de cada Conn.Execute y comentaría los execute para ver la secuencia que el programa hizo, con ello verificaría que todo se ejecutó correctamente. Ahora, por último, me llama la atención esto me mencionaste:


Efectivamente en el listado original utilizo la tabla de viviendas, tipovivienda y la tabla de personas. Pero solo borras de Viviendas, se me hace que por ahí tienes otro error de lógica del que no vamos a poder nadie mas que tu, solucionar.
  #37 (permalink)  
Antiguo 20/04/2007, 15:11
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por Myakire Ver Mensaje
A ver ..... te pido que leas cuidadosamente lo que te voy a escribir y trates de comprenderlo para que así puedas debatirme si estoy en lo correcto o me des argumentos para que digas lo contrario.

He modificado tu código del post 25 y queda así con exactamente la misma funcionalidad:
Código:
<%
VarIDCASA= trim(request.QueryString("num"))

ConsultaVivienda="select * from vivienda where id_vivien= " & VarIDCASA
set rs=conn.execute(ConsultaVivienda)

if not rs.eof then
   if rs("Rut_perso")="11.111.111-1" then
 
      IF cInt(rs2("id_vivien"))=CInt(VarIDCASA) then
         'NO SE PUEDE BORRAR
         Response.Redirect("Vivienda.asp?SW=1&Error=8")
      ELSE
			   'BORRO LA VIVIENDA
            sentencia="delete from vivienda where id_vivien= " & VarIDCASA
            conn.execute(sentencia)
						
            sentencia="delete from cuentavivienda"
            conn.execute(sentencia)
						
            Sentencia="Select Count(id_vivien) as CantidadDeCasas from vivienda"
            Set rs6=conn.execute(Sentencia)
						
            sentencia="Select id_vivien from vivienda"
            set rs=conn.execute(sentencia)
						
            while not rs.eof
               Sentencia="insert into CuentaVivienda (ID_VIVIEN, Cantidad_CuentaVivienda)values('"&rs("ID_VIVIEN")& "', '"&rs6("CantidadDeCasas")&"')"
               conn.execute(Sentencia)
               rs.movenext
            wend
         end if
         Response.Redirect("Vivienda.asp?SW=1&Error=6")
   else
      ' NO PUEDE ELIMINAR LA VIVIENDA
      Response.Redirect("Vivienda.asp?SW=1&Error=7")
   end if
end if
%>
Lo modifiqué no para optimizarlo, por que igual a eso, hay que mejorarlo, por ejemplo no tiene caso que hagas un ciclo para hacer INSERT's de UNO en UNO de todos los registros de "vivienda" cuando con UN SOLO insert puedes agregarlos todos; creas objetos de forma implícita, etc, pero bueno, esa es otra historia.

Lo acomodé así para yo ver más facilmente que tienes mal. Veo para empezar que tienes código duplicado (lo eliminé), yo colocaría un Response.Write Sentencia debajo de cada Conn.Execute y comentaría los execute para ver la secuencia que el programa hizo, con ello verificaría que todo se ejecutó correctamente. Ahora, por último, me llama la atención esto me mencionaste:


Efectivamente en el listado original utilizo la tabla de viviendas, tipovivienda y la tabla de personas. Pero solo borras de Viviendas, se me hace que por ahí tienes otro error de lógica del que no vamos a poder nadie mas que tu, solucionar.
Estoy completamente de acuerdo contigo, a exepción que faltó una consulta, que la agrague ahora, me refiero a

Cita:
ConsultaGastosComunes="select * from gastocomun where id_vivien='"&request.QueryString("num")&"'"
set rs2=conn.execute(ConsultaGastosComunes)
de este modo, finalmente quedaría así...

Cita:
<%
VarIDCASA= trim(request.QueryString("num"))

ConsultaVivienda="select * from vivienda where id_vivien= " & VarIDCASA
set rs=conn.execute(ConsultaVivienda)

ConsultaGastosComunes="select * from gastocomun where id_vivien='"&request.QueryString("num")&"'"
set rs2=conn.execute(ConsultaGastosComunes)

if not rs.eof then
if rs("Rut_perso")="11.111.111-1" then

IF cInt(rs2("id_vivien"))=CInt(VarIDCASA) then
'NO SE PUEDE BORRAR
Response.Redirect("Vivienda.asp?SW=1&Error=8")
ELSE
'BORRO LA VIVIENDA
sentencia="delete from vivienda where id_vivien= " & VarIDCASA
conn.execute(sentencia)

sentencia="delete from cuentavivienda"
conn.execute(sentencia)

Sentencia="Select Count(id_vivien) as CantidadDeCasas from vivienda"
Set rs6=conn.execute(Sentencia)

sentencia="Select id_vivien from vivienda"
set rs=conn.execute(sentencia)

while not rs.eof
Sentencia="insert into CuentaVivienda (ID_VIVIEN, Cantidad_CuentaVivienda)values('"&rs("ID_VIVIEN")& "', '"&rs6("CantidadDeCasas")&"')"
conn.execute(Sentencia)
rs.movenext
wend
end if
Response.Redirect("Vivienda.asp?SW=1&Error=6")
else
' NO PUEDE ELIMINAR LA VIVIENDA
Response.Redirect("Vivienda.asp?SW=1&Error=7")
end if
end if
%>
Ahora, me preguntas por que utilizo 3 tablas en el listado principal, pues es para poder visualizar un completo listado de lo que se eliminará y no códigos, no sé si me explico. Por ejemplo en la tabla vivienda, no tengo almacenado el nombre del dueño, si no que solamente su rut, pero en el listado muestro también el nombre, y para poder mostrarlo, debo buscarlo en la tabla personas con el rut que se encuentra en la tabla vivienda... no sé si se entiende...

Pero sabes que creo que nos estamos desviando un poquitito, por que esta página, admito que era mejorable, pero cumple su función, yo creo que el proble debe estar en la página donde muestro el listado una vez que el registro ya fue eliminado, en pocas palabras creo que lo que me falta es obligar a esa pantalla a que actualize sus datos, y eso es lo que no tengo la más mínima idea de como hacer...

Saludos Cordiales y Gracias de nuevo

JPZapataS
  #38 (permalink)  
Antiguo 20/04/2007, 15:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Como hacer buen uso de los rs

Cita:
Pero sabes que creo que nos estamos desviando un poquitito, por que esta página, admito que era mejorable, pero cumple su función, yo creo que el proble debe estar en la página donde muestro el listado una vez que el registro ya fue eliminado, en pocas palabras creo que lo que me falta es obligar a esa pantalla a que actualize sus datos, y eso es lo que no tengo la más mínima idea de como hacer...
De hecho no nos estamos desviando, que salió el hecho de que es mejorable el código, pues si, pero fue debido a que precisamente se esta analizando para ver por que no actualiza. Yo sigo en la idea de que algunos de los "candados" (o condiciones) que tienes esta haciendo que no se ejecute el código del delete. Para entender esas condiciones fue que modifiqué un poco el código y por eso la recomendación de colocar los desplegados y comentar los redirect.

Ahora, lo de las tres tablas también tiene "vela en el entierro" ya que si haces una consulta relacional (INNER JOIN) quizá colocaste un ID que no es, me gustaría verla si fuera posible, para detectar si por alguna razón estamos enviando el código de vivienda que no es.
  #39 (permalink)  
Antiguo 21/04/2007, 07:29
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por Myakire Ver Mensaje
Yo sigo en la idea de que algunos de los "candados" (o condiciones) que tienes esta haciendo que no se ejecute el código del delete. Para entender esas condiciones fue que modifiqué un poco el código y por eso la recomendación de colocar los desplegados y comentar los redirect.

Ahora, lo de las tres tablas también tiene "vela en el entierro" ya que si haces una consulta relacional (INNER JOIN) quizá colocaste un ID que no es, me gustaría verla si fuera posible, para detectar si por alguna razón estamos enviando el código de vivienda que no es.
Lo que pasa es que el código SI borra el registro cuando debe borrarlo, o sea el delete si se ejecuta.

Tengo una idea, que te parece si te envío los 3 archivos y las tablas para que lo revises...?

Saludos
  #40 (permalink)  
Antiguo 23/04/2007, 09:16
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Como hacer buen uso de los rs

Si puedes mandármelos pero modificados a una BD's access (y la incluyes, pf), para que pueda correrlos yo y constatar de ese extrañísimo comportamiento

Saludos
  #41 (permalink)  
Antiguo 23/04/2007, 09:52
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por Myakire Ver Mensaje
Si puedes mandármelos pero modificados a una BD's access (y la incluyes, pf), para que pueda correrlos yo y constatar de ese extrañísimo comportamiento

Saludos
No puede ser un Backup de SQL Server...?
  #42 (permalink)  
Antiguo 23/04/2007, 11:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Como hacer buen uso de los rs

Si, también, solo espero que no tenga miles de registros, jeje
  #43 (permalink)  
Antiguo 25/04/2007, 12:22
Avatar de jpzapatas  
Fecha de Ingreso: octubre-2006
Ubicación: Chile
Mensajes: 87
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Como hacer buen uso de los rs

Cita:
Iniciado por Myakire Ver Mensaje
Si, también, solo espero que no tenga miles de registros, jeje
y como te lo envío, o a donde te lo envío...?
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:12.