** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Campo con dos o más cantidades
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Campo con dos o más cantidades

 Responder Responder
Autor
Mensaje
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Campo con dos o más cantidades
    Enviado: 25/Febrero/2021 a las 18:35
Buenas tardes, necesito configurar un campo de una tabla Access que me permita introducir más de una cantidad, mostrándome el resultado de su suma o resta, es decir, 100+120, y que ese mismo campo muestre 220.
Gracias de antemano
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 19:27
Hola amegias y bienvenido al foro,

Hasta dónde a mi me consta (o hasta que no venga pitxiku y me corrija) eso no es posible. Es algo que me habría gustado tener ya que lo he visto en otros sistemas como Navision pero que no consegui implementar.

Estuve jugando con el evento Antes de actualizar del control pero me salta antes la regla de validación del campo que ese evento.

A lo mejor alguien con más imaginación puede iluminarnos.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1512
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 20:27
Una posibilidad es guardar el cálculo (100+120) en un campo de texto de la tabla, y después usar Eval en una consulta, formulario o informe para resolver el cálculo:

- https://support.microsoft.com/es-es/office/funci%C3%B3n-eval-8c4a1b10-85ba-40db-b0c8-5290da4d4166

No sé si Eval se puede usar en los eventos de macro, donde tal vez se pueda hacer lo que quiere Xavi: ejecutar el cálculo y guardar el resultado:

- https://support.microsoft.com/es-es/office/agregar-macros-de-datos-a-un-evento-de-tabla-f77ef125-7786-4c86-8933-7f284873dd8f

Otra posibilidad a investigar son los campos calculados, aunque no sé qué podrán hacer:

- https://support.microsoft.com/es-es/office/v%C3%ADdeo-combinar-campos-utilizando-el-tipo-de-datos-calculados-2a290bbc-46f6-42ae-8590-6fbc497d1de9

Pero si van a ser cálculos simples, yo usaría una versión de Xavi: un cuadro de texto independiente en un formulario para escribir la expresión, y en su evento Después de Actualizar usar Eval y pasar el resultado a un cuadro de texto donde sí tengas origen de control en un campo de la tabla.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 20:28
Hola!
Mira a ver así

Dim VarEval As Variant
If Me.Texto15 = "" Or IsNull(Me.Texto15) Then Exit Sub
VarEval = Eval(Replace(Texto15, "=", ""))
Me.Texto15 = Me.Texto15 & " = " & VarEval & " "


Editado por mounir - 25/Febrero/2021 a las 20:37
Un Saludo.
Arriba
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 08:59
Gracias
Arriba
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 10:00
Sintaxis no válida.
Gracias por el intento.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 10:44
Hola!

Pues no sé como lo has hecho, porque funciona perfectamente.

- Un cuadro de texto >>> Texto15.
- Un comando en el evento al hacer click pones el código anterior.
Un Saludo.
Arriba
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 17:21
Perdona mi ignorancia, pero no te sigo.
Lo he intentado como campo calculado, introduciendo tu código como función.
Tan solo me muevo por las propiedad del campo número de la tabla que tengo. No tengo ni idea que es el comando o el evento.
Gracias.

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 17:33
Hola,

Por tu mensaje intuyo que estás manejando los datos directamente en la tabla. Si es así, varios comentarios:
- Por norma general JAMAS se gestionan los datos directamente sobre la tabla
- Se utilizan formularios para gestionar datos ya que estos permiten..
+ controlar que registros se pueden ver
+ controlar que campos se pueden editar
+ añadir controles (un botón de comando)
+ controlar eventos  (pulsar un botón, modificar un valor, etc)

En definitiva: en una tabla vete olvidando porque (al 99% seguro) no va a funcionar.
Y en un formulario requiere varios controles y algo de imaginación.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Febrero/2021 a las 18:06
Gracias, me pongo con el formulario.

Arriba
Juanmasp Ver desplegable
Habitual
Habitual


