Clipper On Line • Ver Tópico - Error DBFNTX/1002 Open error (DOS Error 2)

Error DBFNTX/1002 Open error (DOS Error 2)

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Error DBFNTX/1002 Open error (DOS Error 2)

Mensagempor Pablo César » 19 Mai 2013 08:16

Não achei relatos sobre este erro, por isso decidi abrir novo tópico. Mas se alguma vez topou-se com este erro, indicando DOS Error 2 (arquivo não encontrado) e aponta para o nome do DBT ou FPT, então quer dizer que o arquivo DBF que intenta abrir não possui o arquivo que contém os dados de algum campo MEMO. Aí a solução é criar um novo DBF com um campo MEMO e renomear o arquivo (seja DBT ou FPT, dependendo do caso) para o mesmo nome que o DBF que intentara abrir no começo.

Eu particularmente, sou em contra do uso de campos MEMOs nas estruturas dos DBFs que crio. Em lugar disso, utilizo arquivos textos independentes com nomenclatura (nome de arquivo) que identifique cada registro e o armazeno em pasta exclusiva.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Error DBFNTX/1002 Open error (DOS Error 2)

Mensagempor Pablo César » 19 Mai 2013 13:23

A importância da qualidade é muito importante para ganhar tempo e trabalhar mais seguro. Neste exemplo, muitos de nós já devem ter tido a oportunidade de usar este DBU, no qual precisa ser informado qual é o padrão do DBF em que se deseja trabalhar:
Tela91.PNG
Tela91.PNG (9.24 KiB) Visualizado 3704 vezes

Na minha opinião, se for fornecido o primeiro parâmetro (nome do DBF) na linha de comando para editar o arquivo, este deveria reconhecer automaticamente qual é o padrão do DBF, sem a necessidade de optar uma das três opções e ainda não carregar por erro operacional.

No código fonte do STRU (na seção de Downloads e comentado neste neste tópico)., tem uma rotina que detecta esse padrão de DBF.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Error DBFNTX/1002 Open error (DOS Error 2)

Mensagempor Pablo César » 20 Mai 2013 14:32

Um boa rotina de persistência na abertura de DBFs ajuda muito tanto quanto aos acessos em rede como podem vir a ser complementado com a integridade do arquivo. Por isso exponho um exemplo de como venho empregando a rotina de abertura DBF com auto-reconhecimento do RDD a ser utilizado.

A função DBUSEAREA( [<lNewArea>], [<cDriver>], <cName>, [<xcAlias>], [<lShared>], [<lReadonly>]) utiliza como opção o driver RDD a ser usado. Então nada melhor que utilizar também a rotina de auto-reconhecimento desse driver.

Rotina de abertura de DBFs:
Function Open_Dbf(cDbfName, lUseExclusive, lReadonly, cAlias, cRddName, nTries, lAsk)
Local nTriesOrig, lReturn:=.f., lNewArea:=.t.

DEFAULT lNewArea:=.t.
DEFAULT lReadonly:=.f.
DEFAULT lAsk:=.t.
DEFAULT nTries:=5
DEFAULT cRddName:=GetDbfType(cDbfName,4)

nTriesOrig := nTries
Do While nTries > 0
   DbUseArea(lNewArea,cRddName,cDbfName,cAlias,!lUseExclusive,lReadonly)
   If (!NetErr()) .and. Used()
      lReturn := .t.
      Exit
   Endif
   Inkey(.5)
   nTries--
   If nTries = 0 .and. lAsk
      If MsgRetryCancel("Database is occupied by another user","No access" )
         nTries := nTriesOrig
      Endif
   Endif
Enddo
Return lReturn

Rotina para auto-reconhecimento do tipo do DBF:
#define HEXTABLE        "0123456789ABCDEF"

Function GetDbfType(cDataBase,nRet)
Local nHandle, cDbfHead, cMemoC:="", cMemoD:="", nPos, cRet:=""
Local aMemoC:={"0x02","0x03","0x04","0x30","0x31","0x43","0x63","0x83","0x8B","0x8C","0xCB","0xE5","0xEB","0xF5","0xFB","0x54","0xA7","0xB9","0xE2","0xEF"}
Local aMemoD:={{"FoxBase","","DBFCDX"},;
              {"dBASE III, dBASE IV, dBASE 5, dBASE 7, FoxPro, FoxBASE+","","DBFNTX"},;
              {"dBASE 7","","DBFNTX"},;
              {"Visual FoxPro","FPT","DBFCDX"},;
              {"Visual FoxPro","","DBFCDX"},;
              {"dBASE IV, dBASE 5","","DBFNTX"},;
              {"dBASE IV, dBASE 5","","DBFNTX"},;
              {"dBASE III, FoxBase+, FoxPro","DBT","DBFNTX"},;
              {"dBASE IV, dBASE 5","DBT","DBFNTX"},;
              {"dBASE 7","DBT","DBFNTX"},;
              {"dBASE IV, dBASE 5","DBT","DBFNTX"},;
              {"SMT","SMT","DBFNSX"},;
              {"dBASE IV, dBASE 5","DBT","DBFNTX"},;
              {"FoxPro","FPT","DBFCDX"},;
              {"FoxBase","","DBFCDX"},;
              {"dBASE IV with SQL","DBT","DBFNTX"},;
              {"FoxPro 2.x (or older)","DBT","DBFNTX"},;
              {"FoxBase","","DBFNTX"},;
              {"dBASE III+ or FoxBase+","DBT","DBFNTX"},;
              {"dBASE IV","DBT","DBFNTX"}}

If ( nHandle := FOpen( cDataBase, FO_READ ) ) == - 1
   MsgStop('Can not open file '+Upper(cDataBase)+' for reading !')
   Return ""
Endif
cDbfHead:=Space(4)
FRead( nHandle, @cDbfHead, 4 )
FClose( nHandle )
cMemoC:="0x"+FT_BYT2HEX(SubStr(cDbfHead,1,1))
nPos:=AScan(aMemoC,cMemoC)
If nPos>0
   If nRet=1
      cRet:=cMemoC
   Else
      cRet:=aMemoD[nPos,(nRet-1)]
   Endif
Endif
Return cRet

Function FT_BYT2HEX(cByte,lPlusH)
Local xHexString

Default lPlusH := .f.

If ValType(cByte) == "C"
   xHexString := SubStr( HEXTABLE, Int(Asc(cByte) / 16) + 1, 1 ) ;
               + SubStr( HEXTABLE, Int(Asc(cByte) % 16) + 1, 1 ) ;
               + Iif(lPlusH, "h", '')
Endif
Return xHexString
O código foi escrito em Harbour/HMG, mas pode ser facilmente adaptado para Clipper. Se alguém tiver mais alguma ideia melhor sobre a rotina de persistência será bem vinda !
:)Pos
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Error DBFNTX/1002 Open error (DOS Error 2)

Mensagempor clodoaldomonteiro » 08 Out 2019 11:20

Sei que o Post é antigo, mas agradeço ao Pablo pelo exemplo aqui colocado.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Itamar M. Lins Jr. e 20 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro