4D v16.3

Tipos de campos 4D

Inicio

 
4D v16.3
Tipos de campos 4D

Tipos de campos 4D  


 

 

Es necesario especificar un tipo de campo para cada campo de una tabla. Los tipos de campos afectan la manera como 4D manipula y almacena los datos en los campos y cómo los introduce y muestra en los formularios. Por defecto, 4D aplica el tipo Alfa a los campos que cree. En el momento de la creación del campo, debe modificar este tipo si es necesario.

Para modificar el tipo de un campo:

  1. Haga clic en el icono del tipo de campo en la imagen de la tabla y elija el tipo que quiere en el menú asociado.

    O
    Haga clic derecho en el campo cuyo tipo quiere cambiar y elija el nuevo tipo en el submenú Tipo del menú contextual.
    O
    Seleccione el campo cuyo tipo quiere cambiar y haga clic en el área Tipo del Inspector para mostrar el menú de tipos.

Puede cambiar de tipo de campo en cualquier momento, a menos que el campo tenga una relación o pertenezca a una llave primaria. En este caso, el menú para elegir un tipo de campo queda deshabilitado. Debe eliminar la relación o la llave primaria explícitamente antes de cambiar el tipo de campo.
Si cambia de tipo de campo antes de introducir datos en el campo, 4D cambia simplemente el tipo de campo. Si cambia el tipo de campo, después de introducir datos en el campo, 4D convierte los datos al nuevo tipo si es posible, cuando los datos se cargan por primera vez después del cambio. Los datos de un campo Imagen convertido en otro tipo no se muestran. Los datos de un campo convertido en campo de tipo Imagen no se muestran.
Cuando convierte un tipo de campo, 4D conserva el valor original del campo hasta que modifique el registro. Por ejemplo, si un campo de tipo texto contiene el valor “mayor a 10” y usted cambia el tipo del campo a Entero, el campo modificado muestra “10”. Si cambia el campo nuevamente a Texto, 4D muestra nuevamente “mayor a 10”.

Por defecto, 4D ofrece los siguientes tipos de campos:

  • Alfa: cadenas de caracteres alfanuméricos de 1 hasta 255 caracteres.
  • Texto: texto hasta de 2 GB.
  • Fecha: fechas entre el año 100 y el año 32 767.
  • Hora: hora expresada en horas:minutos:segundos.
  • Booleano: campo binario TRUE (verdadero) o FALSE(falso).
  • Entero: número entero entre -32 768 y 32 767.
  • Entero largo: número entre -2 147 483 647 y 2 147 483 647.
  • Entero 64 bits(1): número entero de 8 bytes incluidos entre +/- 2^63.
  • Real: número real en el rango ±1.7^±308 (con 13 cifras significativas).
  • Flotante(1): número de punto flotante.
  • BLOB (Binary Large Object): todo objeto binario, como un gráfico, otra aplicación o cualquier documento.
  • Imagen: imagen en uno de los formatos nativos soportados por 4D (ver el párrafo Formatos nativos soportados en el manual Lenguaje de 4D).
  • Objeto: pares atributo/valor en notación JSON, hasta 2 GB.

(1) Atención, estos tipos de campos sólo son utilizados por el motor SQL de 4D. Si estos campos se utilizan en el lenguaje de 4D, sus valores se convierten internamente en números reales.

Nota: el término genérico "cadena" indica el tipo Alfa o Texto, "numérico" indica un tipo Entero, Entero largo, Entero 64 bits, Real o Flotante.

Alfa  

Un campo tipo Alfa contiene caracteres alfanuméricos (letras y números), signos de puntuación, y caracteres especiales como el asterisco (*), el signo porcentaje (%), el guión (-) y otros similares. Los campos alfa se utilizan para almacenar información que deba ser tratada como texto y que no exceda los 255 caracteres de longitud.

