Campo Calculado en tabla |
Responder |
Autor | |
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Tema: Campo Calculado en tabla Enviado: 13/Noviembre/2019 a las 14:23 |
Buenas tardes.
Tengo en una tabla un campo calculado que es una combinación de otros dos campos de esa misma tabla y con un formato predeterminado. Mi problema es que ese campo calculado deberá formar parte de una relación de "1a1" con otra tabla y por ser de tipo calculado no me deja hacer la relación. Supongo que la solución es crear otro campo de texto y que la información del calculado se copie en ese nuevo campo. También supongo que se debe hacer con un evento de después de actualizar el campo calculado en un formulario de esa tabla. No sé cómo se hace que el valor de un campo se grabe en otro. Por favor, me pueden ayudar. Gracias por adelantado.
|
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 13/Noviembre/2019 a las 18:34 |
Alguna sugerencia por favor??
Sólo sé hacerlo cuando el campo se copia en otra tabla, no la misma, con una sentencia así: DoCmd.RunSQL "INSERT into Tabla2(prueba) select '" & Me.Idregistro & "'" ..., además me sale un mensaje de que voy a agregar un registro que no sé cómo quitar. Pero copiar el valor de un campo (calculado) en otro campo de texto no sé hacerlo. |
|
pitxiku
Colaborador Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1510 |
Enviado: 14/Noviembre/2019 a las 00:33 |
Dependiendo de la necesidad y ámbito (en la ventana relaciones de la base de datos, o sólo para una o alguna consulta en particular), una opción puede ser el usar los 2 campos originales en la relación:
SELECT UnCampo, OtroCampo FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.CAMPO1 = (TABLA2.CAMPO2 + TABLA2.CAMPO3) Eso sí, este tipo de relaciones no pueden verse en la ventana relaciones o en la ventana diseño de las consultas. También puedes omitir la relación y usar los criterios para filtrar los resultados: SELECT UnCampo, OtroCampo FROM TABLA1, TABLA2 WHERE TABLA1.CAMPO1 = (TABLA2.CAMPO2 + TABLA2.CAMPO3) |
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 14/Noviembre/2019 a las 09:31 |
Porqué las columnas calculadas no pueden usarse en relaciones del sistema?
|
|
JuanW
Asiduo Unido: 12/Mayo/2005 Localización: España Estado: Sin conexión Puntos: 259 |
Enviado: 14/Noviembre/2019 a las 10:35 |
Puede haber otras explicaciones mejores y más técnicas, pero pienso en por ejemplo un calculo matemático ¿qué pasa si hay algun truncamiento o no en las cifras? Eso no seria exacto del todo como VALER para una relación 1a1.
|
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 14/Noviembre/2019 a las 13:31 |
Bueno, la combinación del campo calculado no responde a un cálculo matemático sino a una codificación alfanumérica, y esa codificación es la base de otra tabla, y, por ser campo calculado, no me deja relacionarla.
La solución no sé cómo hacerla. Por eso había pensado en que ese campo calculado se "copiara" en otro campo que a su vez sirviera de relación con la otra tabla. Gracias, de nuevo.
|
|
lalo1956
Colaborador Unido: 08/Marzo/2005 Localización: Mexico Estado: Sin conexión Puntos: 994 |
Enviado: 14/Noviembre/2019 a las 16:25 |
Buen día, entiendo que a través de una consulta de datos anexados puedes calcular el campo y anexarlo a la tabla que deseas, saludos!
|
|
Quien no vive para servir, no sirve para vivir!** AYUDA A MANTENER EL FORO **
|
|
pitxiku
Colaborador Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1510 |
Enviado: 14/Noviembre/2019 a las 19:05 |
Otra posibilidad, si usas formularios para crear los registros, es usar el evento Después de Actualizar de los controles donde están los datos que usas en el campo calculado, o el Antes de Actualizar del formulario, para hacer el cálculo y asignarlo al campo (no calculado), que luego usarás en la relación.
Editado por pitxiku - 14/Noviembre/2019 a las 19:06 |
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 14/Noviembre/2019 a las 23:04 |
Gracias pitxiku.
De eso se trata, pues uso formularios para los usuarios al ser un sistema pensado en tablas y aplicación (back/end). Lo que ocurre es que no me sale el código VBA a implementar. Una vez tengo el valor en el campo calculado, no se me copia en el campo que utilizaré como referencia en la relación. He probado con Recordset haciendo DoCmd.RunCommand acCmdSelectRecord y no me sale; también con DoCmd.RunSQL "INSERT into... y no me sale ... sé que cometo algún fallo o me estoy complicando en exceso... es por lo que pido que me iluminen. Gracias !!
|
|
pitxiku
Colaborador Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1510 |
Enviado: 15/Noviembre/2019 a las 00:00 |
Si usas formularios, no necesitas consultas SQL. O al menos, no de momento. Y menos una consulta INSERT INTO, que lo que hace es crear un registro nuevo.
Se trata de establecer el valor al campo. Por ejemplo, algo sencillo es una macro. En el evento Antes de Actualizar del formulario, podemos decir que se cree una macro, y que use la acción EstablecerValor: - https://support.office.com/es-es/article/acci%C3%B3n-de-macro-establecervalor-36dfca71-0d8c-40fc-8b9f-31cfe5f48aab Nota: Si no ves la acción, activa la opción del Ribbon "Mostrar todas las acciones". En la macro indica el control calculado, y en dónde hay que indicar el valor, coloca el cálculo que haces, haciendo referencia a los controles del formulario. |
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 15/Noviembre/2019 a las 23:30 |
Hola.
La verdad, lo enfocaba a una solución VBA, aunque me puede valer. Pero, dándole vueltas he pensado en sacar el campo calculado de las tablas y colocarlo como un campo de formulario sin que ese valor se guarde en las tablas y luego ese valor pasarlo a las tablas. ..., no sé si me explico, pero algo así: Tengo el valor1 y el valor2 (que formarán el valorResultado) con una máscara, además. "verifica" es un cuadro de texto que realiza la concatenación con la máscara. Cuando relleno en formulario el valor2 coloco el evento de después de actualizar: Private Sub valor2_AfterUpdate() On Error GoTo lbl_err Dim Rst As Recordset, _ Marcador As Variant Set Rst = Me.RecordsetClone Rst.FindFirst "valorResultado= '" & Me.valorResultado & "'" If Not Rst.NoMatch Then 'Me.Undo Me.Bookmark = Rst.Bookmark Else Me!valorResultado = Left(Me!verifica, 2) & "B/" & Mid(Me!verifica, 3, 2) & "." & Mid(Me!verifica, 5, 3) & "-" & Right(Me!verifica, 3) Me!verifica.Requery DoCmd.SetWarnings False DoCmd.SetWarnings True DoCmd.RunCommand acCmdSelectRecord End If Rst.Close lbl_exit: Exit Sub lbl_err: MsgBox Err.Description & "(" & Err.Number & ")" Resume lbl_exit End Sub Funcionar, funciona, aunque debe ser más simple y no sé cómo. El resultado es algo así, que es lo que busco: valor1: 2940056 valor2: 003 ValorResultado: 29B/40.056-003 Salu2
Editado por maserrano - 15/Noviembre/2019 a las 23:35 |
|
pitxiku
Colaborador Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1510 |
Enviado: 16/Noviembre/2019 a las 19:14 |
- Si verifica es el campo calculado, en un principio ya no lo necesitas. Puedes usar los otros campos directamente:
- Al igual que antes, tampoco es necesario el Requery del verifica. - Como no hay nada entre las 2 líneas SetWarnings, también las puedes omitir. Pero si el código te funciona bien y hacer lo que necesitas, tampoco es muy necesario el modificarlo. |
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 17/Noviembre/2019 a las 00:33 |
Sí, si me funciona. He usado tu ejemplo pitxiku mucho más reducido pero no graba nada... no sé...
Uppss. Perdón si que va. Fallo en una letra. Más elegante. Muchas Gracias. Editado por maserrano - 17/Noviembre/2019 a las 00:39 |
|
maserrano
Colaborador Unido: 02/Abril/2014 Localización: España Estado: Sin conexión Puntos: 683 |
Enviado: 18/Noviembre/2019 a las 21:03 |
Perdón. Supongo que el hilo se puede cerrar por lo menos por mi parte.
Gracias.
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |