Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/01/2010, 12:52
yera2002
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: Store Procedure

Ok: Mira el proceso te lo voy a explicar mas o menos. Con un pequeño ejemplo:

Tengo 3 tablas:

Ventas
Detalle de ventas
Detalle de pagos

Esto esta en una base de datos en la tienda. La base de datos es operativa. La idea es mantener esta base de datos con tan solo 3 meses de informacion, es decir, si estamos en enero tener la informacion solamente de Noviembre, Diciembre y Enero. esto para que el acceso a datos sea más rapido. y la respuesta del servidor tambien.

Mi aplicacion ya tiene una herramienta que verifica las fechas y borra la informacion tres meses hacia atras. Ahora, el detalle es el siguiente, dependiendo de la epoca del año, la base de datos crece esto debido a las ventas que hay en la misma. En ocasiones el servidor me indica el siguiente error cuando corro esta aplicacion desde la aplicacion. "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding", por lo mismo la informacion se va quedando resagada y llega un momento en el que esa informacion al no depurarse se vuelve "basura". Ahora bien, yo pense que puedo crear un store procedure en la base de datos que haga toda la funcion que realiza el aplicativo, esto con el fin de mejorar el performance y evitar en medida de lo posible el error. Un ejemplo de lo que hago es:

Tabla Ventas:

Venta (PK)
Cliente
Importe
Descuento
Impuesto
Fecha

Tabla Detalle de venta
id (PK)
Venta(FK)
Articulo
Cantidad
Precio Unitario
Descuento
Impuesto

Tabla detalle de pagos
id(PK)
Venta (FK)
Forma de pago
Monto del pago
Ingreso/Egreso
Fecha

Mi aplicativo hace mas o menos lo siguiente

Dim recordsetVenta As ADODB.Recordset
Dim recordsetDetalle As ADODB.Recordset
Dim recordsetPagos As ADODB.Recordset

Set recordsetVenta = New ADODB.Recordset
recordsetVenta.CursorType = adOpenForwardOnly
recordsetVenta.LockType = adLockReadOnly

recordsetVenta.Open "SELECT venta FROM ventas WHERE fecha <= '" & Date - 100 & "'", Connection, , , adCmdText

While Not recordsetVenta.EOF
Set recordsetDetalle = New ADODB.Recordset
recordsetDetalle.CursorType = adOpenForwardOnly
recordsetDetalle.LockType = adLockReadOnly

recordsetDetalle.Open "SELECT * FROM [detalle venta] WHERE venta = " & recordsetVenta("venta"), Connection, , , adCmdText

If Not recordsetDetalle.EOF Then
Connection.Execute "DELETE FROM [detalle venta] WHERE venta = "& recordsetVenta("venta")
End If

Set recordsetPagos = New ADODB.Recordset
recordsetPagos.CursorType = adOpenForwardOnly
recordsetPagos.LockType = adLockReadOnly

recordsetPagos.Open "SELECT * FROM [detalle pagos] WHERE venta = " & recordsetVenta("venta"), Connection, , , adCmdText

If Not recordsetPagos.EOF Then
Connection.Execute "DELETE FROM [detalle pagos] WHERE venta = "& recordsetVenta("venta")
End If

Connection.Execute "DELETE FROM [ventas] WHERE venta = "& recordsetVenta("venta")

recordsetVenta.MoveNext
Wend


Estoy simulando una operacion muy sencilla, realmente la base de datos interactua con mas tablas y básicamente ese es el concepto. ¿Tienes alguna sugerencia?