Access - Resta continua de cantidades de un recordset de un valor dado en un formulario

 
Vista:
sin imagen de perfil

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por Jimmy Alberto (23 intervenciones) el 27/05/2013 23:33:55
Buenas tardes Programadores

Tengo una base de datos en access, para la tabla tengo una serie de registros, cada uno de esos registros tiene un número que representa una cantidad de producto que se requiere; desde un formulario he creado un campo al cual le dígito una cantidad cualquiera y le coloque un botón para que al dar clic corra la siguiente rutina.

1. Tome el valor digitado en el campo del formulario y lo reste de la cantidad requerida del primer registro. luego
2. Tome ese nuevo saldo y lo reste de la cantidad requerida del segundo registro y así sucesivamente para los demás registros del recordset.

Lo único que he logrado es que haga la primera transacción, pero no logro que el bucle trabaje con los otros registros.

Los campos de la tabla son:

Proyecto - Código - Cant_RQ - Saldo
1341 1-ACERO 4
1342 1-ACERO 6
1343 1-ACERO 7
1344 1-ACERO 8

La rutina que he programado es la siguiente:

Private Sub Comando4_Click()

Dim db As Database
Dim rs As DAO.Recordset
Dim SUM As Integer
Dim J As Integer
Dim N As Integer
Dim I As Variant
Dim M As Integer
Dim SUMA As Integer


Set db = CurrentDb
Set rs = db.OpenRecordset("consulta1")

If rs.RecordCount <> 0 Then 'HAY REGISTROS
End If

SUM = 0
N = rs.RecordCount

rs.MoveLast
rs.MoveFirst
rs.Edit

For I = 1 To N
J = rs.Fields("CANT_RQ")
SUM = SUM + J
rs.Fields("SALDO") = SUM
rs.Fields("ESTADO") = 150
Next I
SUM = rs.Fields("SALDO")
rs.Update
rs.Close
Me.Refresh
Set rs = Nothing
End Sub

Agradezco si me pueden ayudar, pues no he logrado solucionar este problema.

Si requieren copia de la base de datos de prueba mi correo es [email protected]

Jimmy Alberto Pulido
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

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por 2pl (461 intervenciones) el 28/05/2013 08:09:53
Así, a bote pronto observo que te falta el "edit" para cada registro que lees.
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

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por jose (830 intervenciones) el 28/05/2013 12:09:07
asi mirandolo un poco por encima veo que te falta rs.movenext



For I = 1 To N
J = rs.Fields("CANT_RQ")
SUM = SUM + J
rs.Fields("SALDO") = SUM
rs.Fields("ESTADO") = 150

rs.movenext : rem esto te falta

Next I
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

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por jose (830 intervenciones) el 28/05/2013 12:32:56
y si quieres modificar todos los registros estos tiene que estar en el bucle


For I = 1 To N
J = rs.Fields("CANT_RQ")
SUM = SUM + J
rs.Fields("SALDO") = SUM
rs.Fields("ESTADO") = 150


SUM = rs.Fields("SALDO")
rs.Update

Next I



rs.movenext : rem esto te falta



rs.Close
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
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por Norberto (753 intervenciones) el 28/05/2013 12:29:55
Hola.

Aparte de lo que te dice 2pl veo que falta un rs.MoveNext en el bucle For...Next para que cambie de registro. Tampoco me convence mucho el bucle. También haces una comprobación que no entiendo: If rs.RecordCount <> 0 Then End If. Si hay registros no hace nada y si no los hay, tampoco.

Prueba con ésto a partir de la declaración de variables:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set db = CurrentDb
Set rs = db.OpenRecordset("consulta1")
 
SUM = 0
 
Do While Not rs.EOF
    J = rs.Fields("CANT_RQ")
    SUM = SUM + J 'Hablas de resta continua y sin embargo sumas
    rs.Edit
    rs.Fields("SALDO") = SUM
    rs.Fields("ESTADO") = 150
    rs.Update
    rs.MoveNext
Loop
 
SUM = rs.Fields("SALDO") 'Ésta no sé si debería de estar aquí o dentro del bucle antes del MoveNext
'o incluso sobra.
 
rs.Close
Me.Refresh
Set rs = Nothing
Set db = Nothing


Un saludo.
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
sin imagen de perfil

Resta continua de cantidades de un recordset de un valor dado en un formulario

Publicado por Jimmy Alberto (23 intervenciones) el 28/05/2013 15:16:18
Norberto

Muchas gracias por el código, hice las correcciones que me mencionó y funciona Perfecto. Gracias.

Jose y 2pl gracias por sus aportes.
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
sin imagen de perfil

Optimización Resta Continuada de un Recordset

Publicado por Jimmy Alberto (23 intervenciones) el 29/05/2013 15:35:02
Buenos días Programadores

Gracias a su colaboración he logrado que la rutina haga lo que esperaba, pero me surgieron unas inquietudes sobre la manera de optimizar las sentencias condicionales que planteo en la rutina; y la otra es sobre el formato de los datos ya que indico que las variables son de tipo integer pero cuando actualizo me redondea las cantidades que llevan decimales. el código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Private Sub Comando4_Click()
 
Dim db As Database
Dim rs As DAO.Recordset
Dim SUM As Integer
Dim J As Integer
Dim N As Integer
Dim M As Integer
Dim RES As Integer
Dim VAL As Integer
Dim C As Integer
 
Set db = CurrentDb
Set rs = db.OpenRecordset("consulta1")
 
N = Me.CANT_EXS
SUM = 0
 
 
Do While Not rs.EOF
    J = rs.Fields("CANT_RQ")
    SUM = SUM + J
    REST = SUM - J
    VAL = N - REST
    rs.Edit
    rs.Fields("SALDO") = SUM
    rs.Fields("ACUM") = REST
    If VAL > 0.1 Then
    rs.Fields("VAL") = VAL
    Else
    rs.Fields("VAL") = 0
    End If
    If J <= VAL Then
    rs.Fields("CANT_CNS") = J
    Else
    rs.Fields("CANT_CNS") = VAL
    End If
    If VAL <= 0 Then
    rs.Fields("CANT_CNS") = 0
    End If
    rs.Fields("ESTADO") = 150
    rs.Update
    rs.MoveNext
Loop
rs.Close
Me.Refresh
Set rs = Nothing
Set db = Nothing
 
End Sub


Agradezco las sugerencias sobre el mismo. Gracias.
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
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Optimización Resta Continuada de un Recordset

Publicado por Norberto (753 intervenciones) el 06/06/2013 14:14:37
Hola de nuevo.

En cuanto a los condicionales no veo nada que pueda ser simplificado. Por lo que respecta a las conversiones es así. Al asignar a una variable entera un valor decimal se almacena redondeado, por defecto o por esceso, al entero más próximo. Si quieres que siempre se redondee a la baja usa Int(...) ¡OJO! al decir a la baja significa que los positivos van a menos positivos y los negativos a más negativos (3.5 -> 3 y -3.5 -> -4). Que yo recuerde no hay ninguna función que trunque los decimales (3.5 -> 3 y -3.5 -> -3).

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Optimización Resta Continuada de un Recordset

Publicado por Jimmy Alberto (23 intervenciones) el 06/06/2013 14:44:22
Norberto Gracias.
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