Página 2 de 2

Re: problema com transferencia de registros dbf

Enviado: 06 Jun 2009 15:43
por Eolo
Pode, sim. Mas coloque um limite de tentativas e um temporizador entre tentativas, e ainda controle se deu certo na saída do loop.

NETERR() retorna:
.T. = DEU erro
.F. = NÃO deu erro

Código: Selecionar todos

tenta=10 // coloque o valor que achar melhor
espera=10 // coloque o valor que achar melhor
abriu=.F.
do while tenta>0 // tenta 10x e, se não der, aborta
  use arquivo new exclusive
  if neterr() = .F. // aqui é .F. e não .T.
    abriu=.T.
    exit
  endif
  tenta-- // decrementa a variável TENTA
  inkey(espera) // espera 10 segundos para tentar novamente
endo
if abriu=.F.
  * interrompe a rotina
endif
* parte pra indexação...

Re: problema com transferencia de registros dbf

Enviado: 06 Jun 2009 15:46
por alxsts
Olá Glauco!

junto com os discos originais do Clipper 5, vieram vários exemplos de rotinas, incluindo uma para abertura de arquivos em rede, chamada NetUse(). Veja abaixo a versão que modifiquei para meu uso:

Código: Selecionar todos

//------------------------------------------------------------------------------

*  NetUse( <arquivo>, [modo abertura], [tempo segundos], [Alias] ) --> lSuccess


#define     DB_SHARED     .F.
#define     DB_EXLUSIVE   .T.


FUNCTION NetUse( cDatabase, lOpenMode, nSeconds, cAlias )

   LOCAL lForever , nPos

   // verifica parametros
   If Empty( cDatabase )
      Return .F.
   Endif

   lOpenMode := If( Empty( lOpenMode ), DB_SHARED, lOpenMode )
   nSeconds  := If( nSeconds == Nil, 0, nSeconds )
   cAlias    := If( Empty( cAlias ), FileBase( cDataBase ), cAlias )
   //---

   lForever = (nSeconds = 0)

   DO WHILE .T.          
     IF lOpenMode
         USE (cDatabase) EXCLUSIVE NEW Alias (cAlias)
     ELSE
         USE (cDatabase) SHARED NEW Alias (cAlias)
     ENDIF
     IF .NOT. NETERR()          // USE succeeds
        RETURN (.T.)
     ENDIF
     INKEY(1)                 // Wait 1 second
     nSeconds = nSeconds - 1
     if nSeconds < 0

       If Alert( "NÆo foi poss¡vel abrir o arquivo " + cDataBase + ".DBF.;" + ;
                     " (Arquivo em manuten?Æo por outro usu rio).;; " + ;
                     "Deseja tentar novamente?", {" Sim "," NÆo " } ) == 2
          Exit
       Endif

       nSeconds := 5

     Endif
   ENDDO

   RETURN (.F.)                // USE fails
//------------------------------------------------------------------------------
*
*  FileBase( <cFile> ) --> cFileBase
*
*  Extract the eight letter base name from a filename
*
*
FUNCTION FileBase( cFile )

   LOCAL nPos           // Marks the position of the last "\", if any
   LOCAL cFileBase      // Return value containing the filename

   DO CASE
   CASE ( nPos := RAT( "\", cFile )) != 0

      // Strip out full path name leaving only the filename (with
      // extension)
      cFileBase := SUBSTR( cFile, nPos + 1 )

   CASE ( nPos := AT( ":", cFile )) != 0

      // Strip drive letter if cFile contains only drive letter
      // no subdirectories
      cFileBase := SUBSTR( cFile, nPos + 1 )

   OTHERWISE

      // Assume it's already taken care of
      cFileBase := cFile

   ENDCASE

   // Strip out the file extension, if any
   IF ( nPos := AT( ".", cFileBase )) != 0
      cFileBase := SUBSTR( cFileBase, 1, nPos - 1 )
   ENDIF

   RETURN ( cFileBase )
//------------------------------------------------------------------------------

* NetUse( <arquivo>, [modo abertura], [tempo segundos], [Alias] ) --> lSuccess
Exemplo de uso:
Suponha que voce queira abrir um arquivo chamado Tabela, em modo compartilhado, tentando por 5 segundos e com o alias Cliente:

Código: Selecionar todos

IF ! NetUse( "Tabela", .F., 5, "Cliente" )
   RETURN
ENDIF   
Qualquer dúvida é só postar.

[]´s
AlxSts

problema com transferencia de registros dbf

Enviado: 17 Ago 2018 08:41
por Tomaz Edson Linhares
Olá amigos, aproveitando o gancho sobre banco de dados, teria como um arquivo de indice (ntx) ser avaliado se está corrompido antes de ser aberto, sem ter a necessidade de ter que reindexá-lo .

fiz assim:

USE MEU_DBF ALIAS MEU_DBF NEW SHARED /// abre o banco de dados
if ! file ("meu_ntx.ntx") /// verifica se o arquivo de indexes existe
index on .... meu_ntx /// senão ele cria
endif

set index to meu_ntx /// abre o arquivo de index AQUI É QUE DÁ ERRO SE ELE ESTIVER CORROMPIDO


/// Então se esse arquivo existir e ele estiver corrompido, apresenta erro na tela.
/// Não quero reindexar para o sistema não ficar lento.
/// preciso avaliar esse arquivo de indice antes de abrir para evitar erro.
/// se alguem poder me dar uma luz.

problema com transferencia de registros dbf

Enviado: 21 Ago 2018 08:51
por syslink
bom dia Tomaz!
nunca ouvi falar nesse tipo de verificação antes de abrir um .NTX ou .CDX. Mas, se houver uma solução, também gostaria de fazer pra que a gente não fique meio que dependente da situação.

problema com transferencia de registros dbf

Enviado: 21 Ago 2018 14:42
por Toledo
Amigos, dê uma olhada neste tópico, pode ajudar:

https://pctoledo.org/forum/viewto ... =1&t=18836

Uma outra saída seria alterar o arquivo ERRORSYS do Clipper, e verificar se o erro que está ocorrendo é referente a um arquivo de índice corrompido, ai se for, então deletar o arquivo corrompido e criar novamente.

Abraços,

problema com transferencia de registros dbf

Enviado: 30 Jan 2020 13:16
por paolalopez118
Atualmente, estou começando no mundo da programação digital para poder transferir o bdf que eles me enviaram para usar o banco de dados clássico



Assinatura:
Cinecalidade
http://www.cinecalidad.plus

problema com transferencia de registros dbf

Enviado: 31 Jan 2020 11:05
por susviela@bol.com.br
Depois do DBF o primeiro passo em direção aos SGBD é passar por SQLite.

Tem umas dicas boas para quem esta começando no meu Blog, dá uma olhada.


https://programandoxbase.wordpress.com/ ... -classe-i/


#Susviela