Sie sind auf Seite 1von 8

* *Aqui va la funcion: *Nota: param.dbf es mi tabla que yo he protegido. * Function Protec &&****************************************** handle = FOPEN("PARAM.

DBF",2) && abre en modo lectura escritura primerbyte = FREAD(handle,1) && lee el 1er byte Do case Case primerbyte = CHR(255) && si protegido escrib = chr(3) && desprotege

Case primerbyte = CHR(3) && si desprotegido escrib = chr(255) Endcase =FSEEK(handle,0,0) =FWRITE(handle,escrib,1) =FCLOSE(handle) Return .t. Anteriormente hacia lo que tu estas intentando y por mucho tiempo me funciono perfectamente, despus opte por cambiar el administrador de base de datos y trabajar con Firebird as ya no uso las tablas nativas de FOX. *Aqui va la funcion: *Nota: param.dbf es mi tabla que yo he protegido. * Function Protec &&****************************************** handle = FOPEN("PARAM.DBF",2) && abre en modo lectura escritura && protege

primerbyte = FREAD(handle,1) && lee el 1er byte Do case Case primerbyte = CHR(255) && si protegido escrib = chr(3) && desprotege Case primerbyte = CHR(3) && si desprotegido escrib = chr(255) && protege Endcase =FSEEK(handle,0,0) =FWRITE(handle,escrib,1) =FCLOSE(handle) Return .t. Bsicamente la idea es cambiar el primer byte de la base de esta manera FOX no la reconoce como una base de datos, al iniciar tu programa las desproteges y trabajas con ella cuando sales la vuelves a proteger. Otra opcin es que encriptes los registros y tu programa los descencripte para trabajar bien. Hola Sergio: Una vez encontr un a funcin (no recuerdo donde), adaptada por Daro Matas a partir de un programa en clipper de Rick Spence. Esta funcin sirve para evitar que se puedan abrir las tablas de VFP desde otras aplicaciones. Consiste en cambiar el primer byte de la cabecera del archivo de forma que, si se intenta abrir una vez cambiado, aparece un mensaje indicando que no se puede abrir el archivo (en Fox aparece el mensaje "No es una tabla de Visual Fox Pro"). Su uso es muy sencillo, simplemente se llama a la funcin y devuelve .T. si funcion y .F. si no pudo actualizar ese byte. Funciona como un interruptor, de forma que la primera vez que se llama protege la tabla y la siguiente vez la desprotege. Aunque est pensada para usar en tablas libres de fox, supongo que no habr problema en adaptarla a tablas de bases de datos. Espero que te sirva Un saludo **************************************************** *** ENCRIPTADOR/DESENCRIPTADOR DE TABLAS DBF *** *** PARA FOXPRO *** ****************************************************

**************************************************** *** (c) Rick Spence para CLIPPER *** *** Adaptado para FoxPro: Daro Matas ***

****************************************************

* Ojo!, esta funcin est especificamente preparada para tablas libres creadas desde VFP, * Si se necesita para otros tipos de tablas DBFs (DBase, Clipper,...) para regenerar la des* proteccin, hay que saber previamente cual es el valor original del primer Byte pues el valor * que asigna aqu a DESPROTEG (CHR(48)) es especifico en VFP. Tener en cuenta que, si son * tablas dBase o clipper el primer byte vara si la tabla tiene o no campos Memo. Como * orientacin tomar estos valores originales dBase: * -Valor original de Tabla sin Memos: chr(3) * -Valor original de Tabla con Memos: chr(131) * Si es otro tipo de dbf, podeis modificar la funcin momentaneamente para que en el momento * en que lee el primer byte, lo saque por pantalla, con lo cual, ya lo conocemos y lo podemos * implementar en la funcin. * Espero que sea de ayuda a todos: Daro Matas (20-Sept-2000).

* Funcin que escribe chr(255) en el primer byte de un fichero DBF si est desprotegido * Si los bytes ya estaban escritos, restaura sus valores propios, * chr(48) respectivamente. Si al leer el byte no reconoce el * valor almacenado, termina y devuelve error. * * la llamada es: PROTEGE("ruta+nombre+extensin_Tabla") * LOGICO protege(fnombre) * * CARACTER fnombre - Nombre del fichero. * * Devuelve .T. o .F. * FUNCTION PROTEGE(fnombre) LOCAL handle, primerbyte, car_a_escr, PROTEG, DESPROTEG

PROTEG = chr(255) && Ya est Protegido DESPROTEG = chr(48) && Est Desprotegido

* Abre el fichero en modo lectura/escritura y guarda el handle. * handle = fopen(fnombre, 2) IF ferror() <> 0 ? "Error de apertura en el fichero, " ?? "error de DOS: ", ferror() RETURN .F. ENDIF * Lee el primer byte del fichero. * primerbyte = fread(handle, 1) * ? primerbyte IF ferror() <> 0 ? "Error de lectura en el fichero, " ?? "error de DOS: ", ferror() RETURN .F. ENDIF DO CASE CASE primerbyte = PROTEG && Protegido, car_a_escr = DESPROTEG && Lo convierte en un DBF && normal. CASE primerbyte = DESPROTEG && Desprotegido, car_a_escr = PROTEG && Lo protege. OTHERWISE && Desconocido, sale e RETURN .F. && informa de error. ENDCASE * Mueve el puntero al principio del fichero. * fseek(handle, 0, 0) * Escribe un carcter de (des)proteccin en el primer byte.

* fwrite(handle, car_a_escr, 1) IF ferror() <> 0 ? "Error de escritura en el fichero, " ?? "error de DOS: ", ferror() RETURN .F. ENDIF fclose(handle) IF ferror() <> 0 ? "Error al cerrar el fichero, " ?? "error de DOS: ", ferror() RETURN .F. ENDIF RETURN .T.

El ejemplo siguiente usa FREAD( ) para mostrar el contenido de un archivo. Si el archivo est vaco, se muestra un mensaje.
* TEST.TXT debe existir; puede crear este archivo * mediante el Bloc de notas. Local cnControladorArch,nTamao,cCadena cnControladorArch = FOPEN("test.txt") * Busca hasta el final del archivo para determinar el nmero * de bytes en el archivo. nTamao = FSEEK(cnControladorArch, 0, 2) && Lleva el puntero a EOF. IF nTamao <= 0 * Si el archivo est vaco, muestra un mensaje de error. WAIT WINDOW "Este archivo est vaco." NOWAIT ELSE * Si el archivo no est vaco, el programa almacena su contenido * en memoria, despus muestra el texto en la ventana principal de * Visual FoxPro. = FSEEK(cnControladorArch, 0, 0) && Mueve el puntero a BOF. cCadena = FREAD(cnControladorArch, nTamao) ? cCadena ENDIF = FCLOSE(cnControladorArch) && Cierra el archivo.

FCHSIZE( ) (Funcin)
Vea tambin

Cambia el tamao de un archivo abierto con una funcin de archivo de bajo nivel. Sintaxis FCHSIZE(nControladorArchivo, nNuevoTamaoArchivo) Tipos devueltos Numeric Argumentos nControladorArchivo Especifica el controlador del archivo cuyo tamao desea cambiar. El controlador de archivo lo devuelve FOPEN( ) al abrir el archivo o FCREATE( ) al crear el archivo. Si abre un archivo con FOPEN( ), deber volver a abrirlo con privilegios de escritura o de lectura y escritura para poder cambiar su tamao. nNuevoTamaoArchivo Especifica el nuevo tamao del archivo, en bytes. Si nNuevoTamaoArchivo es menor que el tamao original del archivo, se truncar el archivo. Si nNuevoTamaoArchivo es mayor que el tamao original del archivo, se aumentar el tamao del archivo. Comentarios Utilice FCHSIZE( ) para aumentar el tamao del archivo o truncar el archivo a partir de un byte especificado. Cuando se aumenta el tamao de un archivo, Microsoft Visual FoxPro asigna sectores para el archivo en la unidad en la que est abierto el archivo. Como FCHSIZE( ) no inicializa el espacio del archivo nuevo, el espacio podr contener los datos antiguos. Asegrese de administrar el espacio del archivo nuevo. Devuelve el tamao final del archivo en bytes. Visual FoxPro devuelve 1 si FCHSIZE( ) no es capaz de cambiar el tamao del archivo si, por ejemplo, se ha especificado un control de archivo no vlido, debido a que no hay espacio de disco suficiente o a que el archivo es de slo lectura. Sugerencia Esta funcin puede utilizarse para truncar un archivo a longitud 0.
AQUI LA FUNCION EN FOX : EXISTE UN EQUIVALENTE EN VISUAL? **Cambia el primer byte de una tabla de datos DBF sirve para protejer los datos de dicha tabla. *Aqui va la funcion:

*Nota: param.dbf es mi tabla que yo he protegido. * Function Protec &&****************************************** handle = FOPEN("PARAM.DBF",2) && abre en modo lectura escritura primerbyte = FREAD(handle,1) && lee el 1er byte Do case Case primerbyte = CHR(255) && si protegido escrib = chr(3) && desprotege Case primerbyte = CHR(3) && si desprotegido escrib = chr(255) && protege Endcase =FSEEK(handle,0,0) =FWRITE(handle,escrib,1) =FCLOSE(handle) Return .t.

Cambia el primer byte de una tabla de datos DBF sirve para protejer los datos de dicha tabla.

* *Aqui va la funcion: *Nota: param.dbf es mi tabla que yo he protegido. * Function Protec &&****************************************** handle = FOPEN("PARAM.DBF",2) && abre en modo lectura escritura primerbyte = FREAD(handle,1) && lee el 1er byte

Do case Case primerbyte = CHR(255) && si protegido escrib = chr(3) && desprotege

Case primerbyte = CHR(3) && si desprotegido escrib = chr(255) Endcase =FSEEK(handle,0,0) =FWRITE(handle,escrib,1) =FCLOSE(handle) Return .t. && protege

Das könnte Ihnen auch gefallen