Cómo almacenar imágenes en dbf
Extraer una imagen o archivo (archivo .BMP, .DOC, .GIF o .JPG) de un campo universal en un .DBF
*---------------------------------------------- -- --- ------------
*-- Copie el contenido de un campo común .DBF a un archivo .BMP, .DOC, .GIF o .JPG ,
p>*--Elimina toda la información de encabezado y pie de página agregada por el comando APPEND GENERAL.
*--Método de llamada=gentofil(nombre de campo,nombre de tabla)
&& parámetros lcfieldname,lcfilename
*********** ** **************************** ******************* **** ***********
***************************** ** *************************************************
*-- Para ejecutar el ejemplo, copie las tablas de muestra de VFP empleado.dbf, empleado.fpt, empleado.cdx al directorio donde se encuentran los archivos y establezca el directorio como directorio predeterminado. Luego, en la ventana de comando, escriba:
*-- do gentofil
*-- Esto hará que el programa de muestra obtenga la primera entrada en la tabla de empleados actual según las propiedades de el contenido del campo genérico. Copie el contenido de la fotografía del campo común del primer registro en la tabla de empleados actual al archivo empleado.bmp/employee.doc/employee.jpg/employee.gif.
********************************************* *** **********************************
******* *** **************************** ******************* ***** *************************
lcfieldname = "foto"
lcfilename = "empleado"
ESTABLECER DEFA EN c:\copygen
LOCAL lccompatible,lcextension,liendoffset,;
lctempfile,lihandelin,lihandleout,lisize,llsuccess p>
lccompatible = SET( " COMPATIBLE") && Guarde la configuración "Compatible"
SET COMPATIBLE ON && para que la función FSIZE devuelva el tamaño del archivo, no el tamaño del campo
IF "." $ lcfilename
lcfilename=LEFT(lcfilename,AT("." ,lcfilename))
ENDIF
lctempfile=SYS (3) && Especifique el nombre del archivo temporal
COPIAR A (lctempfile) FIELDS (lcfieldname) NEXT 1 &&Copiar el contenido del campo general a un archivo temporal
COPIAR A ( lctempfile) FIELDS (lcfieldname) NEXT 1 && Copie el contenido del campo general al archivo temporal
lihandlein=FOPEN(lctempfile+".FPT") && Abra su .FPT
* - - Examine el contenido del .FPT para determinar el tipo de documento incrustado
DO CASE
CASE FSEEK(lihandlein,590)>0 .AND.FREAD(lihandlein,2)="BM "
lcextension="BMP"
liendoffset=FSEEK(lihandlein,590)+83
*-- Nota: En el código fuente, el archivo .Note : En el código fuente, el 590 en la línea de código anterior es 599
CASE FSEEK(lihandlein,610)>0 .AND.ASC(FREAD(lihandlein,1))=208 .FREAD(lihandlein ,1))=17
lcextension="DOC "
liendoffset=FSEEK(lihandlein,610)+16798
CASO FSEEK(lihandlein,669)> 0 .AND.ASC(FREAD(lihandlein,1))=255 .AND .ASC(FREAD(lihandlein,1))=216 .AND.ASC(FREAD(lihandlein,1))=255
lcextension="JPG"
liendoffset=FSEEK(lihandlein ,648)+3779
*-- Nota: En el código fuente, 669 en la línea anterior es
648
CASO FSEEK(lihandlein,666)>0 .AND.FREAD(lihandlein,3) = "GIF"
.FREAD(lihandlein,3) = "GIF" p> p>
lcextension="GIF"
liendoffset=FSEEK(lihandlein,666)+3780
*--- Nota: En el código fuente, el 666 es 663
DE LO CONTRARIO