Criar arquivos (DBF e INDICES) em pastas diferentes
Enviado: 14 Fev 2007 08:24
Mocada, to precisando da seguinte ajuda.
Abaixo, esta um exemplo de funcao que uso pra abrir e criar meus arquivos.
Na FUNCAO ABRE() , gostaria que meus DBF ficasse na pasta DADOS(isso ja deu certo) e os INDICES na pasta INDICE(isso nao consegui nem a pau).
Obrigado pela ajuda
/*****************************************************/
FUNCTION MODULO()
LOCAL CARQ
CARQ := 'MODULO.DBF'
AEST := { { 'USULOG' , 'C', 16, 0 } , ;
{ 'MODULO' , 'C', 6, 0 } , ;
{ 'CODERRO' , 'N', 1, 0 } , ;
{ 'TERERRO' , 'C', 14, 0 } }
AIND := {{'USULOG','USULOG'}}
ABRE(CARQ,AEST,AIND,'TERM')
RETURN
/*****************************************************/
FUNCTION ABRE(CARQ,ASTRUCT,AIND,CALIAS)
LOCAL BLASTH,OBJERROR,LRET:=.T.,NI,CCAMPO,CIND
WHILE .T.
CARQI := 'INDICE\'+SUBS(CARQ,1,LEN(CARQ)-3)+"CDX"
CARQD := "DADOS\"+CARQ
IF AIND <> NIL
BEGIN SEQUENCE
IF !FILE(CARQD) .AND. !EMPTY(ASTRUCT)
DBCREATE(CARQD,ASTRUCT,'SIXCDX')
DEL(CARQI)
ELSEIF !FILE(CARQD)
LRET:=.F.
ENDIF
IF FILE(CARQD)
IF !EMPTY(SELECT(CALIAS))
&CALIAS->(DBCLOSEAREA())
ENDIF
IF !FILE(CARQI) .AND. !EMPTY(AIND)
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.F.)
WHILE EMPTY(SELECT(CALIAS))
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.F.)
ENDDO
FOR NI = 1 TO LEN(AIND)
CCAMPO := AIND[NI,1]
CIND := AIND[NI,2]
INDEX ON &(CCAMPO) TAG &(CIND)
NEXT
&CALIAS->(DBCLOSEAREA())
ENDIF
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.T.)
IF !EMPTY(AIND)
CIND := AIND[1,2]
SET ORDER TO TAG &CIND
ELSE
DBGOTO(1)
ENDIF
ELSE
LRET:=.F.
ENDIF
RECOVER USING OBJERROR
IF !EMPTY(SELECT(CAlias))
&CAlias->(DBCLOSEAREA())
ENDIF
IF (OBJERROR:SUBSYSTEM = "SIXCDX")
IF (OBJERROR:SUBCODE = 602)
IF (SUBS(OBJERROR:FILENAME,-3) = "CDX")
DEL(OBJERROR:FILENAME)
ENDIF
ENDIF
ENDIF
LOOP
END
ELSE
IF !EMPTY(SELECT(CAlias))
&CAlias->(DBCLOSEAREA())
endif
IF !FILE(CARQD) .AND. !EMPTY(ASTRUCT)
DBCREATE(CARQD,ASTRUCT,'SIXCDX')
ENDIF
DBUSEAREA(.T.,,CARQD,CALIAS,.T.)
ENDIF
EXIT
ENDDO
IF LMEN
MENS()
ENDIF
RETURN(LRET)
Abaixo, esta um exemplo de funcao que uso pra abrir e criar meus arquivos.
Na FUNCAO ABRE() , gostaria que meus DBF ficasse na pasta DADOS(isso ja deu certo) e os INDICES na pasta INDICE(isso nao consegui nem a pau).
Obrigado pela ajuda
/*****************************************************/
FUNCTION MODULO()
LOCAL CARQ
CARQ := 'MODULO.DBF'
AEST := { { 'USULOG' , 'C', 16, 0 } , ;
{ 'MODULO' , 'C', 6, 0 } , ;
{ 'CODERRO' , 'N', 1, 0 } , ;
{ 'TERERRO' , 'C', 14, 0 } }
AIND := {{'USULOG','USULOG'}}
ABRE(CARQ,AEST,AIND,'TERM')
RETURN
/*****************************************************/
FUNCTION ABRE(CARQ,ASTRUCT,AIND,CALIAS)
LOCAL BLASTH,OBJERROR,LRET:=.T.,NI,CCAMPO,CIND
WHILE .T.
CARQI := 'INDICE\'+SUBS(CARQ,1,LEN(CARQ)-3)+"CDX"
CARQD := "DADOS\"+CARQ
IF AIND <> NIL
BEGIN SEQUENCE
IF !FILE(CARQD) .AND. !EMPTY(ASTRUCT)
DBCREATE(CARQD,ASTRUCT,'SIXCDX')
DEL(CARQI)
ELSEIF !FILE(CARQD)
LRET:=.F.
ENDIF
IF FILE(CARQD)
IF !EMPTY(SELECT(CALIAS))
&CALIAS->(DBCLOSEAREA())
ENDIF
IF !FILE(CARQI) .AND. !EMPTY(AIND)
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.F.)
WHILE EMPTY(SELECT(CALIAS))
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.F.)
ENDDO
FOR NI = 1 TO LEN(AIND)
CCAMPO := AIND[NI,1]
CIND := AIND[NI,2]
INDEX ON &(CCAMPO) TAG &(CIND)
NEXT
&CALIAS->(DBCLOSEAREA())
ENDIF
DBUSEAREA(.T.,'SIXCDX',CARQD,CALIAS,.T.)
IF !EMPTY(AIND)
CIND := AIND[1,2]
SET ORDER TO TAG &CIND
ELSE
DBGOTO(1)
ENDIF
ELSE
LRET:=.F.
ENDIF
RECOVER USING OBJERROR
IF !EMPTY(SELECT(CAlias))
&CAlias->(DBCLOSEAREA())
ENDIF
IF (OBJERROR:SUBSYSTEM = "SIXCDX")
IF (OBJERROR:SUBCODE = 602)
IF (SUBS(OBJERROR:FILENAME,-3) = "CDX")
DEL(OBJERROR:FILENAME)
ENDIF
ENDIF
ENDIF
LOOP
END
ELSE
IF !EMPTY(SELECT(CAlias))
&CAlias->(DBCLOSEAREA())
endif
IF !FILE(CARQD) .AND. !EMPTY(ASTRUCT)
DBCREATE(CARQD,ASTRUCT,'SIXCDX')
ENDIF
DBUSEAREA(.T.,,CARQD,CALIAS,.T.)
ENDIF
EXIT
ENDDO
IF LMEN
MENS()
ENDIF
RETURN(LRET)