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

Borrar registros y restarle 1 al campo de otra tabla sin multiples consultas a la BD

Estas en el tema de Borrar registros y restarle 1 al campo de otra tabla sin multiples consultas a la BD en el foro de ASP Clásico en Foros del Web. Hola amigos... basandome en el sistema de borrar a lo hotmail de urjose he hecho esto: Código: <% @Language="VBscript" %> <html> <head> <title>Borrar registros de ...
  #1 (permalink)  
Antiguo 12/05/2005, 09:30
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
Borrar registros y restarle 1 al campo de otra tabla sin multiples consultas a la BD

Hola amigos... basandome en el sistema de borrar a lo hotmail de urjose he hecho esto:
Código:
<% @Language="VBscript" %>
<html>
<head>
<title>Borrar registros de la base de datos</title>
<script>
window.opener.location.reload();
window.close();
</script>
</head>
<body>
<%
'Declaración de variables
Dim conn
Dim rs
Dim producto_sql
Dim categoria_sql
Dim categoria
Dim total_productos
Dim id
'Rescate de variables pasadas por formulario
id = Request.Form("id")

'Establecemos la conección a la base de datos
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../catalogo.mdb"))

'Creación de la sentencia SQL correspondiente (cambiar el valor de tabla por el nombre de la tabla que queremos seleccionar)
producto_sql="Select categoria From productos Where id_producto = " & id & ""

'Ejecución de la orden
Set rs = Conn.Execute(producto_sql)

'Fijaci{on del valor de la variable categoria
categoria = rs("categoria")

'Creación de la sentencia SQL correspondiente (cambiar el valor de tabla por el nombre de la tabla que queremos seleccionar)
categoria_sql="Select * From categorias Where id_categoria = " & categoria & ""

'Ejecución de la orden
Set rs = Conn.Execute(categoria_sql)

'Se resta 1 al numero de productos de la categoría
total_productos = rs("total_productos")
total_productos = total_productos - 1

'Creación de la sentencia SQL correspondiente (cambiar el valor de tabla por el nombre de la tabla que queremos seleccionar)
categoria_sql="Update categorias Set total_productos = " & total_productos & " Where id_categoria = " & categoria & ""

'Ejecución de la orden
Set rs = Conn.Execute(categoria_sql)

'Creación de la sentencia SQL correspondiente (cambiar el valor de tabla por el nombre de la tabla que queremos seleccionar)
producto_sql="Delete * From productos Where id_producto In(" & id & ")"

'Ejecución de la orden
Set rs = Conn.Execute(producto_sql)
%>
</body>
</html>
Mi idea es que cada bes que se borre un registro de la tabla productos se le quite 1 al campo total_productos de otra tabla (categorias).... bueno la cosa es que este script lo logra.... pero se que no hay nada peor para un server que eso de muchas consultas a la vez... por eso quiero saber si se puede hacer esto de otra forma.... bueno eso saludos y gracias
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 12/05/2005, 09:46
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola

Si tienes razon en pensar que es malo tener muchas consultas, pero cuando son necesarias ni modo, las haces y listo. Pero mas malo es cuando tienes consultas que dependen de resultados de otras, no se que Base de Datos estas usando, pero te recomiendo buscar algo como TRANS, o un trigger, podrias hacer algo como:

BEGIN TRAN

delete from tabla1

if @@ERROR > 0
rollbacktran

update tabla2 set cont = cont + 1

if @@ERROR > 0
rollbacktran

COMMIT TRAN

La otra es con triggers:

create trigger ... sobre tabla 1, entonces lo programas para que automaticamente cuando se borre un registro actualize la tabla 2, entonces en todo tu codigo tu no te preocuparas por tabla 2, tu puedes hacer algo como:

delete from tabla1

Y por el trigger automaticamente se sumara uno a la tabla 2, sin que tu tengas que haces mas consultas.

Lo que aseguras con esos metodos, no siempre es mas velocidad, etc, pero si aseguras la integridad de tus datos, es decir, las consultas que deben correr juntas siempre sabes que realmente corrieron juntas...

Pero claro, te lo dejo como comentario, porque no se que base de datos estas usando, pero en cualquiera que sea debes buscar la forma de poder prevenir ese error de bases de datos.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #3 (permalink)  
Antiguo 12/05/2005, 10:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Todo esto es verdad, pero tampoco se debe satanizar tanto este concepto, no pasa nada por ejecutar 3 consultas como esta, como dijo Neuron, si se tiene que hacer, se tiene que hacer y listo.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 21:34.