Un campo Alfa puede estar asociado a un índice estándar y/o a un índice de palabras claves. Para mayor información sobre indexación, consulte la sección Crear y modificar índices.

Alfa es el tipo de campo más común. Generalmente, se utiliza este campo para nombres, direcciones, números telefónicos, códigos postales, etc. Durante la entrada de datos, un campo Alfa permite cualquier carácter, número, signo de puntuación o carácter especial.

Hay dos razones por las cuales utilizar el tipo Alfa para los códigos postales: los campos numéricos no muestran ceros al inicio y algunos códigos postales contienen guiones. La regla general que aplica para elegir entre numérico y Alfa consiste en elegir el campo Alfa a menos que el campo vaya a utilizarse en cálculos numéricos o búsquedas u ordenaciones basadas en valores numéricos.

Puede definir la longitud máxima de un campo Alfa entre 1 y 255 caracteres.

Puede concatenar la información de dos o más campos Alfa. Por ejemplo, puede colocar el nombre y el apellido de una persona en una misma línea de una etiqueta. Puede hacerlo simplemente utilizando la siguiente línea de código:

 NombreCompleto:=[Empleados]Nombre+" "+[Empleados]Apellido

La variable NombreCompleto puede mostrarse o imprimirse. También puede extraer parte de la información para utilizarla en otro lugar (extracción de una subcadena). La subcadena puede visualizarse o imprimirse.

Texto  

Un campo de tipo Texto es similar a un campo Alfa, excepto por unas pocas diferencias.

Un campo Texto puede contener hasta 2 GB de caracteres alfanuméricos. Generalmente, los campos texto se utilizan para almacenar bloques de texto de gran tamaño, tales como comentarios o descripciones.

Por razones de optimización, el contenido de un campo Texto se almacena por defecto fuera de los registros (ver “Almacenado en el registro" en la sección Propiedades de los campos). En este caso, el campo no puede asociarse a un índice estándar. Como los campos Alfa, un campo Texto puede asociarse a un índice de palabras claves. Para mayor información sobre indexación, consulte la sección Crear y modificar índices.

En un formulario de entrada, un campo Texto puede tener barras de desplazamiento. En un informe impreso, el campo texto puede extenderse tanto como sea necesario para imprimir toda la información, incluso si se extiende por varias páginas.

Durante la entrada de datos, los campos Texto ofrecen las características básicas de edición de texto: desplazamiento, ajuste de texto dentro del área definida para visualizar el campo, doble clic para
seleccionar una palabra, desplazar el cursor con ayuda de las teclas de movimiento y operaciones estándar de cortar, copiar y pegar. Si tiene la opción Multilínea, un campo de tipo Texto acepta retornos de carro durante la entrada de datos para la creación de nuevos párrafos (un campo tipo Alfa no los permite). Si tiene la opción Multiestilo, puede contener las variaciones de estilo tales como una palabra o grupo de palabras subrayadas, en negrita o en un color diferente.

Puede pegar texto en los campos de tipo texto, incluyendo texto de otros procesadores de texto.

Nota: otra forma de almacenar texto con un registro es utilizando el plug-in 4D Write. Con 4D Write, puede utilizar diferentes atributos de fuente, alineaciones de párrafo y otras características propias de los procesadores de texto que no están disponibles en campos Texto estándar.
Como con todos los plug-ins 4D, el área 4D Write debe colocarse en un campo de tipo BLOB y no de tipo Texto. Para mayor información sobre el uso de 4D Write, consulte, por ejemplo, la sección Introducción a 4D Write en el manual de 4D Write.

Fecha  

Utilice un campo tipo Fecha para almacenar valores de fechas como fechas de inicio, fechas de compra, cumpleaños, etc. Un campo tipo Fecha puede almacenar cualquier valor de fecha (día, mes, año) respetando el formato DD/MM/AAAA entre el año 100 y el año 32 767.

Notas:

  • En Estados Unidos, las fechas se especifican en el formato mes/día/año (MM/DD/AAAA). Otros países utilizan formatos diferentes como DD/MM/AAAA para Gran Bretaña, España y Latinoamérica.
    4D almacena las fechas de acuerdo al formato seleccionado en el sistema operativo de su ordenador.
  • Aunque un campo fecha puede almacenar fechas hasta el año 32 767, ciertas operaciones que pasan por el sistema imponen un límite inferior.

Hora  

Este tipo de campo se utiliza para almacenar horas como la hora actual, la hora de una cita, la hora de facturación, etc.). Un campo tipo hora puede almacenar cualquier hora en formato HH:MM:SS.

