Página 1 de 1

AJUDA - URGENTE

Enviado: 27 Jul 2006 14:03
por negrao
Pessoal, estou com o seguinte problema, em um cliente esta ocorrendo de todos os dias um arquivo de Pedido(que é mensal) esta sendo apagado, e so ele esta sendo apagado. Ja olhei de cabo a rabo o fonte e nao achei nada que apague tal arquivo.
O maximo que poderia ser é o comando PACK que dou apenas no final do dia para apagar registros deletados, mas acredito que nao seja isso.

Minha suspeita é que tem alguem fazendo isso.
Alguem poderia me dizer como posso descobrir isso ou uma maneira de bloquear que os arquivos sejam apagados.


Abaixo esta minha rotina de criacao de arquivo e indices

Código: Selecionar todos

//-----------------------------------
FUNCTION ABRE(CARQ,ASTRUCT,AIND,CALIAS,LMEN)
//-----------------------------------
LOCAL BLASTH,OBJERROR,LRET:=.T.,NI,CCAMPO,CIND,NCERRIND:=0 , ;
           CAERR:="",CHARQ

IF LMEN=NIL
   LMEN:=.T.
ENDIF
BLASTH:=ERRORBLOCK({|X| BREAK(X) } )

IF LMEN
   MENS("ABRINDO ARQUIVO "+CARQ+".")
ENDIF

WHILE .T.
   CARQI:=SUBS(CARQ,1,LEN(CARQ)-3)+"CDX"
   BEGIN SEQUENCE
      IF !FILE(CARQ) .AND. !EMPTY(ASTRUCT)
	 DBCREATE(CARQ,ASTRUCT,'SIXCDX')
	 DEL(CARQI)
      ELSEIF !FILE(CARQ)
	 LRET:=.F.
      ENDIF

      IF FILE(CARQ)
	 IF !EMPTY(SELECT(CALIAS))
	    &CALIAS->(DBCLOSEAREA())
	 ENDIF
	 IF NCERRIND>50 .AND. !EMPTY(AIND)
	    DEL(CARQI)
	 ENDIF
	 IF !FILE(CARQI) .AND. !EMPTY(AIND)
	    DBUSEAREA(.T.,'SIXCDX',CARQ,CALIAS,.F.)
	    WHILE EMPTY(SELECT(CALIAS))
	       DBUSEAREA(.T.,'SIXCDX',CARQ,CALIAS,.F.)
	    ENDDO
	    FOR NI=1 TO LEN(AIND)
	       CCAMPO:=AIND[NI,1]
	       CIND  :=AIND[NI,2]
	       INDEX ON &(CCAMPO) TAG &(CIND) TO &CARQI
	    NEXT
	    &CALIAS->(DBCLOSEAREA())
	 ENDIF
	 DBUSEAREA(.T.,'SIXCDX',CARQ,CALIAS,.T.)
	 IF !EMPTY(AIND)
	    SET INDEX TO &CARQI
	    DBSETORDER(LEN(AIND))
	    IF INDEXORD()<>LEN(AIND)
	       IF !EMPTY(SELECT(CARQ))
		  &CARQ->(DBCLOSEAREA())
	       ENDIF
	       NCERRIND++
	       BREAK
	    ENDIF
	    CIND:=AIND[1,2]
	    SET ORDER TO TAG &CIND
	 ELSE
	    DBGOTO(1)
	 ENDIF
      ELSE
	 LRET:=.F.
      ENDIF
   RECOVER USING OBJERROR
      IF !EMPTY(SELECT(CARQ))
	 &CARQ->(DBCLOSEAREA())
      ENDIF
      IF (OBJERROR:SUBSYSTEM = "SIXCDX")
	 IF (OBJERROR:SUBCODE = 602)
	    IF (SUBS(OBJERROR:FILENAME,-3) = "CDX")
	       DEL(OBJERROR:FILENAME)
	    ENDIF
	 ENDIF
      ENDIF
      LOOP
   END
   EXIT
ENDDO

ERRORBLOCK(BLASTH)
IF LMEN
   MENS()
ENDIF
RETURN(LRET)
//=====> ate aqui


Obrigado

Enviado: 27 Jul 2006 17:58
por juniorprado
Olá negrão!

Veja uma possibilidade remota, se nao me engano o pack cria um arquivo temporario e repassa todos os registros que nao estao marcados como deletados para esse arquivo, depois ele deleta o arquivo e renomeia esse arquivo temporario para o nome do arquivo real.

Se hd não estiver confiavel ou tiver um servidor com um esquema chato de direitos de acessos pode estar impedindo que esse arquivo seja renomeado.

Nunca vi isso acontecer e é mto esquisito acontecer soh com um arquivo.

Prefiro acreditar que alguem esteja deletando ele.

Aproposito o Eder seu filho que veio aki trabalhar com a gente estah com saudades eheheh

flw cara
O Eder

Enviado: 27 Jul 2006 18:22
por cpaess
ola...

faz o seguinte:

crie outro DBF com os mesmos campos mas com outro nome e tudo que vc inserir no arquivo de pedidos, coloque neste tambem.

Nisso vai saber se esta sendo apagado tb.

Carlos

Re: AJUDA - URGENTE

Enviado: 27 Jul 2006 18:27
por Glauco Cruz Costa
Estava acontecendo a mesma coisa comigo. Então, resolvi eliminar o PACK do programa e comecei a packear manualmente. Só que antes eu fazia uma cópia de segurança.
Meu programa funciona em rede. Eu coloquei uma rotina para que se puder abrir o DBF no modo exclusivo, ou seja, num momento em que ninguém estivesse usando o sistema, o primeiro a abrir, o programa fazia um PACK. Depois, fechava e abria o DBF compartilhado. Após um mês de uso, o DBF perdia seus dados ou grande parte deles. Também, eu cheguei a pensar que alguém estava deletando de sacanagem.
Agora, faço o pack separadamente em um horário em que ninguém esteja usando o programa. Antes, faço uma cópia do DBF. Assim, eu posso conferir se houve algum problema...
Aconcelho-o a fazer o mesmo e testar, também...
Abs.
-:]