Access - Restar el registro anterior del actual

 
Vista:

Restar el registro anterior del actual

Publicado por Rafael (5 intervenciones) el 16/05/2012 19:23:21
Hola a todos.
Necesito vuestra ayuda en un tema con Access. De Access sé lo elemental. Y de SQL muy poco tirando a nada.
He creado una tabla con diversos campos y uno de ellos es la lectura de un contador. Ahora viene la cuestión. Intento crea una consulta sobre la tabla para calcular la diferencia entre dos lecturas del contador consecutivas y el resultado dejarlo en el registro actual pero no me sale. ¿Se ha enfrentado alguien a este reto alguna vez?... ¿Sabe alguien como se haría?...
Desde aquí, agradezco vuestra valiosa ayuda.
Saludos
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

Restar el registro anterior del actual

Publicado por jose (830 intervenciones) el 16/05/2012 21:35:34
para hacerse una idea de lo que quieres, hay que ver primero cual es la estructura de las tablas y que datos tienen.

si me envias un ejemplo de lo que estas haciendo y me explicas lo que quieres llegar a conseguir , te lo echaré un vistazo

[email protected]
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

Restar el registro anterior del actual

Publicado por Rafael (5 intervenciones) el 17/05/2012 13:27:52
Hola Jose.
Pues bien, la estructura es muy simple. Se trata de una tabla con varios campos: kilómetros, importe, coste/litro y fecha.

Para te hagas una idea te pongo una parte de la tabla.
196007 km 60,00 € 1,417 € 28/02/2012
196237 km 41,00 € 1,499 € 13/03/2012
196789 km 58,00 € 1,518 € 21/03/2012
197286 km 54,50 € 1,519 € 22/03/2012
197760 km 66,01 € 1,493 € 24/04/2012
198209 km 62,01 € 1,433 € 15/05/2012

A partir de esta tabla, quiero hacer una consulta para saber qué distancia he recorrido entre dos fechas consecutivas. En Excel es muy fácil pero en Access se me está resistiendo un poco. Con la distancia recorrida puedo calcular el consumo que he tenido entre dos fechas.

Siguiendo con el ejemplo, la consulta sería tal que me calculase otro campo.
196007 km 60,00 € 1,417 € 28/02/2012
196237 km 41,00 € 1,499 € 13/03/2012 230 km
196789 km 58,00 € 1,518 € 21/03/2012 552 km
197286 km 54,50 € 1,519 € 22/03/2012 497 km
197760 km 66,01 € 1,493 € 24/04/2012 474 km
198209 km 62,01 € 1,433 € 15/05/2012 449 km

Hasta el momento no me ha salido. Sigo trabajado en ello.
Espero que me puedas ayudar con ello.
Un saludo
Rafael
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
Val: 23
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Restar el registro anterior del actual

Publicado por jorge (106 intervenciones) el 08/05/2014 21:04:29
Hola tengo una tabla que tiene fecha (este campos es fecha) y otra donde el campo se llama Km ( este campo es numerico) .

en el dia 02/02/1902 le cargo 198 km ( es el km de movida)
en el dia 0502/1902 le cargo 842 km
en el dia 09091902 le cargo 1199km

necesito que me de arroje la diferencia que hay entre 842-198 = 644km

la diferencia que hay entre 1199-842 = 357km
la consulta que necesito es que me arroje en un campo estas cantidades 644 y 357

si podes darme una mano con esta consulta 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

Restar el registro anterior del actual

Publicado por jose (830 intervenciones) el 17/05/2012 14:39:38
bueno Rafael , ya tengo bastantes datos


hay dos formas posibles para hacerlo

una por codigo de programacion

se abre un recordset y se va al primero y se almacena el contador

a
se pasa al siguiente y se calcula la diferencia entre contadores y se graban los km
se almacena el contador y se pasa al registro siguiente
se repite el bucle que comienza en a hasta final del fichero

pero como ésto es bastante complicado, (a manos que si quieras saber como se hace)

lo voy a intentar hacer con los objetos de access y cuando lo tenga hecha te lo envio


la idea es crear una nueva tabla en la que se pongan 2 repostajes en la misma linea y se calcule la diferencia ---y luego pasarlo a la tabla original y dejar ésta tabla de tabajo vacia , hasta el proximo calculo
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

Restar el registro anterior del actual

Publicado por jose (830 intervenciones) el 18/05/2012 11:52:21
saludos Rafael

con objetos acces se complica mucho, crea muchos objetos y a la larga oscurece el entendimiento de la base de datos
al final lo he tenido que hacer con codigo

te envio en una bd la forma de como hacerlo

tabla1
contiene los siguientes datos con sus nombres de campos
1
2
3
4
5
6
7
Tabla1 Id 	fecha 	importe 	precio 	contadorkm 	km
2 	28/02/2012 	60 	1,417 	196007 	0
3 	13/03/2012 	41 	1,499 	196237 	230
4 	21/03/2012 	58 	1,518 	196789 	552
5 	22/03/2012 	54,5 	1,519 	197286 	497
6 	24/04/2012 	66,01 	1,493 	197760 	474
7 	15/05/2012 	62,01 	1,433 	198209 	449

un formulario llamado
for1

tiene un boton (poner km ) y en propiedades - eventos - al hacer clic



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
Private Sub Etiqueta17_Click()
 
Set Rs = CreateObject("ADODB.RecordSet")
Set CON = Application.CurrentProject.Connection
Set Rs2 = CreateObject("ADODB.RecordSet")
Set CON2 = Application.CurrentProject.Connection
 
c10 = "": c20 = "": c30 = "": c40 = "": C50 = "": c60 = " ": c70 = "": c80 = ""
c10 = "SELECT   *  FROM [tabla1] "
 
consulta = c10
'Rs.Open consulta, CON, adOpenDynamic, adLockOptimistic
Rs.Open consulta, CON
Rs.MoveLast
Rs.MoveFirst
contadora = Rs.Fields("contadorkm").Value
 
Rem condiciones
Rem  bucle de recordset
Do While Rs.EOF = False
Rs.MoveNext
If Rs.EOF = True Then GoTo a
consulta2 = "UPDATE Tabla1 SET Tabla1.km = " & Str(Rs.Fields("contadorkm").Value - contadora)
consulta2 = consulta2 & " WHERE ((Tabla1.contadorkm)=   " & Str$(Rs.Fields("contadorkm").Value) & " );  "
 
Rs2.Open consulta2, CON2
 
contadora = Rs.Fields("contadorkm").Value
 
a:
 
Loop
Rs.Close
End Sub
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

Restar el registro anterior del actual

Publicado por Emilio (232 intervenciones) el 18/05/2012 15:44:01
Otra forma mucho mas sencilla es usar la funcion de dominio DSuma, por ejemplo creas una consulta con todos los datos (kilómetros, importe, coste/litro y fecha) mas aparte el id o autonumerico de la tabla en total (id, kilometros, importe, coste/litro y fecha) y en un campo nuevo de la consulta pones algo así:

Saldo: DSuma("kilometros"," nombretabla "," Id <=" & [Id])

Y listo debe hacer lo que quieres.
P. D. Sustituye nombretabla y Id por los nombres verdaderos.

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
sin imagen de perfil
Val: 23
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Restar el registro anterior del actual

Publicado por jorge (106 intervenciones) el 10/05/2014 11:46:46
tengo algo paredido y necesito que entre registro me de la diferencia de los km, pongo la expresion anterior

Saldo: DSuma("kilometros"," nombretabla "," Id <=" & [Id]) , cambio el nombre Kilometro x Km , el nombre de la tabla

pero cuando tengo que cambiar el de Id <=" & [Id] en este caso en particular te referis a la id verdadera de la tabla o otro nombre de campo porque asi me da error
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

Restar el registro anterior del actual

Publicado por Rafael (5 intervenciones) el 21/05/2012 13:17:37
Muchas Gracias Jose, tu solución funciona perfectamente y me ha sido de mucha ayuda. Gracias de muevo.
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

Restar el registro anterior del actual

Publicado por Moises Olmo Cascos (1 intervención) el 28/05/2012 07:52:03
Hola Jose, te escribo para ver si me puedes ayudar con una resta de registro anterior, tengo una tabla con 6 campos de lectura de contadores de luz (p1-p2-p3-pr1-pr2-pr3) los cuales son de tipo texto y no le tengo puesta clave principal, esta lectura se realiza cada 15 dias y lo que me gustaria es saber la manera de que en un campo distinto se reste la ultima lectura realizada con respecto de la anterior para poner en un nuevo campo el consumo entre lecturas. Te paso mi correo para que, si eres tan amable, me mades la respuesta tambien a dicho correo. [email protected]
Un saludo y gracias de antemano
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

