Comparaciones

Discute sobre las herramientas de la base de datos
Responder
ohquenick
Mensajes: 48
Registrado: Vie Ene 11, 2019 1:35 am

Comparaciones

Mensaje por ohquenick »

Hola de nuevo.

Se trata de reservar un campo de la tabla que devuelva TRUE/FALSE como resultado de la comparación de dos campos del mismo registro. No sé como diseñar esta clase de campos.

Os agradecería cualquier comentario.
OpenOffice 4.1.5 Libreoffice 6.1 Windows 7
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Comparaciones

Mensaje por FJCC-ES »

Una table no debe incluir un campo cuyo valor depende de los valores de otros campos. Es mejor calcular tal campo en una consulta.

Código: Seleccionar todo

SELECT "Campo1", "Campo2" , CASE WHEN "Campo1" >= "Campo2" THEN TRUE ELSE FALSE END AS "Campo_Calculado" FROM "Tabla2"
Un alternativo es definir la tabla con el Campo_Calculado del tipo BOOLEAN y ejecutar estas dos consultas, usando el menú Herramientas -> SQL, cada vez que un valor se cambia en Campo1 o Campo2

Código: Seleccionar todo

UPDATE "Tabla3" SET "Campo_Calculado" = TRUE WHERE "Campo1" >= "Campo2"

Código: Seleccionar todo

UPDATE "Tabla3" SET "Campo_Calculado" = FALSE WHERE "Campo1" < "Campo2"
¡Los valores in Campo_Calculado no se cambian automáticamente cuando Campo1 o Campo2 se cambian!
ohquenick
Mensajes: 48
Registrado: Vie Ene 11, 2019 1:35 am

Re: Comparaciones

Mensaje por ohquenick »

Mucas gracias, he probado la consulta y se obtiene el resultado esperado.

En realidad lo que pretendo conseguir es un poco más complejo. Ya que en primer lugar habría que obtener una consulta que contuviera dos campos de una tabla más un campo en blanco creado en la consulta. Después de que el usuario escribiera en ese campo en blanco una respuesta se pondría en marcha la segunda consulta, es decir, la que tú has facilitado en este hilo.

Si tienes alguna idea que creas que me pueda ayudar te quedaría muy agradecido.

Perdonad si no me explico demasiado bien.

Muchas gracias por vuestra colaboración.
OpenOffice 4.1.5 Libreoffice 6.1 Windows 7
ohquenick
Mensajes: 48
Registrado: Vie Ene 11, 2019 1:35 am

Re: Comparaciones

Mensaje por ohquenick »

Hola de nuevo. Estoy considerando que a lo mejor lo que necesito es hacer una vista.
OpenOffice 4.1.5 Libreoffice 6.1 Windows 7
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Comparaciones

Mensaje por FJCC-ES »

De verdad, no entiendo que quiere hacer. ¿Puede dar un ejemplo de los datos en la tabla, la información en la repuesta del usuario y la comparación?
ohquenick
Mensajes: 48
Registrado: Vie Ene 11, 2019 1:35 am

Re: Comparaciones

Mensaje por ohquenick »

Gracias por su interés y su paciencia.

Se trata de una base de datos para ayudar a aprender idiomas.

Supongamos que tenemos una "TABLA" con dos campos "CAMPA_EN_CASTELLANO" y "CAMPO_EN_INGLES" en los que se muestra respectivamente una palabra en castellano y su correspondiente traducción en inglés. Ahora queremos dar la oportunidad de que se pueda poner a prueba la memoria. Entonces añadimos un nuevo campo, una nueva columna completamente vacía de datos en la que se pueda teclear.

Como las tablas no deben de contener campos calculados, se podría recurrir a una vista en la que se añadiera el campo en el que se puede teclear. Es decir, una vista basada en "TABLA" que contuviera los campos "CAMPO_EN_CASTELLANO", "CAMPO_EN_INGLES" y un "CAMPO_PARA_RESPONDER". Éste es un campo vacío y se usa para teclear en él y poner a prueba la memoria. Este campo vacío sería el campo para la respuesta.