Unido: 21/Abril/2006
Estado: Sin conexión
Puntos: 118
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Juanmasp Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 01/Marzo/2021 a las 15:52
Hola, he conseguido hacer el cálculo a nivel de Tabla (Macro de Datos)...... con limitaciones

Creo que es mejor hacerlo a nivel de Formulario porque tenemos mas margen de maniobra, pero dejo esto por si a alguien le interesa, y para demostrar que se puede hacer.

Para conseguirlo, primero se debe almacenar la fórmula en la tabla (de lo contrario no se dispara la acción), por lo tanto el campo debe ser de texto y no numérico, esto se puede "solventar" poniendo dos campos, uno para la fórmula y otro para el resultado.

Como lo he hecho:

He utilizado -una tabla (tEval  para almacenar la fórmula temporalmente), -una Consulta (qEval  donde se recoge el resultado) y un Módulo con una function (fEval  donde se realiza el cálculo, la he creado por el control de errores)

Nota: realmente solo es imprescindible la Consulta, pero entonces, si se debieran hacer cálculos en varias tablas, se debería crear una consulta específica para cada una de ellas.

La tabla tEval solo tiene un campo que es sCalculo
La consulta qEval es:  SELECT fEval([sCalculo]) AS Resultado FROM tEval;

La Function es : 
Function fEval(strCalculo As String) As String

On Error GoTo EvalError
    fEval = Eval(strCalculo)
    
EvalSalir:
    Exit Function
EvalError:
    fEval = strCalculo
    Resume EvalSalir
End Function


Y para la macro de Datos he hecho dos versiones (en el evento Después de actualizar)
Nota: Lo he intentado en el evento "Antes del Cambio", pero es mucho mas limitado, y no ha resultado.

-Actualizar el mismo campo (debe ser de texto)

EstablecerVariableLocal (DatoCalculo;[CampoCalculado])
EstablecerVariableLocal (DatoId;[Id])
Si Nz([DatoCalculado;"")<>"" Entonces
Buscar un registro en tEval
Editar Registro
Establecer Campo ([sCalculo];[DatoCalculo])
Finalizar Editar Registro
Buscar un Registro en qEval
EstablecerVariableLocal (vResultado;[Resultado])
Si [DatoCalculo]<>[vResultado] 
Buscar un Registro en [Tabla que se está evaluando]
Condición WHERE [Id]=[DatoId]
EditarRegistro
EstablecerCampo ([CampoCalculado];[vResultado])
Finalizar Editar Registro
Finalizar Si
Finalizar Si



-Actualizar distinto campo (he usado un campo memo para almacenar la fórmula y  en el proceso la borro para no guardar datos de mas)

EstablecerVariableLocal (DatoCalculo;[CampoCalculado])
EstablecerVariableLocal (DatoId;[Id])
Si Nz([DatoCalculado;"")<>"" Entonces
Buscar un registro en tEval
Editar Registro
Establecer Campo ([sCalculo];[DatoCalculo])
Finalizar Editar Registro
Buscar un Registro en qEval
EstablecerVariableLocal (vResultado;[Resultado])
Si [DatoCalculo]<>[vResultado] 
Buscar un Registro en [Tabla que se está evaluando]
Condición WHERE [Id]=[DatoId]
EditarRegistro
EstablecerCampo ([ValorCalculado];[vResultado])
EstablecerCampo ([CampoCalculado];Nulo)
Finalizar Editar Registro
Finalizar Si
Finalizar Si


Creo que se entiende bastante bien, básicamente lo que hace es guardar la fórmula en la tabla intermedia, abrir la consulta con el resultado y modificar el valor original por el calculado (los If están para evitar un bucle de llamada al volver a modificar el registro en la tabla)

Disculpas por la parrafada

Saludos.


Editado por Juanmasp - 01/Marzo/2021 a las 15:58
Arriba
amegias Ver desplegable
Nuevo
Nuevo


Unido: 25/Febrero/2021
Localización: LEGANES
Estado: Sin conexión
Puntos: 11
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita amegias Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 01/Marzo/2021 a las 19:04
Gracias, lo intento.

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable