Cálculos en consultas

Hola de nuevo sou el pesado del incremento de fecha que ya esta solucionado ahora me encuentro con un problema para realizar un calculo en una consulta son los numeradores de una maquina que se van metiendo en una tabla por día y el calculo que tengo que hacer es un campo que me calcule la diferencia entre el ultino registro y el anterior.
ejemplo: nºdia1: 125 nºdia2: 235 campocalculado:110.
He probado de varias maneras pero solo puedo hacer cálculos en la misma fila.
Espero que se pueda hacer.
Gracias otra vez.

1 Respuesta

Respuesta
1
Me imagino que lo haces en un formulario, entonces haz esto:
Supongamos que el formulario se basa en una tabla llamada "nummaquina" y el campo que desea sumar lo llamaremos "ndias"... entonces: primero cuando debe hacerse el calculo, ¿es decir al crear el nuevo registro?, ¿O qué te salga siempre en todos los registros?... escojamos el ultimo... vamos al procedimiento current (al activar registro) del formulario, y colocamos este código: El resultado lo visualizaremos en una caja de texto llamada "TxtDifDias"
***********************
Private sub Form_Current()
dim RegValDias as dao.Recordset
dim difDias as Long
sql = "SELECT ndias from nummaquina;"
Set RegValDias = Currentdb.OpenRecordset(sql)
If RegValDias.RecordCount > 0 then
RegValDias.MoveLast
For i= RegValDias.RecordCount to RegValDias.RecordCount -1 Step -1
difDias = RegValDias(0) - difDias
RegValDias.MovePrevius
Next i
End If
TxtDifDias = difDias
End sub
**********************
La Variable RegValDias, es una variable recordset, para manejar los registros...
La variable difDias, es la que llevara la diferencia del campos...
La variable sql, guardare la consulta, ¿en este caso me traigo todos los registros... porque todos?, hay una consulta que devuelve por ejemplo los dos registros del ultimo al primero PERO SI HAY DATOS REPETIDO LOS DEVOLVERÁ TAMBIÉN es decir si el penúltimo tienes el valor 200 y el anterior 200 y el anterior 200, en realidad devolverá 5...
En esta parte:
If RegValDias.RecordCount > 0 then
RegValDias.MoveLast
For i= RegValDias.RecordCount to RegValDias.RecordCount -1 Step -1
difDias = RegValDias(0) - difDias
RegValDias.MovePrevius
Next i
End If
Verifico que tenga registros... y empiezo a recorrer del ultimo y luego al anterior...
Y luego LO MANDO AL CAJA DE TEXTO...
TxtDifDias = difDias
Att:telemaco
Huy esto es demasiado pa mi yo de programación muy poco.
Yo ntengo en access una tabla llamada box con los campos num1 num2 num3 que son los contadores de las maquinas he probado a copiar y cambior los nombres de los campos pero me sale error de compilación no se ha definido el tipo definido por el usuario y me aparece en Private Sub Form_Current()
Dim RegValDias As dao.Recordset
La primera linea en amarillo y la segunda en azul.
Gracias por tu paciencia
No se preucupe, es que toca refenciar la vartiable recordset... para eso ve al código... puedes entrar haciendo click en el Botón Código de la barra de herramientas, cuando esta en diseño el formulario... esta al pie del botón autoformato y cuadro de herramientas, o entra a las propiedades del formulario, ve a la ficha eventos, selecciona cualquier evento, haz click en el botón conm los puntos suspensivos, y selecciona generador de código...
Luego ve al menu, herramientas, selecciona referencias... Busca la referencia que dice...
Microsoft Dao 3.6 Object Library
La 3.6 es para office 2003, sino busca la 3.51...
Chequéala, y haz click en aceptar... Y LISTO...
Lo que hacías de cambiar los nombres hazlo como deben ser... donde dice nummaquina... iría el nombre de la tabla "box".. ¿ahora CUÁL ES EL CAMPO QUE DEBE RESTAR?... todos o como seria... si el campo en num1... donde dice "ndias" lo reemplazas...
Me avisas.
Att:telemaco
Hola de nuevo hice eso y ahora me sale otro error no se encontró el método dato o dato miembro y sale marcado en azul MovePrevius.
Lo de restar es que me reste al ultimo registro de cada maquina el registro anterior .
De nuevo gracias aver si ala 3 va la vencida:)
Si tines razón esta mal escrita disculpa:
Es:
RegValDias. MovePrevious
Att:telemaco
Pues lo siento me sale otro error el objeto no admite esta propiedad o método y sale en amarillo TxtDifDias = difDias
¿Yo cree un campo en la tabla y otro en el formulario pa que me salga el resultado y lo llamo difdias por eso no sera?
Pues funciono al final pensé no lo consegueria
De nuevo muchas gracias me serviste de muchísima ayuda.
Lo que pasa es que para el ejemplo... TxtDifDias... es la CAJA DE TEXTO... donde se enviara la diferencia... coloca el nombre de la caja de texto tuya donde quiere visualizar este dato...
Att:telemaco

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas