Autor Tema: Saldos  (Leído 3100 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Saldos
« en: Octubre 20, 2010, 10:42:38 pm »
Hola, estoy tocando una BD que yo no diseñe, y me encuentro con una tabla que tiene 3 campos: ID, Fecha y Cantidad, y va asi:

id        Fecha     Cantidad
12         01/01/01         30
13         02/01/01        -10
14         02/01/01          -1
15         03/01/01         20
16         04/01/01       100
17         06/01/01         -5

y así sucesivamente unos cuantos cientos de miles de registros, donde para saber el total en un rango de fecha hacen un sum entre ese rango de fecha.
Sucede que queremos crear un reporte que muestre la información asi:

id        Fecha     Cantidad      Saldo
12         01/01/01         30         30
13         02/01/01        -10         20
14         02/01/01          -1         19
15         03/01/01         20         39
16         04/01/01       100       139
17         06/01/01         -5        134

Pero hay algunas consideraciones, no podemos crear un campo con Saldo en la BD porque algunos de estos registros a veces se eliminan y habria que después recalcular el saldo de cada registro y ademas por otros temas que no viene al caso explicar, aceptemos la limitación.
Yo por ahora pienso es hacer una vista donde alli construir el resultado de la consulta para luego pintarlo en un reporte, pero quisiera saber si hay alguna forma mas sencilla de hacerlo?
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Saldos
« Respuesta #1 en: Octubre 21, 2010, 06:51:08 pm »
Lo mejor que puedes hacer es armarte una vista...!
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Saldos
« Respuesta #2 en: Octubre 21, 2010, 10:50:01 pm »
Hola Miguel, si, una vista es adecuada, pero ya se me complicaba cuando la consulta era con un rango de fecha y antes de ese rango existiera un saldo, asi que el primer registro de la Vista deberia tener la suma del total previo mas la del primer registro, pero bueno, he  encontrado otra forma de resolverlo, siempre queriendo ver otras alternativas y aplicando el estilacho barysoft jeje opte por esta opción, de pronto a alguien le sirve:

Leo la tabla (obviemos el rango de fechas para fines explicativos)
Código: ( vb) [Seleccionar]
rs.Open "Select id, Fecha, Cantidad, '' as Saldo", dB, adOpenDynamic, adLockPessimistic

Y luego ayudándome con ADO hago lo siguiente
Código: ( vb) [Seleccionar]
SaldoPrevio=0
If rs.RecordCount > 0 Then
   For i = 1 To rs.RecordCount
      If i = 1 Then
         rs.Fields("SALDO").Value = rs.Fields("Cantidad") + SaldoPrevio
         NuevoSaldo = rs.Fields("Cantidad") + SaldoPrevio
      Else
         rs.Fields("SALDO").Value = rs.Fields("Cantidad") + NuevoSaldo
         NuevoSaldo = rs.Fields("Cantidad") + NuevoSaldo
      End If
      rs.Update
      rs.MoveNext
   Next i
End If

Set Reporte.DataSource = rs

Donde la primera linea SaldoPrevio = 0, pudiera tener otro valor obtenido de una consulta previa.

Y bueno me va muy bien, salvo que algo se me esta pasando (por ejemplo tener que usar adLockPessimistic ) y entonces agradecería me lo adviertan. Sino, espero que a alguien le sirva.

Saludos
Me encuentras en YAcosta.com

wolf_kof

  • Visitante
Re:Saldos
« Respuesta #3 en: Octubre 22, 2010, 11:33:22 am »
consejo es mas corto utilizar

rs!saldo a rs.fields("SALSDO").value

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Saldos
« Respuesta #4 en: Octubre 22, 2010, 02:20:07 pm »
consejo es mas corto utilizar

rs!saldo a rs.fields("SALDO").value

Gracias.
Me encuentras en YAcosta.com