versión 2004 (Modificado)
Definición
4D soporta datos de tipo BLOB (Binary Large OBjects).
Puede definir campos y variables de tipo BLOB:
Para crear un campo de tipo BLOB, seleccione BLOB en la lista desplegable Tipo de campo en la ventana Propiedades del campo.
Para crear una variable de tipo BLOB, utilice el comando de declaración de compilación C_BLOB. Puede crear variables de tipo BLOB locales, proceso e interproceso.
Nota: los arrays no pueden ser de tipo BLOB.
En 4D, un BLOB es una serie contigua de bytes de longitud variable, que puede ser tratada como un solo objeto o cuyos bytes pueden ser direccionados individualmente. Un BLOB puede estar vacío (longitud nula) o puede contener hasta 2147483647 bytes (2 GB).
Los BLOBs y la memoria
Un BLOB se carga en su totalidad en memoria. Una variable de tipo BLOB se mantiene y existe únicamente en memoria. Un campo de tipo BLOB se carga en memoria desde el disco, como el resto del registro al cual pertenece.
Al igual que otro tipo de campos que pueden retener gran cantidad de datos (campos de tipo Imagen y Subtabla), los campos BLOB no se duplican cuando usted modifica un registro. Por lo tanto, el resultado devuelto por los comandos Old y Modified no es significativo cuando se aplica a un campo BLOB.
Visualización de BLOBs
Un BLOB puede contener todo tipo de datos, por lo tanto no tiene una representación en pantalla por defecto. Si usted visualiza un campo o una variable de tipo BLOB en un formulario, siempre aparecerá vacío, sin importar su contenido.
Campos tipo BLOB
Puede utilizar campos de tipo BLOB para guardar todo tipo de datos, hasta 2 GB. No es posible indexar un campo BLOB, por lo tanto debe utilizar una fórmula para buscar registros en valores almacenados en un campo tipo BLOB.
Paso de parámetros, punteros y resultados de funciones
Los BLOBs en 4D pueden pasarse como parámetros a comandos 4D o a rutinas de plug-ins que esperan un parámetro de tipo BLOB. Los BLOBs también pueden pasarse como parámetros a métodos de usuario o ser devueltos como resultado de una función.
Para pasar un BLOB a sus métodos, puede también definir un puntero hacia el BLOB y pasar el puntero como parámetro.
Ejemplos:
` Declarar una variable de tipo BLOB C_BLOB (unBlobVar) ` El BLOB se pasa como parámetro a un comando 4D SET BLOB SIZE (unBlobVar;1024*1024) ` El BLOB se pasa como parámetro a una rutina externa $errCode:= Hacer Algo Con Este BLOB (unBlobVar) ` El BLOB se pasa como parámetro a un método que devuelve un BLOB C_BLOB (traerBlob) traerBlob:=Llenar_Blob (unBlobVar) ` Un puntero al BLOB se pasa como parámetro a un método de usuario CALCULAR BLOB (->unBlobVar)
Nota para los desarrolladores de plug-ins 4D: un parámetro de tipo BLOB se declara como "&O" (la letra "O", no el número "0").
Asignación
Puede asignar BLOBs a otros BLOBs.
Ejemplo:
` Declarar dos variables de tipo BLOB C_BLOB (vBlobA;vBlobB) ` Definir el tamaño del primer BLOB en 10K SET BLOB SIZE (vBlobA;10*1024) ` Asignar el primer BLOB al segundo vBlobB:=vBlobA
Sin embargo, no se puede aplicar un operador a los BLOBs; no existe una expresión de tipo BLOB.
Direccionar el contenido de un BLOB
Cada byte de un BLOB puede ser direccionado individualmente utilizando llaves {...}. En un BLOB, los bytes se numeran de 0 a N-1, donde N es el tamaño del BLOB. Ejemplo:
` Declarar una variable de tipo BLOB C_BLOB (vBlob) ` Fijar el tamaño del BLOB en 256 bytes SET BLOB SIZE (vBlob;256) ` El bucle siguiente inicializa los 256 bytes del BLOB en cero For ( vByte ; 0 ; BLOB size (vBlob)-1) vBlob{vByte}:=0 End for
Como es posible direccionar individualmente todos los bytes de un BLOB, usted puede literalmente almacenar todo lo que quiera en un campo o variable tipo BLOB.
Comandos 4D para manejar BLOBs
4D ofrece los siguientes comandos para trabajar con BLOBS:
SET BLOB SIZE redimensiona un campo o variable de tipo BLOB.
BLOB SIZE devuelve el tamaño de un BLOB.
DOCUMENT TO BLOB y BLOB TO DOCUMENT le permiten cargar y escribir un documento entero en un campo o una variable de tipo BLOB y al contrario (opcionalmente, confluencia de datos (data fork) y recursos (resources fork) en Macintosh).
VARIABLE TO BLOB y BLOB TO VARIABLE como también LIST TO BLOB y BLOB to list le permiten guardar y cargar las variables 4D en BLOBs.
COMPRESS BLOB, EXPAND BLOB y BLOB PROPERTIES le permiten trabajar con BLOBs comprimidos.
Los comandos BLOB to integer, BLOB to longint, BLOB to real, BLOB to text, INTEGER TO BLOB, LONGINT TO BLOB, REAL TO BLOB y TEXT TO BLOB le permiten manipular datos estructurados que vienen del disco, de los recursos, del SO, etc.
DELETE FROM BLOB, INSERT IN BLOB y COPY BLOB permiten manejar rápidamente grandes pedazos de datos dentro de BLOBs.
ENCRYPT BLOB y DECRYPT BLOB le permiten encriptar y desencriptar datos en una base 4D.
Estos comandos se describen en este capítulo.
Adicionalmente:
C_BLOB declara una variable de tipo BLOB. Consulte el capítulo Compilador para mayor información.
GET PASTEBOARD DATA y APPEND DATA TO PASTEBOARD le permiten manejar todo tipo de datos almacenados en el portapapeles. Consulte el capítulo Portapapeles para mayor información.
GET RESOURCE y SET RESOURCE le permiten trabajar con todo tipo de recursos almacenados en disco. to Consulte el capítulo Recursos para mayor información.
SEND HTML BLOB le permite enviar todo tipo de datos a un navegador Web. Consulte el capítulo Servidor Web para mayor información.
PICTURE TO BLOB, BLOB TO PICTURE y PICTURE TO GIF le permiten abrir y convertir imágenes. Consulte el capítulo Imágenes para mayor información.
GENERATE ENCRYPTION KEYPAIR y GENERATE CERTIFICATE REQUEST son comandos de encriptación utilizados por el protocolo de conexión segura SSL (Secured Socket Layer). Consulte el capítulo Protocolo de seguridad para mayor información.