Ver más

Campo

Un campo es un subobjeto del objeto Tabla que define la mínima unidad de información dentro de un registro a la que podemos acceder.
Un campo se crea pulsando la opción .

Para crear un campo enlazado a maestro pulsaremos la opción . Para crear un campo enlazado a tabla estática pulsaremos la opción .

Las propiedades de un campo son:

  • Identificador: Etiqueta alfanumérica que identifica de forma unívoca un campo dentro de una tabla. Este identificador será el que usemos en fórmulas y para referenciarlo en otras propiedades.

    El identificador constará de mayúsculas y números exclusivamente. Al identificar de forma unívoca un campo de una tabla no puede haber duplicidad.

    No debemos modificar el identificador de un campo de una tabla que ya contenga datos ya que, si lo hacemos, se perderá el contenido del mismo al realizarse la regeneración de la tabla. En el caso de que queramos hacerlo, debemos hacer uso de un sub-objeto de tabla traspaso de campo.

    Los identificadores ID y NAME son palabras reservadas. El identificador ID referencia el campo que es clave primaria de la tabla e identifica unívocamente cada registro. El identificador NAME referencia el campo principal de una tabla y que es usado por el sistema para presentar información de un registro. No debemos alterar ninguno de los dos identificadores si no queremos perder la funcionalidad implícita, aunque si podemos modificar sus descriptores, la propiedad Nombre.

    Sobre el campo ID es muy importante tener en cuenta que si en ejecución modificamos el ID de un registro que tiene registros en tablas plurales, se cambiará dicho ID en los mismos, pero no dispara ni triggers, ni actualizaciones ni contenidos iniciales en los plurales, ya que simplemente lo que debe hacer es asignar el nuevo ID a los mismos. En este caso si deseamos forzar cambios de datos en los plurales, tendremos que programarlo en el trigger posterior a la modificación del maestro, recorriendo los plurales y realizando las modificaciones correspondientes.

  • Nombre: Etiqueta alfanumérica que servirá como descriptor del campo. Se usará para presentar información del campo en objetos e inspectores.

    Podemos definir una etiqueta por cada idioma presente en el proyecto.

  • Estilos: Privado que limita el acceso del usuario final al objeto desde puntos donde no se haya programado el acceso al mismo; si un campo tiene este estilo activado, no estará disponible al usuario final en las fórmulas para establecer filtrados, etc..
  • Comentarios: Esta propiedad nos permite documentar el uso del campo.
  • Tipo de enlace: Los campos pueden estar enlazados o no a otra tabla. En el caso de que no se encuentren enlazados hemos de definir las propiedades según el tipo de campo. Si está enlazado, asumirá las propiedades del campo ID de la tabla enlazada.

    Los tipos de enlace disponibles son:

  • Tabla enlazada: Si hemos definido que el campo es enlazado debemos definir cuál es la tabla enlazada por el campo. Nos mostrará todas las tablas disponibles del proyecto y de los proyecto heredados.
  • Campo padre: Si hemos definido que el campo es enlazado y la tabla enlazada es de tipo submaestro, mostrará el campo padre de la tabla.
  • Tabla estática: Si hemos definido que el campo es enlazado y la tabla enlazada es de tipo tabla estática, seleccionaremos la tabla estática enlazada.
  • Índice: Si hemos definido que el campo es enlazado y el tipo de enlace es Puntero indirecto real o Puntero indirecto virtual se seleccionará un índice de clave única por el que se buscará en la tabla enlazada.
  • Resolución: Si hemos definido que el campo es enlazado y el tipo de enlace es Puntero indirecto real, Puntero indirecto virtual o Puntero singular de plural por índice debemos resolver los valores para cada uno de los campos que componen el índice de clave única por el que buscamos en la tabla enlazada usando los datos del registro en curso usando fórmulas para ello.
  • Enlace plural: Si hemos definido que el campo es enlazado y el tipo de enlace es Singular de plural por posición o Singular de plural por índice debemos seleccionar el enlace plural por el que se buscará.
  • Fórmula: Si hemos definido que el campo es enlazado y el tipo de enlace es Singular de plural por posición o Singular de plural por índice debemos definir la expresión fórmula que permite calcular la posición del registro que queremos apuntar.
  • Modo de buscar: Si hemos definido que el campo es enlazado y el tipo de enlace es Singular de plural por índice debemos definir el modo de búsqueda del registro plural, que podrá ser: Igual, es decir, con el mismo valor que el definido en la resolución para ese componente, Igual o mayor con un valor mayor o igual que el definido en la resolución, Igual o menor con un valor igual o menor que el definido en la resolución, Mayor con un valor mayor que el definido, Menor con un valor menor que el definido, Primero con el valor que se encuentre en la primera posición del índice y Último con un valor que se encuentre en la última posición del índice.
  • Partes comunes: Si hemos definido que el campo es enlazado y el tipo de enlace es Hermano contiguo debemos definir las partes comunes que componen el índice por el que nos movemos al hermano contiguo.
  • Dirección: Si hemos definido que el campo es enlazado y el tipo de enlace es Hermano contiguo debemos definir la dirección por la que nos movemos al hermano contiguo, bien al registro Anterior, bien al Siguiente.
  • Tipo de campo: En el caso de que no hayamos definido el campo como enlazado, debemos definir el tipo de campo y sus propiedades.

    Los tipos de campo disponibles son:

    • Alfabéticos: Hay varios tipos de campos de campos alfabéticos. Los tipos Alfa 128, Alfa 64 y Alfa 40 están optimizados en su uso del espacio en disco. Los tipos Alfa 256, Alfa Latin1 tienen tablas de 256 caracteres estándar y Alfa UTF-16 se corresponde con el estándar Unicode. Para campos que vayan a contener una dirección de correo electrónico o una senda Windows, deberá utilizar un campo Alfa 256, Alfa Latin1 o Alfa UTF-16, pues los Alfa 128, Alfa 64 y Alfa40 no soportan en su tabla de caracteres ni la arroba (@) ni la barra de directorios (\).
      • Alfa 256: Tipo alfabético estándar que incluye todos los caracteres de la tabla ANSI. Se recomienda usar los tipos Alfa indicados más adelante para optimizar el uso del espacio en disco. El rango máximo del campo es 65535 bytes (65535 caracteres).
      • Alfa 128: Es un tipo alfanumérico que incluye letras mayúsculas, minúsculas, acentos, signos de puntuación y números. Este tipo de campo es empaquetado y cada 8 caracteres que el usuario introduzca se comprimen en 7 para grabarlos al disco. El rango máximo del campo es 65534 bytes (74896 caracteres).
      • Alfa 64: Es un tipo alfanumérico que incluye letras mayúsculas, signos de puntuación y números. Este tipo de campo es empaquetado y cada 4 caracteres que el usuario introduzca se comprimen en 3 que serán grabados al disco. El rango máximo del campo es 65532 bytes (87376 caracteres).
      • Alfa 40: Es un tipo alfanumérico que incluye letras mayúsculas, números, guión y espacio. Este tipo de campo es empaquetado y cada 3 caracteres que el usuario introduzca se comprimen en 2 que serán grabados al disco. El rango máximo del campo es 65534 bytes (98301 caracteres).
      • Alfa Latin1: Es un tipo alfanumérico que incluye los 256 caracteres correspondientes a Unicode Latin 1 (ISO 8859-1). Se recomienda usar los tipos Alfa indicados anteriormente para optimizar el uso del espacio en disco. El rango máximo del campo es 65535 bytes (65535 caracteres).
      • Alfa UTF-16: Es un tipo alfanumérico que incluye todos los caracteres correspondientes a la tabla de caracteres Unicode (ISO 10646). Este tipo de campo al comprender toda la tabla Unicode requiere de dos bytes para representar cada carácter. Se recomienda usar los tipos Alfa indicados anteriormente para optimizar el uso del espacio en disco. El rango máximo del campo es 65534 bytes (32767 caracteres)
  • Numérico: Usado para datos numéricos. El rango máximo del campo es 10 bytes (Del 0 al 0 al 1.208.925.819.614.629.174.706.176, o con signo del -604.462.909.807.314.587.353.088 al 604.462.909.807.314.587.353.088, con 10 decimales del 0,0000000000 al 120.892.581.961.462,9531250000). De esta configuración se ha de excluir el campo ID que tiene como rango máximo 4 bytes (Del 0 al 4294967295).
    Añadir que a nivel interno en los cálculos numéricos se opera con 34 dígitos significativos, sumando enteros y decimales e incluyendo el 0 y el punto en un número decimal.
    Si en un campo numérico realizamos una operación matemática de división en la que el divisor es 0, obtendremos Infinity (infinito) como resultado. En el caso de que tanto el dividendo como el divisor sean 0, obtendremos NaN (Not a number) como resultado.
  • Fecha: Permite introducir fechas con diversos formatos. Por defecto admite el formato de fecha ISO 8601 (yyyy-mm-dd). Este es el formato por tanto que se deberá usar para introducir las fechas en las fórmulas.
  • Hora: Permite introducir horas en formato HH:MM:SS. No almacena milisegundos.
  • Tiempo: Permite introducir tiempos que son la unión de una fecha y una hora con el formato DD:MM:AA HH:MM:SS. Los rangos mínimo y máximo que soporta este tipo de campo son 01-01-1970 01:00:00 y 07-02-2106 06:28:14.

    En los campos tipo Tiempo no se guardan milisegundos. Si queremos guardar esa información debemos hacerlo en un campo aparte.

    Estos campos, además de guardar la fecha y hora, también guardan la zona horaria. Por lo tanto, cuando se modifica un campo tiempo, sea en primer plano o en el servidor, en el mismo se guardará la fecha, la hora y la zona horaria, esto hace que, cuando leamos esa información, Velneo la presenta en formato local de la máquina donde la estemos leyendo, teniendo en cuenta esa diferencia horaria.

    Esta funcionalidad debemos tenerla en cuenta cuando queramos obtener la fecha y hora de forma independiente: que el campo tiempo guarda también la zona horaria, por lo que, si queremos extraer del dicho campo la fecha y/o la hora, debemos aplicar también la zona horaria que corresponda.

  • Booleano: Es un campo lógico que permite definir el contenido como 1 ó 0 (Sí o No).
  • Objeto: Campo con contenido variable que se almacena en un contenedor aparte de los datos, por lo que el tamaño del registro no aumenta con su uso, si no que este se contabiliza en su contenedor. El nombre de este fichero será el mismo de la tabla y con la extensión CND. El fichero de índices del contenedor tiene la extensión CNI. En el fichero de datos lo que se guarda es la dirección donde está el objeto en el contenedor.

    Es muy importante tener en cuenta que no se deben incluir en el contenedor objetos de más de 512 Mb. Por lo tanto, es preferible que por programación comprobemos su tamaño antes de almacenarlos, ya que el sistema permitirá meterlos hasta que llegue al límite de memoria ram, pero no podrán ser recuperados.

    Los tipos de campos objeto existentes son:

    • Dibujo: Su contenido es un gráfico con cualquier resolución y número de colores. Se admite cualquier formato en la importación pero se almacena con compresión JPG al 100% de calidad. Este tipo de campo no puede ser indexado.
    • Texto: Su contenido es un texto de longitud variable. Se almacena en bloques de 512 bytes por lo que la unidad mínima de contenido es de ese tamaño.
    • Texto enriquecido: Su contenido es un documento con formato que permite seleccionar fuentes, estilos, alineación, etc. El formato se define mediante tags. Estos tags son análogos a los usados en html pero debemos tener en cuenta que no se trata de un soporte real y menos aún completo de html, por lo que no se recomienda incluir contenido externo, si no el generado por medio por el usuario escribiendo su contenido en el control correspondiente.
    • Binario: Su contenido será cualquier tipo de archivo que será almacenado en el contenedor en formato binario. La única forma de trabajar con este tipo de campo es vía proceso, con los comandos de instrucción Importar binario y Exportar binario, pues no existe un control específico para su edición. Este tipo de campo no puede ser indexado.
    • Fórmula: Su contenido será una fórmula dinámica. Su contenido es una fórmula que se define en tiempo de ejecución, y por tanto puede ser definida por el usuario final. Se trata de la definición de la fórmula y no del cálculo de su valor efectivo. Hemos de definir la tabla enlazada de la que se alimentará la fórmula. Puede ser la tabla en curso u otra tabla. En tiempo de ejecución dispondremos del Asistente de fórmulas para su definición, teniendo acceso a través del mismo a los campos de la tabla enlazada, variables, constantes, etc. El rango máximo del campo es 65535 bytes (65535 caracteres).

      El cálculo de la fórmula establecida podremos obtenerlo a través de otra fórmula o contenido inicial mediante el uso de la función de campo calcDynamicFormula().

    El límite máximo de un contenedor es:

    36^5 = 60.466.176 de objetos de cada tipo de objeto:
    Binarios
    Dibujos
    Objetos texto
    Objeto texto enriquecido
    Fórmula

  • Fórmula: Campos virtuales que no ocupan espacio en disco ni modifican la estructura de la base de datos. Se calculan con la expresión de tipo fórmula que define el campo en tiempo real, en cada instante que se hace uso del valor del campo. Al ser un cálculo en memoria y no guardarse en disco, no tiene las limitaciones de los tipos de campo correspondientes. No es posible su uso como componente de índices. El tipo de campo fórmula a utilizar depende del resultado buscado, no de los tipos de parámetros utilizados en el cálculo.
  • Fórmula Numérica: Fórmula cuyo resultado será un dato numérico. Si en un campo de tipo fórmula numérica realizamos una operación matemática de división en la que el divisor es 0, obtendremos Infinity (infinito) como resultado. En el caso de que tanto el dividendo como el divisor sean 0, obtendremos NaN (Not a number) como resultado.
  • Fórmula Alfabética: Fórmula cuyo resultado será una cadena alfabética Unicode
  • Fórmula Fecha: Fórmula cuyo resultado será un dato tipo fecha
  • Fórmula Tiempo: Fórmula cuyo resultado será un dato tipo tiempo (fecha y hora con milisegundos).
  • Debemos tener en cuenta que los campos fórmula no disparan el recálculo de los contenidos iniciales. Es decir, si un campo incluye en su contenido inicial un campo fórmula, si el campo ya tiene un valor y cambia el contenido de la fórmula, el contenido inicial del campo no es disparado. Por lo tanto, en esos casos, en los contenidos iniciales, usaremos campos con persistencia en disco en lugar de fórmula.

  • Puntero Virtual: Su contenido es virtual ya que se trata de punteros de carácter virtual que no guardan información en disco. Se asigna de forma automática cuando se selecciona un enlace virtual. Los punteros virtuales necesitan ser calculados y solicitados al servidor en cada ocasión que se muestren o se usen. Esto en ciertos casos como puede ser al mostrarlos en rejillas o al usarlos en condiciones de activo o visible de objetos o controles (que fuerza el refresco y la solicitud de datos al servidor), el rendimiento puede verse afectado.
  • El cómo se muestran por defecto los campos de tipo fecha, hora, tiempo y numéricos (carácter separador de miles y decimal) dependerá del idioma seleccionado en Velneo vClient. Si como idioma de vClient usamos sistema tomará la configuración establecida en el sistema operativo, si configuramos otro idioma de los que trae la plataforma por defecto (Español o Inglés) tomará la configuración que QT tenga establecida por defecto para ese idioma (no es posible modificarla), que sigue el estándar Unicode Common Locale Data Repository (http://cldr.unicode.org/).

    Las propiedades comunes de los campos son las siguientes:

  • Longitud: Número de bytes que define el rango del campo.
  • Decimales: Número de decimales para el campo de tipo numérico. Podrá especificar hasta 6 decimales que son los que se garantiza su precisión.
  • Signo: Define si el campo de tipo numérico tiene signo.
  • Mínimo: Rango límite mínimo válido para la entrada de valores.
  • Máximo: Rango límite máximo válido para la entrada de valores.

    El sistema comprueba que el máximo sea mayor que el mínimo. Esto quiere decir que el sistema no permitirá establecer como valor mínimo uno mayor al establecido en el máximo.

  • Contenido inicial: Expresión fórmula que será el contenido inicial del campo. La fórmula puede contener cualquier elemento que podamos incluir a través del Asistente de fórmulas. Puede ser una constante, el identificador de un campo, una variable global o una variable del sistema. El contenido inicial es la fórmula y no el valor obtenido de su cálculo, por lo que si modificamos la ficha y alguno de los campos que intervienen en la fórmula es modificado, se actualizará el contenido inicial del campo.

    En el campo que es clave primaria denotado con el identificador ID sólo se permiten tres opciones:

    • Ninguno: El valor ha de introducirse en tiempo de ejecución.
    • Siguiente al último: El valor es autonumérico y se genera de forma automática en ejecución.
    • Contador en variable: El valor lo controlamos en edición por medio de una variable global que debemos procesar.

    En los campos alfabéticos también debe introducirse el contenido inicial de los mismos como fórmula.

    El orden del cálculo de los contenidos iniciales de los campos viene determinado por su uso y no por el orden definido en la estructura de la tabla.

    Cuando se inicia un contenido inicial y se modifica su valor esto implica verificar en qué otros contenidos iniciales de otros campos se usa este campo y lanza su cálculo. Por ejemplo:

    CAMPO1 Contenido inicial = 1
    CAMPO2 Contenido inicial = CAMPO1
    CAMPO3 Contenido inicial = CAMPO1 + CAMPO2

    La secuencia que se desencadena es la siguiente:

    Se calcula el CAMPO1 y manda calcular el CAMPO2 (=1) y calcular el CAMPO3 (=1 + 0) ya que sus resultados dependen de CAMPO1.

    Se calcula el CAMPO2 y se manda calcular nuevamente el CAMPO3 (=1 + 1), porque su resultado depende de CAMPO2.

    Se calcula el CAMPO3 pero nadie depende de este campo.

    Este modo de evaluar los contenidos iniciales permite que éstos no dependan del orden de los campos.

    Añadir que modificado un campo se calcularán solamente los campos que usen dicho campo.

    Esta forma de evaluar los contenidos iniciales, por tanto, garantizará el resultado correcto de los campos independientemente del orden en el que éstos sean modificados.

    Esto, no obstante, es conveniente tenerlo en cuenta a la hora de diseñar nuestras estructuras de datos, sobre todo en tablas en las que exista un número elevado de campos, y para evitar generar la recursividad en el cálculo de contenidos iniciales.

  • Fórmula: Expresión fórmula usada para calcular los campos de tipo fórmula.
  • No podemos usar funciones en contenidos iniciales de campos ni en fórmulas de campos de tipo fórmula.

    Ver más:

    Tablas de caracteres