DOS Error 2

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

DOS Error 2

Mensagem 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!
Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DOS Error 2

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
ssflavio
Usuário Nível 2
Usuário Nível 2
Mensagens: 86
Registrado em: 10 Jul 2008 09:57
Localização: São Paulo / SP

DOS Error 2

Mensagem 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()

Flávio dos Santos Szelbracikowski
ssflavio@osite.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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"), &( "" ), &( "" ), &( "" ), &( "" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DOS Error 2

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DOS Error 2

Mensagem por Itamar M. Lins Jr. »

Olá!
...
Segure a onda Quintas, tenha fé!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem por JoséQuintas »

Editei a mensagem, mas postou em seguida, antes de eu terminar.
Dê uma olhada com as alterações.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DOS Error 2

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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 ) )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DOS Error 2

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

DOS Error 2

Mensagem 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...
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder