problema com transferencia de registros dbf

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Re: problema com transferencia de registros dbf

Mensagem 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...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: problema com transferencia de registros dbf

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Tomaz Edson Linhares
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 19 Abr 2016 17:03
Localização: São Gonçalo/RJ

problema com transferencia de registros dbf

Mensagem 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.
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

problema com transferencia de registros dbf

Mensagem 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.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

problema com transferencia de registros dbf

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
paolalopez118
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 30 Jan 2020 12:40
Localização: paris

problema com transferencia de registros dbf

Mensagem 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
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

problema com transferencia de registros dbf

Mensagem 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
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
Responder