Coger el penúltimo registro y restarlo en otro campo

Tengo una consulta basada en una tabla en la que aparece el nombre de la máquina la fecha de contador, nº de contador actual, nº contador anterior y monedas, lo que quiero hacer es que la columna contador anterior recoja el registro anterior para así poder hacer una resta y controlar si los datos están correctos, me explico la resta del contador actual y el anterior debe dar el mismo dato que las monedas, y ya sería perfecto si mandara un mensaje de advertencia el programa comunicando que no está bien si los 2 valores no son iguales.

1 Respuesta

Respuesta
1
Lo que estás pidiendo es un proceso un tanto complicado. Para centrar mejor la explicación te agradecería que:
- Me pasaras la consulta en lenguaje SQL. Por si no sabes cómo se hace eso basta que abras la consulta en vista diseño y, en los tipos de vista, verás que hay una opción que es SQL. Copias el código que te salga y me lo pegas en el mensaje.
- Para acceder a la consulta, ¿utilizas algún botón en formulario? Porque para la solución que te dé, que será a través de código VBA, utilizaré el sistema de código en un botón.
Lamentablemente (o no... je, je...) lo que quieres hacer no se puede realizar directamente en la consulta, por lo que es necesario utilizar código. Por eso te comentaba lo del botón.
Bueno... Ya me dirás cosas.
Muchas gracias por tu respuesta tan rápida, te mando el código en sql:
SELECT collectionReports.Id, collectionReports.Machine, collectionReports.DateCollection, collectionReports.CounterInfo, collectionReports.[500Drans], collectionReports.[100Drans], collectionReports.[12Drans], ([500Drans]*500)+([100Drans]*100)+([12Drans]*12) AS TotalCurrency, machines.placeMachine, [CounterInfo]-([500Drans]+[100Drans]+[12Drans]) AS LastCollection
FROM machines INNER JOIN collectionReports ON machines.SerialNumb = collectionReports.Machine;
el valor que quiero recoger está alojado en CounterIrnfo ese debería alojarse en una celda o nueva (yo pensaba llamarla lastCounter) y lo que quiero que me de es querestarando el valor nuevo que ponga en CounterInfo - el lastCounter, se las monedas que deberían haber.
No me importa si se tiene que hacer desde una consulta o formulario, lo que importa es que funcione, muchas gracias.
Como ya te comentaba la cosa es un poco "compleja". He empezado a trabajar en tu consulta pero tengo una serie de dudas, sobretodo por nomenclatura de campos y tipología de campos.
Me sería de mucha utilidad si me pudieras poner un ejemplo con nombres de campos y valores de cómo serían dos registros consecutivos de tu consulta, más los campos y valores "nuevos" que te gustaría que aparecieran. Así yo podría afinar más en la respuesta para evitar futuros errores.
Ya me dirás cosas.
Ok, te pongo un ejemplo que he puesto.
En la consulta que tengo hecha (que se podría convertir en formulario) tengo las siguientes columnas:
machine (nº de identificación) - Modelo - Lugar - Responsable - fecha de chequeo - contador - ultimo contador (esta columna saca el último contador restando el contador con las monedas que hay)  - monedat1 - monedat2 - moneda t3- total monedas (suma las monedas) - recaudación
Por ejemplo:
registro 1: maquina 1 - modelo A - en c/ Laguna, 13 - Juan(resp) - 11/12/2011(f.chequeo) - 200 (contador) - 0(ultimo contador) - 50 (monedat1) - 50 (moneda t2) - 100 (moneda t3) - total monedas 200 - 120 euros(recaudación).
registro2: maquina 1 - modelo A - en c/ Laguna, 13 - Juan(resp) - 21/01/2012(f.chequeo) - 500 (contador) - 200(ultimo contador"resta el valor contador(400) - total de las monedas) - 100 (monedat1) - 100 (moneda t2) - 100 (moneda t3) - total monedas 300 - 220 euros(recaudación).
Lo que pretendo es que el campo último contador se chequee con el penúltimo valor para que la persona que introduzca los datos sepa que los está introduciendo correctamente. Igual es un poco lioso pero no se me ocurre otra forma.
Muchas gracias por tu tiempo.
Con lo que me acabas de decir me acabas de desmontar un poco, puesto que yo pensaba que querías esos datos a posteriori para realizar comprobaciones, y ahora me dices que va a haber usuarios metiendo datos.
Te explico una cosa:
- Para la introducción de nuevos datos debes atacar una tabla
- Para la consulta/modificación de datos debes atacar una consulta (o la misma tabla en ocasiones).
Si intentas introducir nuevos registros desde una consulta puede ser que te parezca que todo va bien, pero tarde o temprano te va a saltar algún error por una aplicación indebida de la sistemática de Access.
Por eso, si me dices que se van a añadir nuevos datos sobre una consulta yo te recomiendo que no utilices este sistema, pues tarde o temprano acaba dando fallos.
Además de esto, si el chequeo debe ser al ir metiendo registros, necesitarías un identificador de registro (un [Id]) de tipo autonumérico. Y eso te lo da el trabajo directo sobre tablas.
En definitiva, que necesitarías cambiar la sistemática de trabajo para poder operar directamente desde una tabla, y no desde una consulta.
Lamento comentarte lo anterior pero... así es Access.
Vaya vaya, pues si que me has desmontado bastante el tema, aunque mejor ahora que no cuando esté todo listo, entonces para arreglar el tema en una tabla ¿qué me sugieres que haga?.
Muchas gracias
Si quieres, para no dar palos de ciego, pásame tu BD a mi correo electrónico, que es neckkito(ARROBA)yahoo. Es. En el mail me pones todos los comentarios que quieras sobre la BD, en el sentido de la idea que tienes para ella y su funcionamiento.
Yo le echaré un vistazo y en vista de lo que vea y de tus comentarios podré darte una solución mejor (intentando aprovechar al máximo todo lo que tienes hecho).
De verdad que lamento haber sido "portador de malas noticias", pero, como bien comentas, mejor ahora que estando la BD en funcionamiento.
Si te sirve de consuelo te comentaré que he tenido que "arreglar" BD's estructuradas mal por el tema de querer utilizar consultas para dar de alta nuevos registros, y la verdad es que el "apaño" se acababa convirtiendo en un apaño de un apaño de un apaño..., lo que implica al final que la BD funciona "casi" bien... ya me entiendes.
Por eso creo que, en el fondo, ha sido bueno detectar esta "incidencia" antes de ponerse en marcha ;)
Perfecto, ya te he mandado por mail la base de datos. gracias
Te he contestado al mail. En cuanto lo tenga claro te digo cosas.
Recibido, muchísimas gracias
Te he remitido un mail. Ya me dirás cosas.
Neckkito
Gracias, gracias, gracias, no hay mejor palabra, muchísimas gracias, lo has clavado, si no te importa me guardo tu email por si vuelvo a necesitar tu ayuda, eso sí tendremos que mirar un precio porque un trabajo bien hecho hay que pagarlo.
Muchísimas gracias de verdad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas