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:
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