Los campos booleanos contienen valores TRUE o FALSE.

Puede definir el formato de un campo booleano como una casilla de selección o un botón radio. Una casilla de selección marcada es verdadero (TRUE); vacía es falso (FALSE). Seleccionar el primer botón radio equivale a tener verdadero (TRUE) y seleccionar el segundo botón equivale a tener falso (FALSE).

Nombre los campos booleanos de manera que pueda preguntar “¿El campo nombre es verdadero?”. Esta pregunta es útil al realizar búsquedas porque 4D revisa el valor TRUE y FALSE en un campo booleano. Por ejemplo, puede nombrar un campo “Masculino” en lugar de “Sexo”. Su criterio de búsqueda puede ser escrito como “Masculino es verdadero” en lugar de “Sexo es verdadero”.

Entero  

El tipo de campo Entero se utiliza para almacenar números enteros, es decir, números sin fracciones decimales. Los campos de tipo Entero pueden almacenar números enteros entre -32 768 y 32 767.

Utilice el tipo de campo Entero largo para campos que almacenen números enteros muy grandes como para ser almacenados en campos de tipo Entero. Este tipo de campo pueden almacenar números enteros entre ±2,147,483,647.

Este tipo de campo puede utilizarse para almacenar números enteros de 8 bytes permitiendo manipular valores enteros de gran tamaño, entre +/- 2E64.

Nota: atención, este tipo de campo es utilizado únicamente por el motor SQL de 4D. Si este campo se utiliza en el lenguaje de 4D, su valor se convierte internamente en un número real.

Real  

Los campos de tipo Real se utilizan para almacenar números reales, es decir números decimales (precio, salarios, gastos, etc.). Los campos reales pueden almacenar todo número en el rango de ±1.7E±308.
Los formatos de salida numéricos se basan automáticamente en los parámetros regionales del sistema. 4D reemplaza los caracteres “,” y “.” en los formatos de salida numéricos por el separador de miles definido en el sistema operativo respectivamente.

Nota: en el motor de la base de datos 4D, las comparaciones de números reales se realizan siempre con un valor épsilon de 10^-6 con el de fin de obtener un nivel de precisión suficiente. Para garantizar la coherencia de los datos y de los cálculos, este valor épsilon no se puede cambiar. En particular, el motor de base de datos no tiene en cuenta el comando SET REAL COMPARISON LEVEL, que sólo se aplica a los tratamientos establecidos en el lenguaje de 4D. Debido a la imprecisión inherente a los cálculos realizados en los números reales, no recomendamos el uso de este tipo de datos para almacenar valores precisos como identificadores.

Este tipo de campo puede utilizarse para almacenar los números de punto flotante. Estos tipos de números permiten almacenar los valores reales sin perder precisión.

Note: atención, este tipo de campo es utilizado únicamente por el motor SQL de 4D. Si este campo se utiliza en el lenguaje de 4D, su valor se convierte internamente en un número real.

Los campos de tipo Blob (Binary Large Object) almacenan documentos binarios de todo tipo. Puede utilizar un campo de tipo BLOB para los documentos completos en su base (archivos creados por otras aplicaciones, aplicaciones, etc.). Cuando trabaja con un registro que contiene un campo BLOB, todo el BLOB se carga en la memoria. Puede utilizar campos tipo BLOB para almacenar archivos de escritorio dentro de su base de datos. También puede escribir los contenidos de un campo tipo BLOB en un archivo de escritorio. Por ejemplo, puede utilizar un campo tipo BLOB en un sistema de gestión de documentos que almacena documentos en la base y los entrega a los usuarios cuando son solicitados.

Utilice los comandos BLOB en el lenguaje 4D para manipular los campos tipo BLOB. Utilice los comandos DOCUMENT TO BLOB y BLOB TO DOCUMENT para leer y escribir documentos desde y hacia campos
BLOB. Los comandos COMPRESS BLOB, EXPAND BLOB y BLOB PROPERTIES le permiten trabajar con campos BLOBs comprimidos.

Por razones de optimización, el contenido de un campo BLOB se almacena fuera de los registros. Los BLOBs sólo se cargan cuando es necesario, por ejemplo una vez que el registro que se busca ha sido encontrado.
El contenido de un campo BLOB no se muestra en pantalla ya que un BLOB puede representar todo tipo de datos. 

Imagen  

Los campos tipo Imagen se utilizan para almacenar fotografías digitalizadas, diagramas, mapas, e ilustraciones creadas utilizando aplicaciones gráficas. Las imágenes se conservan en su formato nativo.
Algunas aplicaciones gráficas almacenan información adicional con las imágenes, como por ejemplo, instrucciones para una impresora PostScript™ o, a partir de 4D v12, metadatos. Esta información acompaña la imagen cuando se copia o pega en un campo Imagen y es utilizada por 4D durante la impresión de la imagen o, en el caso de los metadatos, vía los comandos GET PICTURE METADATA y SET PICTURE METADATA.

Por razones de optimización, el contenido de un campo Imagen se almacena fuera de los registros. Las imágenes sólo se cargan cuando es necesario, por ejemplo una vez se encuentra el registro buscado. A partir de 4D v13, también puede elegir guardar imágenes fuera del archivo de datos (ver la sección Almacenamiento externo de los datos)

4D puede memorizar un nombre por defecto para cada imagen almacenada en un campo. Esto significa que usted puede definir un nombre de archivo por defecto cuando guarda el contenido de un campo imagen en un archivo disco a través de una exportación usuario o utilizando el comando WRITE PICTURE FILE (cuando pasa una cadena vacía en el parámetro nomArchivo). Si el contenido del campo se copia en una variable o en otro campo, su nombre por defecto también se copia.

Puede asociar un nombre por defecto a una imagen almacenada en un campo imagen de dos maneras:

  •  Por programación, usando el comando SET PICTURE FILE NAME. Puede utilizar este comando para asociar un nombre de archivo por defecto a la imagen. También puede utilizar el comando Get picture file name para averiguar el nombre por defecto de una imagen.
  • Automáticamente, cuando el contenido de un archivo imagen se importa en un campo imagen utilizando el menú contextual o usando el comando READ PICTURE FILE: en este caso, 4D memoriza el nombre del archivo imagen original.

Esto se ilustra en la siguiente secuencia:

  1. El usuario importa el archivo con el nombre logo64.png en un campo imagen:
  2. A continuación, el usuario guarda el contenido del campo imagen: el nombre logo64.png se presenta en la caja de diálogo (tenga en cuenta que se trata de un nombre por defecto y se puede cambiar)

Objeto  

Los campos objeto almacenan pares atributo/valor de diferente tipo, sin esquemas de datos predefinidos. La estructura de datos almacenada no es necesariamente la misma entre los diferentes registros. Por ejemplo, un campo objeto [Person]Address puede contener atributos diferentes dependiendo de la ciudad, el país, y así sucesivamente:

record1= {"street1":"Cotton Treasure Grounds", "street2":"Place Corners", "state":"MD",...} 
record2= {"street1":"Umber Road", "Number":"28", "state":"MO",...}

La estructura de los objetos 4D se basa en el principio estándar de pares "propiedad/valor". La sintaxis de estos objetos se basa en la notación JSON, pero no sigue completamente:

  • Un nombre de atributo es siempre un texto, por ejemplo "Nombre".
  • Un valor de atributo puede ser uno de los tipos siguientes:
    • número (Real, Entero, etc.)
    • texto
    • array (texto, real, entero largo, entero, booleano, objeto, puntero)
    • null
    • Booleano
    • fecha (formato "YYYY-MM-DDTHH:mm:ssZ")
    • objeto (los objetos se pueden anidar en varios niveles)

Atención: tenga en cuenta que los nombres de los atributos diferencian entre las mayúsculas y minúsculas.

Un campo objeto puede ser hasta de 2 GB. Cuando se trabaja con un registro que contiene un campo objeto, todo el objeto se carga en memoria. Como para campos de tipo texto, imagen o BLOB, los campos objeto pueden ser almacenados en el archivo de datos (con los registros o no), o fuera del archivo de datos; esta opción se trata en la sección Almacenamiento externo de los datos.

Utilice los comandos 4D Objetos (Lenguaje) para gestionar los campos objeto. Utilice los comandos OB Get y OB SET para leer y escribir datos desde y hacia campos objeto. También puede almacenar y leer arrays como atributos utilizando los comandos OB SET ARRAY y OB GET ARRAY.

Puede utilizar el comando QUERY BY ATTRIBUTE para buscar entre los campos objeto.

Como los campos de tipo objeto se basan en texto, su contenido se muestra por defecto en un formulario 4D como texto y formato JSON (ver la sección siguiente).

Nota: para trabajar con objetos JSON, puede utilizar los comandos que se encuentran en el tema "JSON".

El tipo objeto permite definir los campos dinámicos sin esquema de estructura predefinido. Los campos objeto pueden ser considerados como "definidos por el usuario" o "personalizados". En 4D, tiene que elegir entre los modelos de datos con o sin esquema. En ambos casos, puede ejecutar búsquedas indexadas rápidas.

También tenga en cuenta que los campos objeto pueden simplificar los modelos de datos estándar. Por ejemplo, para una tabla "Contacts" convencional, un solo campo de tipo objeto permite evitar la creación de decenas de campos que representan todos los valores posibles, mayoría de los cuales no se utilizan en el 90% de los casos. Se crea el modelo de información sobre la marcha sólo si es necesario.

Todos los comandos del tema Objetos (Lenguaje) ahora aceptan un campo objeto como primer parámetro (objeto).

Al igual que los objetos de lenguaje estándar, los valores de los campos objeto se manejan mediante los comandos del tema Objetos (Lenguaje). Por ejemplo:

  // Definir un valor
 OB SET([Persons]Identity_OB;"First Name";$firstName)
 OB SET([Persons]Identity_OB;"Last Name";$lastName)
 
  // Obtener un valor
 $firstName:=OB Get([Persons]Identity_OB;"First Name")
 $lastName:=OB Get([Persons]Identity_OB;"Last Name")

Los arrays también son soportados, por ejemplo:

 ARRAY TEXT($arrGirls;3)
 $arrGirls{1}:="Emma"
 $arrGirls{2}:="Susan"
 $arrGirls{3}:="Jamie"
 OB SET ARRAY([Persons]Children;"Girls";$arrGirls)

Para guardar las modificaciones aplicadas a los atributos de un campo objeto, en la mayoría de los casos deberá notificar explícitamente a 4D del cambio antes de guardar el registro. Esta notificación se realiza reasignando el campo del objeto a sí mismo:

 [Persons]Identity_OB:=[Persons]Identity_OB //fuerza a 4D a actualizar los contenidos del campo
 SAVE RECORD([Persons])

Este paso es necesario ya que una referencia de objeto se puede usar en diferentes lugares dentro de la aplicación, incluidos otros campos objeto. El lenguaje 4D no puede detectar si alguno de los atributos del campo objeto se ha modificado al guardar el registro.

Debe reasignar explícitamente el campo para guardar su contenido tan pronto como se modifiquen los atributos:

  • cuando maneja todo atributo mediante la notación de objetos:
     [Person]Info.firstName:="Jane"
     [Person]Info:=[Person]Info //obligatorio para guardar las ediciones
     SAVE RECORD([Person])
  • cuando maneja atributos más allá del primer nivel usando el comando OB SET:
     OB SET([Person]Info.Children[0];"firstName";"Jenny")
     [Person]Info:=[Person]Info //obligatorio para guardar las ediciones
     SAVE RECORD([Person])

Nota: la asignación del campo no es necesaria cuando se manejan atributos de primer nivel con el comando OB SET:

 OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue") //acceso a atributos de primer nivel
 SAVE RECORD([Rect]//no es necesario asignar el campo en este caso

Los campos objeto pueden ser utilizados en las fórmulas (con ayuda del editor de fórmulas estándar o el comando EXECUTE FORMULA). Sin embargo, en este contexto, los campos objeto pueden ser manejados únicamente por intermedio de los siguientes comandos:

Por ejemplo, puede ejecutar la siguiente fórmula de búsqueda:

 OB Get([Rect]Desc;"color")="blue"


De forma predeterminada, los campos objeto se representan como áreas de texto en los formularios 4D. Dentro de estas áreas, los datos objeto deben ser undefined, o formateados en texto JSON; de lo contrario se devuelve un error.

Por ejemplo, si ha definido el campo [Rect]Desc como un campo Objeto, puede escribir:

 CREATE RECORD([Rect])
 <p>[Rect]Name:="Blue square"
 OB SET([Rect]Desc;"x";"50";"y";"50";"color";"blue")
 SAVE RECORD([Rect])

Cuando el campo [Rect]Desc se incluye en su formulario, se mostrarán los siguientes contenidos:

Puede editar los valores que se muestran directamente en el campo texto o introducir datos objeto directamente con la notación objeto estándar; será formateado en JSON automáticamente al pulsar la tecla [Tab]:

Sin embargo, la edición directa debe realizarse con precaución ya que los espacios fuera de lugar o símbolos darán lugar a un error de análisis JSON y no se guardarán los datos editados:

Por lo general, es más preciso para manejar el contenido de los campos objeto a través de los comandos Objetos (Lenguaje) y JSON.

La mayor parte de las funcionalidades estándar de 4D soportan campos de tipo objeto. Sin embargo, algunas partes avanzadas de la aplicación no están listas para utilizar directamente los campos objeto en la versión actual. Estas partes se actualizarán progresivamente y estarán disponibles en próximas versiones.

Las siguientes funciones o comandos soportan parcialmente campos objeto a través de fórmulas 4D:

Función/Comando
Editor de búsquedas
Editor de ordenación
Editor de importación/exportación (soporte automático para el formato 4D Application, necesita utilizar formularios para los formatos texto)
4D Write
4D Write Pro
4D View
4D Tags
PROCESS 4D TAGS

Las siguientes funciones y comandos 4D no admiten campos objeto:

Funciones/Comandos
Editor de informes rápidos
Editor de etiquetas
Gráficos
PHP
Plugin SDK
SQL Data Definition Language (CREATE TABLE)
SQL Data Manipulation Language (SELECT, INSERT, UPDATE)
SQL EXPORT DATABASE y SQL EXPORT SELECTION
DISTINCT VALUES
RELATE ONE
RELATE MANY
ORDER BY
SCAN INDEX

 
PROPIEDADES 

Producto: 4D
Tema: Definir la estructura de la base de datos

 
HISTORIA 

Modificado: 4D v15

 
ARTICLE USAGE

Manual de Diseño ( 4D v16)
Manual de Diseño ( 4D v16.1)
Manual de Diseño ( 4D v16.3)