Ahora viene el paso de la comparación. Cuando se comprueba si lo que se ha tecleado en "CAMPO_PARA_RESPONDER" concuerda o no con el contenido de "CAMPO_EN_INGLES".

Para ello utilizamos una consulta que contenga más o menos este código

SELECT "CAMPO_EN_INGLES", "CAMPO_PARA_RESPONDER", CASE WHEN "CAMPO_EN_INGLES" = "CAMPO_PARA_RESPONDER" THEN TRUE ELSE FALSE END AS "COMPROBACION" FROM "VISTA_BASADA_EN_TABLA"

Cada vez que se cargue "VISTA_BASADA_EN_TABLA" se borrarían todos los datos introducidos en la columna "CAMPO_PARA_RESPONDER"

Ésta es de forma muy simplificada la idea.

Muchas gracias.
OpenOffice 4.1.5 Libreoffice 6.1 Windows 7
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Comparaciones

Mensaje por FJCC-ES »

En vez de usar consultas o vistas, sugiero que usa un formulario. El archivo adjunto de Base contiene una tabla con tres columnas: id, castellano u ingles. También contiene un formulario que contiene tres casillas (Castellano, Inglés y Respuesta) y tres botones (Siguiente, Anterior y Mostrar Inglés). Cuando se abre el formulario, la casilla Castellano contiene la palabra "joven", la casilla Inglés tiene el fondo negro y la casilla Respuesta está en blanco. Si escribe "youth" en la casilla Respuesta y pulsa el botón Mostrar Inglés, la casilla Inglés mostrará la palabra "youth" y el borde de Respuesta se cambiará a un color verde. Si escribe cualquier otra palabra en la casilla Respuesta y pulsa el botón Mostrar Inglés, la casilla Inglés mostrará la palabra "youth" y el borde de Respuesta se cambiará a un color rojo. Los botones Siguiente y Anterior cambian las palabras en las casillas Castellano y Inglés y ponen un fondo negro en Inglés.

Las palabras en la tabla son
joven | youth
arbol | tree
calle | street
manzana | apple
zapato | shoe

El archivo contiene dos macros sencillas: Mostrar y Ocultar. Los botones Siguiente y Anterior llaman Ocultar y el botón Mostrar Inglés llama Mostrar.

Código: Seleccionar todo

Sub Mostrar
  oDrawPage = ThisComponent.getDrawPage()
  oForms = oDrawPage.getForms()
  oForm = oForms.getByIndex(0)
  
  oIngles = oForm.getByName("ingles")
  oRespuesta = oForm.getByName("respuesta")
  oIngles.BackgroundColor = -1 'ningun fondo
  If oRespuesta.CurrentValue = oIngles.CurrentValue Then
  	oRespuesta.BorderColor = RGB(0, 255, 0) 'verde
  Else
  	oRespuesta.BorderColor = RGB(255, 0, 0)  	'rojo
  End If
End Sub

Sub Ocultar
  oDrawPage = ThisComponent.getDrawPage()
  oForms = oDrawPage.getForms()
  oForm = oForms.getByIndex(0)
  
  oIngles = oForm.getByName("ingles")
  oIngles.BackgroundColor = RGB(0,0,0) 'negro
End Sub
Adjuntos
Traducir.tar.gz
(10.38 KiB) Descargado 241 veces
ohquenick
Mensajes: 48
Registrado: Vie Ene 11, 2019 1:35 am

Re: Comparaciones

Mensaje por ohquenick »

Hola FJCC-ES. Está muy bien tu idea y muy completa. Te agradezco mucho. No descarto que más adelante la tome como base, pero de momento voy a investigar un poco más en la idea de las vistas y las consultas.

Muchas gracias.
OpenOffice 4.1.5 Libreoffice 6.1 Windows 7
Responder