Visual Basic - Como puedo manejar estos datos historicos. Con SP?

Life is soft - evento anual de software empresarial
 
Vista:

Como puedo manejar estos datos historicos. Con SP?

Publicado por Pablo (33 intervenciones) el 03/04/2007 06:09:46
Les comento. Tengo un proyecto de Cta. Cte. Tengo 2 tablas en la mdb, 1 de Saldos y otra con los reg de las Cta Cte's.

En la TblSaldo tengo los campos NumCliente, FechaAlta, NombreCli, Saldo.

Y en la TblCtaCte NumCliente, Fecha, NumReg <-(es autonum), Importe, tipoOper,
SaldoAnterior..... etc.

Tengo una funcion que me calcula el saldo y el saldo anterior, lo introduce en el campo de Saldo alterior de TblCtaCte y campo Saldo de la otra tabla (TblSaldo), hasta aca vengo bien. Les paso algo de cod:
Public Function ReCalcular_CtaCte(ByRef intNunCliente As Integer, Optional ByRef lngID As Long) As Double
Dim rstFindChangeCtaCte As ADODB.Recordset
Set rstFindChangeCtaCte = New ADODB.Recordset
Dim dblCompra As Double
Dim dblPago As Double
If lngID = -1 Then 'si es -1 quiere decir que calcula hasta el ultimo reg.
QrySql = "Select Sum(Importe) As Compra From TblCtaCte Where NroCliente=" & _
intNunCliente & " And TpoOper='COMPRA';"
'si es > 1 calcula desde el núm de reg seleccionado hasta el primero.
Else
QrySql = "Select Sum(Importe) As Compra From TblCtaCte Where NroCliente=" & _
intNunCliente & " And TpoOper='COMPRA' And ID<=" & lngID & ";"
End If
With rstFindChangeCtaCte
.Open QrySql, Cnn, adOpenStatic, adLockReadOnly
If Not (.BOF And .EOF) Then
If Not IsNull(.Fields("Compra")) Then
dblCompra = .Fields("Compra")
End If
Else 'Sale por que es un Cliente nuevo, para que no genere error en ejecución.
Exit Function
End If
.Close
End With
If lngID = -1 Then
QrySql = "Select Sum(Importe) As Pago From TblCtaCte Where NroCliente=" & _
intNunCliente & " And TpoOper<>'COMPRA';"
Else
QrySql = "Select Sum(Importe) As Pago From TblCtaCte Where NroCliente=" & _
intNunCliente & " And TpoOper<>'COMPRA' And ID<=" & lngID & ";"
End If
With rstFindChangeCtaCte
.Open QrySql, Cnn, adOpenStatic, adLockReadOnly
If Not IsNull(.Fields("Pago")) Then
dblPago = .Fields("Pago")
End If
.Close
End With
ReCalcular_CtaCte = Format(dblCompra - dblPago, "#########.0#")
Cnn.Execute "Update TblSaldos Set Saldo='" & ReCalcular_CtaCte & "'Where NroCliente=" & intNunCliente & ";"
End Function
Como verán esto solo calcula el reg actual teniendo en cuenta lo que hay por detras de los otros reg, el tema esta que al modificar un reg anterior (por eje. el cliente tiene 450 reg y yo modifico el reg núm 39) los reg de adelante me quedan con un saldo anteror erroneo.
Hay alguna forma de actualizar todos los reg mayores al 39? con pocos recursos del equipo?
Como les comente la base es de Access (mdb), programe en ADO sin objetos, todo con ADODB.Connection y ADODB.Recordset.
Estuve leyendo un poco de procedimientos almacenados para Access pero solo encontre que son para consultas, pienso que anidar un par de RecordSet y unos Array podrian ser una solucion pero consulto para ver que herramientas hay que no conosca.... GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como puedo manejar estos datos historicos. Con

Publicado por Luis Prieto (166 intervenciones) el 03/04/2007 07:21:15
Hola, Pablo!!!

Si lo que quieres es actualizar intervalos de registros en tu ejemplo del 39 hasta el 450.

Lo que puedes hacer es una bucle y dentro del del bucle preguntas por el inicio y el fin.

Si lo que quieres es actualizar desde un registro X hasta el final.

Lo que puedes hacer es una bucle recorriendo toda la tabla hacia adelante.

Espero te ayude.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar