Página 1 de 2

DOS Error 2

Enviado: 17 Set 2021 17:40
por ssflavio
Boa tarde amigos!

Depois que migrei o sistema de clipper para harbour, tem ocorrido com muita frequencia o seguinte erro:

Error DBFNTX/1003 Erro de abertura: SGC_RMO6.ntx (DOS Error 2)

é uma rede pequena, com uns 6 usuarios e o servidor é um windows7 com pasta compartilhada

gratidão pela ajuda!

DOS Error 2

Enviado: 17 Set 2021 18:20
por JoséQuintas
Diz que trocou pra Harbour.... por acaso foi pelo antigo 3.0 ?? ele tinha certos problemas referente à pasta atual, e já deve ter uns 10 anos ou mais.

A princípio também, considere que Harbour NÃO é DOS, é Windows.
É importante que o EXE saiba qual é a pasta atual.
Se está criando atalho, confirme que o atalho está indicando a pasta correta, NÃO basta que indique somente o EXE com path completo.
Uma coisa é criar o atalho a partir da pasta: clique da direita, enviar para, área de trabalho criar atalho.
E outra coisa é criar o atalho, procurar, localizar pasta, e indicar o EXE.
Apesar de parecer a mesma coisa, um coloca o PATH da pasta do EXE, e o outro deixa sem pasta default, que pode ser qualquer uma.

Depois disso eu diria:
Considere que não trocou, e veja porque acusa que o arquivo não existe, da mesma forma que faria com o Clipper, exceto pelo fato já mencionado, que Harbour é Windows.

Chamando por BAT também pode ser uma opção de fixar o nome da pasta, mas é desaconselhável, já que BATs estão deixando de existir no Windows há algum tempo, e o console está sendo substituído por: powershell, console Linux ou console Android.

DOS Error 2

Enviado: 17 Set 2021 18:46
por alxsts
Olá!

Talvez um SET DEFAULT ajude...

Código: Selecionar todos

// The example demonstrates the effect of changing the default
// drectory of an xHabour application.

   PROCEDURE Main
      SET PATH TO
      ? File( "Customer.dbf" )         // Result: .F.

      SET DEFAULT TO C:\xhb\data
      ? File( "Customer.dbf" )         // Result: .T.

      SET DEFAULT TO C:                // define default drive
      SET DEFAULT TO ..                // Change to parent directory
      SET DEFAULT TO \                 // Change to root directory

   RETURN

DOS Error 2

Enviado: 17 Set 2021 18:53
por ssflavio
Obridago pelas dicas!
o harbour que estou usando é o 3.2
esse erro não da sempre, somente quando quer
suponha que deu o erro agora, ai ele fecha o sistema. É só abrir o sistema novamente que ele funciona.
será que estou fazendo alguma coisa errada???
vou postar a rotina de abertura dos arquivos

Código: Selecionar todos

function NET_ARQ

parameters PFILE,PINDEX,PEXCLU,APELID

private I,INDICE1,INDICE2,INDICE3,INDICE4,INDICE5,INDICE6,INDICE7,INDICE8,LERRO

APELID = if(type('APELID') # 'C','',APELID)
PINDEX = if(type('PINDEX') # 'C','',PINDEX)
PEXCLU = if(type('PEXCLU') # 'L',.F.,PEXCLU)
LERRO  := st()

sele 0
for I = 1 to 10
   if PEXCLU
      use &PFILE. exclusive alias &APELID.
   else
      use &PFILE. alias &APELID.
   endif
   if used()
      exit
   endif
   format('Tentando abrir '+PFILE,24,'C')
   inkey(1)
next
rt(LERRO)
if used()
   INDICE1 = parse(@PINDEX)
   INDICE2 = parse(@PINDEX)
   INDICE3 = parse(@PINDEX)
   INDICE4 = parse(@PINDEX)
   INDICE5 = parse(@PINDEX)
   INDICE6 = parse(@PINDEX)
   INDICE7 = parse(@PINDEX)
   INDICE8 = parse(@PINDEX)
   set index to &INDICE1.,&INDICE2.,&INDICE3.,&INDICE4.,&INDICE5.,&INDICE6.,&INDICE7.,&INDICE8.
endif
return used()


DOS Error 2

Enviado: 17 Set 2021 19:13
por JoséQuintas
Primeira coisa é reescrever essa rotina de forma decente.
Acho que é um milagre ela funcionar.

Só estas duas possibilidades já deixa esquisito funcionar:

Código: Selecionar todos

USE ARQUIVO ALIAS &("")

SET INDEX TO &("nome1"), &( "" ), &( "" ), &( "" ), &( "" )

DOS Error 2

Enviado: 17 Set 2021 19:15
por Itamar M. Lins Jr.
Olá!

Código: Selecionar todos

APELID = if(type('APELID') # 'C','',APELID)
Use a nova sintaxe do Harbour.

Código: Selecionar todos

hb_default(@APELID,'')
hb_default(@PEXCLU,.F.)
Coloque o caminho do indice:

Código: Selecionar todos

 set index to c:\lugar_do_NTX\arquivo1.ntx, ...
Em outra parte do seu sistema pode está trocando ou mudando de diretório.

Saudações,
Itamar M. Lins Jr.

DOS Error 2

Enviado: 17 Set 2021 19:16
por Itamar M. Lins Jr.
Olá!
...
Segure a onda Quintas, tenha fé!

Saudações,
Itamar M. Lins Jr.

DOS Error 2

Enviado: 17 Set 2021 19:18
por JoséQuintas
Editei a mensagem, mas postou em seguida, antes de eu terminar.
Dê uma olhada com as alterações.

DOS Error 2

Enviado: 17 Set 2021 19:23
por Itamar M. Lins Jr.
Olá!
Acho que é um milagre ela funcionar.
Eu também faço isso... As coisas aqui funcionam por milagres ás vezes. rsrsrsrs

Saudações,
Itamar M. Lins Jr.

DOS Error 2

Enviado: 17 Set 2021 19:35
por JoséQuintas
Funcionaria mesmo no Clipper, mas teria que criar a função hb_Default() no Clipper:

Código: Selecionar todos


FUNCTION NET_ARQ( cDBFName, cIndexList, lExclusive, cAlias )

   LOCAL I, lErro, cNtxName, lIndex := .F.

   hb_Default( @cAlias, "" )
   hb_Default( @cIndexList, "" )
   hb_Default( @lExclusive, .F. )
   lErro := st()

   SELECT 0
   FOR I = 1 to 10
      IF lExclusive
         IF Empty( cAlias )
            USE ( cDbfName ) EXCLUSIVE
         ELSE
            USE ( cDbfName ) EXCLUSIVE ALIAS &( cAlias )
         ENDIF
      ELSE
         IF Empty( cAlias )
            USE ( cDBFName )
         ELSE
            USE ( cDBFName ) ALIAS &( cAlias )
         ENDIF
      ENDIF
      IF used()
         EXIT
      ENDIF
      format( 'Tentando abrir ' + cDBFName, 24, 'C' )
      Inkey(1)
   NEXT

   rt( lErro )

   IF Used()
      DO WHILE ! Empty( cNtxName := Parse( @cIndexList ) )
         dbSetIndex( cNtxName )
         lIndex := .T.
      ENDDO
      IF lIndex
         SET ORDER TO 1
      ENDIF
   ENDIF

   RETURN Used()
A lista de índices, também poderia ser array, o que talvez simplificasse.
NÃO sei o que Parse() faz, provavelmente daria pra substituir por hb_RegExSplit()

Código: Selecionar todos

&( expressao )
Isso permite fazer macro do resultado da expressao, ao invés da variável diretamente.
Evita gambiarra, e no Harbour evita problemas com variáveis LOCAL.
E expande possibilidades:

Código: Selecionar todos

&( "indice" + Str( 1, 1 ) )

DOS Error 2

Enviado: 17 Set 2021 19:45
por JoséQuintas
Se por acaso quiser criar a função hb_Default() no Clipper ou no XHarbour: ( no harbour já tem )

Código: Selecionar todos

FUNCTION hb_Default( xVar, xDefault )

   IF ValType( xVar ) != ValType( xDefault )
       xVar := xDefault
   ENDIF

   RETURN Nil
Se o tipo da variável for diferente do default, o que inclui Nil - nada - assume o default.

Código: Selecionar todos

LOCAL x, y := "a"
   hb_Default( @x, 1 )
   hb_Default( @y, 2 )
Isso vai deixar x=1, porque x não tem conteúdo
Isso vai deixar y=2, porque y contém "a" que não é numérico, e 2 é numérico.

DOS Error 2

Enviado: 17 Set 2021 19:50
por JoséQuintas
Só um comentário extra:

Isso mostra que, se alterar o fonte Clipper pra funcionar no Harbour, ainda vai funcionar em Clipper.
Não precisa ter fontes diferentes pra cada um, é só ajustar o fonte pra funcionar nos dois.
Isso é interessante durante a fase de migração, assim pode voltar pro Clipper ou Harbour na hora que quiser.

Uma vez funcionando 100% em Harbour... aí pode fazer a festa, e não precisa mais ser compatível.

DOS Error 2

Enviado: 17 Set 2021 19:56
por JoséQuintas
Acho que é um milagre ela funcionar.
Isso é pra chamar a atenção de que a rotina precisa ser reescrita/ajustada/melhorada.
Deve usar trocentas vezes essa rotina, e pode ter trocentos problemas.
Se der uma geral, evita trocentos erros que poderiam surgir durante ou depois.

É que tem horas, que se só falando assim pra gente mexer numa rotina antiga, ainda mais quando ela continua funcionando na maioria das vezes... rs

DOS Error 2

Enviado: 17 Set 2021 20:02
por JoséQuintas
Só um comentário, de coisas desse tipo:

Outro dia criei uma função pra retornar valor do SQL.

Código: Selecionar todos

:ReturnValue( "1 + 1" )
Funcionou direito.
Só que comecei a errar, porque oras eu colocava "1+1", oras eu colocava "SELECT 1+1"

Solução:
Alterei o nome da função

Código: Selecionar todos

:ReturnSelect( "1+1" )
E alterei todos os fontes aonde já tinha usado a função.

Deu trabalho? alterar algo que já funcionava e já estava em uso?
Sim... Mas agora não esqueço mais que não precisa o SELECT kkkk

Como eu digo sempre: o fonte é PRA NÓS, e não para o computador.

DOS Error 2

Enviado: 17 Set 2021 20:33
por Jairo Maia
ssflavio escreveu:Depois que migrei o sistema de clipper para harbour, tem ocorrido com muita frequencia o seguinte erro:

Error DBFNTX/1003 Erro de abertura: SGC_RMO6.ntx (DOS Error 2)
Verifique se esse servidor está usando recursos de economia de energia. Se estiver, desative. Servidores não podem usar recursos que deixam o HDD desligar ou ficar em soneca, no primeiro momento ocorre exatamente o que relatou, depois ao tentar novamente o HDD já acordou e dá certo. Verifique se não é isso...