Alguem poderia me sugerir como proteger meus dbfs contra leitura externa (pelo dbu por exemplo) da uma forma mais simples possivel
Agradeco a todos desde ja
Moderador: Moderadores

Código: Selecionar todos
FUNCTION Protege(xcArquivo,cCond)
LOCAL nBytesL, nBytesG, nHandle, cBuffer := SPACE(01)
IF (VALTYPE(xcArquivo) <> "C") .OR. (xcArquivo == NIL)
RETURN(.F.)
END
IF (VALTYPE(cCond) <> "C") .OR. (cCond == NIL)
RETURN(.F.)
END
nHandle := FOPEN(xcArquivo,2) && ABRE ARQUIVO PARA LEITURA/GRAVACAO
*
IF (nHandle == -1)
Beep(1)
SETCOLOR(cCor5)
DO CASE
CASE FERROR() == 0
Mensagem("*** SUCESSO ***")
CASE FERROR() == 1
Mensagem("*** NUMERO DE FUNCAO INVALIDO ***")
CASE FERROR() == 2
Mensagem("*** ARQUIVO NAO ENCONTRADO ***")
CASE FERROR() == 3
Mensagem("*** PATH NAO ENCONTRADO ***")
CASE FERROR() == 4
Mensagem("*** MUITOS ARQUIVOS ABERTOS ***")
CASE FERROR() == 5
Mensagem("*** ACESSO NEGADO ***")
CASE FERROR() == 6
Mensagem("*** HANDLE INVALIDO ***")
CASE FERROR() == 7
Mensagem("*** BLOCOS DE CONTROLE DE MEMORIA DESTRUIDOS ***")
CASE FERROR() == 8
Mensagem("*** MEMORIA INSUFICIENTE ***")
CASE FERROR() == 15
Mensagem("*** ESPECIFICADO UM DRIVE INVALIDO ***")
CASE FERROR() == 19
Mensagem("*** TENTATIVA DE GRAVAR EM DISCO PROTEGIDO ***")
CASE FERROR() == 21
Mensagem("*** DISCO NAO PRONTO ***")
CASE FERROR() == 23
Mensagem("*** ERRO DE CRC ***")
CASE FERROR() == 29
Mensagem("*** ERRO DE GRAVACAO ***")
CASE FERROR() == 30
Mensagem("*** ERRO DE LEITURA ***")
CASE FERROR() == 32
Mensagem("*** VIOLACAO DE COMPARTILHAMENTO ***")
CASE FERROR() == 33
Mensagem("*** VIOLACAO DE TRAVAMENTO ***")
ENDCASE
SETCOLOR(cCor0)
RETURN(.F.) && NAO ABRIU O ARQUIVO - PROBLEMAS ...
END
nBytesL := FREAD(nHandle,@cBuffer,1)
IF (nBytesL != 1) && NAO LEU O 1. BYTE - PROBLEMAS ...
RETURN(.F.)
END
*
DO CASE
CASE (cCond == "P")
cBuffer := IF( ASC(cBuffer)== 3, CHR(4), cBuffer)
cBuffer := IF( ASC(cBuffer)==131, CHR(132), cBuffer)
CASE (cCond == "D")
cBuffer := IF( ASC(cBuffer)== 4, CHR(3), cBuffer)
cBuffer := IF( ASC(cBuffer)==132, CHR(131), cBuffer)
OTHERWISE
RETURN(.F.)
ENDCASE
*
FSEEK(nHandle,0,0) && POSICIONA O PONTEIRO ...
nBytesG := FWRITE(nHandle,cBuffer,1)
IF (nBytesG != 1) && NAO GRAVOU O 1. BYTE - PROBLEMAS ...
RETURN(.F.)
END
FCLOSE(nHandle)
RETURN(.T.)
***

Código: Selecionar todos
PROT('arq1.dbf')
PROT('arq2.dbf')
.
.
.
PROT('arqx.dbf')
FUNCTION PROT
PARAMETERS FILE
PRIVATE READ_BYTES, WRITE_BYTES, HANDLE, BUFFER
HANDLE = FOPEN(FILE,2)
IF HANDLE = -1
RETURN(.F.)
ENDIF
BUFFER = SPACE(01)
READ_BYTES=FREAD(HANDLE,@BUFFER,1)
IF READ_BYTES !=1
RETURN(.F.)
ENDIF
BUFFER=IIF(ASC(BUFFER)=3,CHR(4),IIF(ASC(BUFFER)=4,CHR(3),BUFFER))
BUFFER=IIF(ASC(BUFFER)=131,CHR(132),IIF(ASC(BUFFER)=131,CHR(132),BUFFER))
FSEEK(HANDLE,0,0)
WRITE_BYTES = FWRITE(HANDLE,BUFFER,1)
IF WRITE_BYTES !=1
RETURN(.F.)
ENDIF
FCLOSE(HANDLE)
RETURN(.T.)