Restar el registro anterior del actual

Publicado por jose (830 intervenciones) el 28/05/2012 08:28:06
te digo lo mismo que a Rafa ;
para hacerse una idea de lo que quieres, hay que ver primero cual es la estructura de las tablas y que datos tienen.

si me envias un ejemplo de lo que estas haciendo y me explicas lo que quieres llegar a conseguir , te lo echaré un vistazo

por ejemplo que son los contadotes p1, p2.... y si tienes que restarlos todos o no

[email protected]
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

Restar el registro anterior del actual

Publicado por jose (830 intervenciones) el 28/05/2012 10:13:24
SALUDOS JUDIT

HE CAMBIADO LA TABLA LUZ
FECHA --- A FECHA CORTA
P1 --NUMERICO --- DOBLE
P2 ---- NUMERICO ---DOBLE
.....


HE CREACO CAMPOS NUEVOS PARA ALMACENAR LAS DIFERENCIAS DE LECTURA

CP1 --- NUMERICO DOBLE
CP2 ----NUMERICO DOBLE

.....


HE CREADO UN BOTON DE CALCULAR CONSUMOS LUZ , EN EL MENU PRINCIPAL

EN EL VENTO AL HACER CLIC

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
51
52
53
54
55
Private Sub Comando28_Click()
 
Set Rs = CreateObject("ADODB.RecordSet")
Set CON = Application.CurrentProject.Connection
Set Rs2 = CreateObject("ADODB.RecordSet")
Set CON2 = Application.CurrentProject.Connection
 
c10 = "": c20 = "": c30 = "": c40 = "": C50 = "": c60 = " ": c70 = "": c80 = ""
c10 = "SELECT * FROM [LUZ] ORDER BY [FECHA] "
 
consulta = c10
'Rs.Open consulta, CON, adOpenDynamic, adLockOptimistic
Rs.Open consulta, CON
Rs.MoveLast
Rs.MoveFirst
contador1 = Rs.Fields("P1").Value
contador2 = Rs.Fields("P2").Value
contador3 = Rs.Fields("P3").Value
contador4 = Rs.Fields("REACTIVA P1").Value
contador5 = Rs.Fields("REACTIVA P2").Value
contador6 = Rs.Fields("REACTIVA P3").Value
 
Rem condiciones
Rem bucle de recordset
Do While Rs.EOF = False
Rs.MoveNext
If Rs.EOF = True Then GoTo a
 
CONSULTA2 = "UPDATE LUZ SET  "
CONSULTA2 = CONSULTA2 & "  LUZ.CP1 = " & Str(Rs.Fields("P1").Value - contador1) & ","
CONSULTA2 = CONSULTA2 & "  LUZ.CP2 = " & Str(Rs.Fields("P2").Value - contador2) & ","
CONSULTA2 = CONSULTA2 & "  LUZ.CP3 = " & Str(Rs.Fields("P3").Value - contador3) & ","
CONSULTA2 = CONSULTA2 & "  LUZ.[CREACTIVA P1] = " & Str(Rs.Fields("REACTIVA P1").Value - contador4) & ","
CONSULTA2 = CONSULTA2 & "  LUZ.[CREACTIVA P2]= " & Str(Rs.Fields("REACTIVA P2").Value - contador5) & ","
CONSULTA2 = CONSULTA2 & "  LUZ.[CREACTIVA P3] = " & Str(Rs.Fields("REACTIVA P3").Value - contador6)
 
 
CONSULTA2 = CONSULTA2 & " WHERE ((LUZ.FECHA)= #" & Format(Rs.Fields("FECHA").Value, "mm/dd/yyyy") & "# ); "
 
 
 
Rs2.Open CONSULTA2, CON2
 
contador1 = Rs.Fields("P1").Value
contador2 = Rs.Fields("P2").Value
contador3 = Rs.Fields("P3").Value
contador4 = Rs.Fields("REACTIVA P1").Value
contador5 = Rs.Fields("REACTIVA P2").Value
contador6 = Rs.Fields("REACTIVA P3").Value
a:
 
 
Loop
Rs.Close
End Sub

------------------------------

CON ESTO TE CALCULA Y TE PONE LOS CONSUMOS DE LUZ


si lo quieres comprobar los borras y los vuelves a escribir y verás que los calcula correctamente.

JOSE MANUEL
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
Val: 6
Ha disminuido su posición en 146 puestos en Access (en relación al último mes)
Gráfica de Access

Restar el registro anterior del actual

Publicado por Matias (19 intervenciones) el 12/06/2014 00:00:58
Buenas noche Jose.
Tengo una base de datos con los alumnos de una escuela, y los pagos realizados por ellos. Lo que quiero, es saber los movimientos de los alumnos.
Ejemplo
FECHA ALUMNO CURSO VALOR PAGO ADEUDA
5-5-14 FULANITO TEATRO $200 $160 $40
7-5-14 FULANITO TEATRO $40 $40 $0

Espero puedas ayudarme!

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

Restar el registro anterior del actual

Publicado por felix.plasencia (1 intervención) el 02/04/2018 16:48:05
Hola:
Siguiendo tu ejemplo hago esto:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Private Sub cerrar_Click()
Set Rs = CreateObject("ADODB.RecordSet")
Set CON = Application.CurrentProject.Connection
Set Rs2 = CreateObject("ADODB.RecordSet")
Set CON2 = Application.CurrentProject.Connection
 
c10 = "": c20 = "": c30 = "": c40 = "": C50 = "": c60 = " ": c70 = "": c80 = "": c90 = ""
c10 = "SELECT * FROM [Lecturas] ORDER BY [FECHA] "
 
consulta = c10
'Rs.Open consulta, CON, adOpenDynamic, adLockOptimistic
Rs.Open consulta, CON
Rs.MoveLast
Rs.MoveFirst
contador1 = Rs.fields("P1").Value
contador2 = Rs.fields("P2").Value
contador3 = Rs.fields("P3").Value
contador4 = Rs.fields("P4").Value
contador5 = Rs.fields("P5").Value
contador6 = Rs.fields("P6").Value
contador7 = Rs.fields("P7").Value
contador8 = Rs.fields("P8").Value
contador9 = Rs.fields("P9").Value
contador10 = Rs.fields("P10").Value
contador11 = Rs.fields("P11").Value
contador12 = Rs.fields("P12").Value
contador13 = Rs.fields("P13").Value
 
 
Rem condiciones
Rem bucle de recordset
Do While Rs.EOF = False
Rs.MoveNext
If Rs.EOF = True Then GoTo a
 
CONSULTA2 = "UPDATE Lecturas SET "
CONSULTA2 = CONSULTA2 & " Lecturas.CP1 = " & Str(Rs.fields("P1").Value - contador1) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP2 = " & Str(Rs.fields("P2").Value - contador2) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP3 = " & Str(Rs.fields("P3").Value - contador3) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP4 = " & Str(Rs.fields("P4").Value - contador4) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP5 = " & Str(Rs.fields("P5").Value - contador1) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP6 = " & Str(Rs.fields("P6").Value - contador2) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP7 = " & Str(Rs.fields("P7").Value - contador3) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP8 = " & Str(Rs.fields("P8").Value - contador4) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP9 = " & Str(Rs.fields("P9").Value - contador1) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP10 = " & Str(Rs.fields("P10").Value - contador2) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP11= " & Str(Rs.fields("P11").Value - contador3) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP12 = " & Str(Rs.fields("P12").Value - contador4) & ","
CONSULTA2 = CONSULTA2 & " Lecturas.CP13= " & Str(Rs.fields("P13").Value - contador3) & ","
 
 
CONSULTA2 = CONSULTA2 & " WHERE ((Lecturas.FECHA)= #" & Format(Rs.fields("FECHA").Value, "mm/dd/yyyy") & "# ); "
 
 
 
Rs2.Open CONSULTA2, CON2
 
contador1 = Rs.fields("P1").Value
contador2 = Rs.fields("P2").Value
contador3 = Rs.fields("P3").Value
contador4 = Rs.fields("P4").Value
contador5 = Rs.fields("P5").Value
contador6 = Rs.fields("P6").Value
contador7 = Rs.fields("P7").Value
contador8 = Rs.fields("P8").Value
contador9 = Rs.fields("P9").Value
contador10 = Rs.fields("P10").Value
contador11 = Rs.fields("P11").Value
contador12 = Rs.fields("P12").Value
contador13 = Rs.fields("P13").Value
a:
 
 
Loop
Rs.Close
End Sub

y me da error en la sintaxis UPDATE de la linea Rs2.Open CONSULTA2, CON2
¿Me puede ayudar?
Gracias y saludos,
felix
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