Página 1 de 2

Workarea not indexed DBFNSX/1020

Enviado: 23 Mar 2010 20:18
por Alexandre Silva
Vi uma postagem aqui no Forum clipper sobre esse problema Workarea not indexed DBFNSX/1020
mas nao teve solucao..
Tenho o mesmo problema.. O erro só acontece em 2 computadores do chao de Fabrica (sao Thin Client)
no resto funciona Normal..Isso começou acontecer há um mes.. antes nao acontecia..

Colocando a funcao Indexord() vi que realmente na hora no erro nao há indices aberto para o Arquivo..
Nao entendo porque nos outros 5 computadoes nao acontece..


Error DBFNSX/1020 Workarea not indexed
User:_apontamento1_
Arq:PRODCOR Indice: 0
Called from DBSEEK(0)
Called from DISTRIREF(0)
Called from SITUPROD(0)
Called from RPCP(0)
Called from LOJA(0)

Agradeço qualquer retorno..
Obrigado :(

Workarea not indexed DBFNSX/1020

Enviado: 23 Mar 2010 21:04
por Pablo César
Pode ser por falta de setar o ambiente. SET CLIPPER=200 (por exemplo) ou até mesmo no CONFIG.NT FILES=90 ou BUFFERS=60 eu sempre coloco e dá certo !

Re: Workarea not indexed DBFNSX/1020

Enviado: 23 Mar 2010 21:22
por Alexandre Silva
Obrigado..
Vou ver mas isso é estranho pois nestes 2 computadores (thin Client) o C:\windows\system32\congig.nt é o mesmo do servidor que já esta setado files=161...
Nao uso o set clipper pois no Blinker já tem uma clausula para isso..

Voce saberia uma funcao que pega o numero maximo de arquivos que podem ser abertos ??

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 09:19
por gvc
Verifique se na linha que vc esta tendo o erro, qual é a ordem da área de trabalho. Seu usuário pode estar entrando em alguma opção que muda para order 0 (zero) e depois entra nessa opção que esta dando problema.
Verifique tb se a ordem que vc esta colocando existe mesmo. Ex. dbsetorder(5) e não existe essa tag/arquivo de indice.

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 12:49
por Alexandre Silva
Como disse no post esse erro esta acontecendo em 2 computadores (Terminais Thin Client)
Quanto a mudar a ordem pra 0, nao tem essa possibilidade...
Se acessado de outros computadores (as mesmas rotinas) nao acontece o erro..
O que constatei é que sao varias rotinas e varios arquivos.. nao é sempre no mesmo arquivo..
sempre na hora do dbseek()
eu gravo os erros em um txt e constatei que realmente na hora do erro o indexord() está 0.
mas nao tem como isso acontecer pois a funcao que abre o arquivo sempre abre os indices junto..

* Arquivo pra compilacao..

Código: Selecionar todos

BLINKER EXECUTABLE  COMPRESS 1
BLINKER EXECUTABLE  CLIPPER  F161;R40
BLINKER EXECUTABLE  NODELETE
BLINKER INCREMENTAL OFF
BLINKER OVERLAY     OPSIZE    0
BLINKER PROCEDURE   DEPTH    60
BLINKER EXECUTABLE  EXTEND
NOBELL
#####################################
# BLINKER Libs para  CLIPPER 5.2
Lib DbfNSX.lib      # Lib do Hiper Six
LIB blxClp52.lib
LIB LL
LIB LFN
LIB NANFOR
LIB CPMI
lib minhalib.lib
BEGINAREA
   file loja
   file \clipper5\obj\timeslic.obj
   file \clipper5\obj\Nsx_ntx.obj             
   file loja1
   file loja1lj
   file loja1mv
   file loja1mp
   file loja1co
   file loja3r
   file loja3dup
   file loja3ch
   file loja3cx
   file loja6
   file funcoes
ENDAREA
OUTPUT loja.exe

[b]* LISTA de ERROS[/b]
PS: Os caracteres estanhos ai sao linha do box

ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:INSUMO  Indice:         0                              º
³   Called from DBSEEK(0)                                       º
³   Called from PEGINSUMO(0)                                    º
³   Called from (b)MMOVATEL(0)                                  º
³   Called from obj:_FREEZE(0)                                  º
³   Called from MMOVATEL(0)                                     º
³   Called from MANUATEL(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:BD_CORES  Indice:         0                            º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from CARGA_BDDE(0)                                   º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from CARGAPROD(0)                                    º
³   Called from CONSOP(0)                                       º
³   Called from MANUOP(0)                                       º
³   Called from MENUOP(0)                                       º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:INSUMO  Indice:         0                              º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from CARGAFT(0)                                      º
³   Called from MINFO2(0)                                       º
³   Called from MINFO(0)                                        º
³   Called from (b)LOJA(0)                                      º
³   Called from INKEYWAIT(0)                                    º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:MOVATREF  Indice:         0                            º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from PRECOATEL(0)                                    º
³   Called from INCMOVATEL(0)                                   º
³   Called from MMOVATEL(0)                                     º
³   Called from MANUATEL(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento2_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:FICHAD  Indice:         0                              º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from MINFO2(0)                                       º
³   Called from MINFO(0)                                        º
³   Called from (b)LOJA(0)                                      º
³   Called from INKEYWAIT(0)                                    º
³   Called from MATRIZINJ(0)                                    º
³   Called from MENUINJ(0)                                      º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ


ÃÄÄ> Error DBFNSX/1020  Workarea not indexed                    º
ÃÄÄ> Micro:GALILEU  User:_apontamento1_                         º
ÃÄÄ> DADOS\SISTEMA\FABRICA\loja.exe                             º
ÃÄÄ> Arq:PRODCOR  Indice:         0                             º
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pilha de processos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
³   Called from DBSEEK(0)                                       º
³   Called from DISTRIREF(0)                                    º
³   Called from SITUPROD(0)                                     º
³   Called from RPCP(0)                                         º
³   Called from LOJA(0)                                         º


---
Nota da Moderação (Maligno):
Inclua código entre as tags de indentação. Repetindo: Inclua código entre as tags de indentação. Repetindo: Inclua código entre as tags de indentação. E só para não deixar que o assunto caia no esquecimento: por favor, não deixe de usar as tags de indentação de código. Obrigado. :)

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 16:57
por gvc
Faça um módulo de teste dentro do seu sistema com o seguinte:
- Abra todos os arquivos com os seus respectivos indices.
- Pegue uma das áreas e verifique qual o arquivo e qual é o indice atual.
- Use o Seek/DBSeek para fazer uma procura nessa área.
- Mude para a ordem seguinte.
- Faça a pesquisa usando a nova chave.
- Mude para a área seguinte e repita o processo (ordem, pesquisa).

Rode nas maquinas normais e nas que estão dando problema.
Isso vai confirmar que a área esta aberta e se o indice tb.

Eu não lembro, tb nunca usei o RDD DBFNSX. Se ele é como o CDX vc terá que correr todas as tag´s.

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 18:00
por Alexandre Silva
Agradeço a idéia..
Mas isto só vai comprovar o que já sei.. nesses 2 computadores (thin client) em algum momento nao se sabe porque.. o sistema abre apenas o arquivo e nao abre os indices.. (já que o indexord está 0 (zero)
Entao o erro acontece...

Entao a Unica questão é: Porque nesses terminais o sistema se comporta assim ??? (Memoria ? Configuraçao ? , etc) Nao sei se outros aqui no Forum tem Terminais Thin Client.

PS: ThinClient sao como uma CPU sem HD, conectados em rede, diretamento ao servidor..

No aguardo

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 20:40
por alxsts
Olá!

Caro Alexandre:
- não confie no BLinker para setar as variáveis de ambiente. Configure você mesmo no Config e Autoexec.Nt (ou pelo Windows) de cada máquina. Parece que em um dado momento (o da abertura de um índice, faltam file handlers.
- se isso não funcionar, pode ser algum .DBF corrompido
- pode ser também problema de rede. A tua rede é sem fio? Com fio? Qual a distancia entre o servidor e os Thin Clients[/]? O cabeamento/placas é novo? Não tem cabos dobrados ou sob algum objeto que os comprima? Dê uma limpada nos conectores dos cabos de rede, se for a cabo, e nos contatos das placas de rede.

Desculpe pelo interrogatório e boa sorte!

Re: Workarea not indexed DBFNSX/1020

Enviado: 24 Mar 2010 20:49
por Alexandre Silva
Ja setei as variaveis nos arquivos autoexec.nt e config.nt
Nao é arquivo corrompido porque acontece em mais do que um arquivo..
Até este ponto o erro permance..

A rede é com fio.. vou conversar com o pessoal responsavel pela rede...
quem sabe ?

Re: Workarea not indexed DBFNSX/1020

Enviado: 26 Mar 2010 13:26
por Alexandre Silva
Infelizmente o erro permanece..

Re: Workarea not indexed DBFNSX/1020

Enviado: 26 Mar 2010 22:05
por alxsts
Olá!

O importante é persistir e não desistir...

Por via das dúvidas, compile o programa anexo e rode na pasta onde estão as tuas tabelas. Vamos ver se detecta algo.

Código: Selecionar todos

// -------------------------------------------------------------------------------------
//
//   TBCheck.Prg - Alexandre Santos - 26-03-2010
//   Compilar ===> Clipper TBCheck /N
//
//--------------------------------------------------------------------------------------
#include   "Box.Ch"
#include   "SetCurs.Ch"
#include   "Directry.Ch"

PROCEDURE TbCheck()

   LOCAL aFiles, nLen, nPos, aErr, nRetCode, nCursor

   nCursor := SetCursor( SC_NONE )
   SetColor( "W+/W" )

   CLS
   DispBox( 0,0,MaxRow() - 1, MaxCol(), B_SINGLE + " " )

   BEGIN SEQUENCE

      nRetCode := Alert( "Este programa verificará a integridade de seus arquivos DBF/DBT na pasta corrente." + ;
                 "Deseja continuar?", { "Sim", "Nao" }, "W+/B" )
      IF nRetCode != 1
         BREAK
      ENDIF

      aFiles := Directory( "*.DBF" )

      IF Empty( aFiles )
         Alert( "Não foram encontrados arquivos DBF na pasta corrente.",, "W+/B" )
         BREAK
      ENDIF

      aErr := {}

      nLen := Len( aFiles )

      FOR nPos := 1 TO nLen
         @ MaxRow(), 1 Say PadR( "Processando arquivo " + aFiles[ nPos ][ F_NAME ] + ". Aguarde...", 70 )

         nRetCode := ValidDBF( FileBase( aFiles[ nPos ][ F_NAME ] ) )

         IF nRetCode != 0
            AAdd( aErr, " " + aFiles[ nPos ][ F_NAME ] + " - " + MsgDecode( nRetCode ) )
         ENDIF
      NEXT

      @ MaxRow(), 1 Say PadR( LTrim( Str( nLen ) ) + " arquivos analisados.", 70 )

      IF Len( aErr ) == 0
         Alert( "Fim de processamento.;Nenhum erro foi encontrado.",, "W+/B" )
      ELSE
         MsgShow( aErr )
      ENDIF
   END SEQUENCE

   SetCursor( nCursor )
   SetPos( 0, 0 )

   RETURN
//--------------------------------------------------------------------------
//     Testar se o DBF a ser aberto é válido.
//
//        0 - Everything ok
//       -1 - File is corrupt
//       -2 - File does not exist
//       -3 - DBF file is set to read only
//       -4 - Memo file is missing
//       >0 - A DOS error
//        2 - File not found
//        3 - Path not found
//        4 - Too many files open
//        5 - Access denied
//        6 - Invalid handle
//        8 - Insufficient memory
//       15 - Invalid drive specified
//       19 - Attempted to write to a write-protected
//       21 - Drive not ready
//       23 - Data CRC error
//       29 - Write fault
//       30 - Read fault
//       32 - Sharing violation
//       33 - Lock Violation
//
//   Exemplo:  If ValidDBF( <xcFile>) != 0
//                Alert( <xcFile> +  " : " <cMessage> )
//             Endif
//
//--------------------------------------------------------------------------
Function ValidDbf( cFile )

       #define VALID_SIGNATURE_BYTES {   3, 131, 139, 245 }
       #define DBT_FILE_NEEDED_BYTES { 131, 139, 245      }
       #define MEMO_FILE_EXTENSIONS  { "DBT", "DPT", "FPT" }

       #include "SET.CH"
       #include "FILEIO.CH"

       Local cDir    := Set(_SET_DEFAULT)
       Local cBuf    := Space( 12 )
       Local nSign   := 0
       Local nReturn := 0
       Local nBlocks := 0
       Local nSize   := 0
       Local nRecs   := 0
       Local nRecSize:= 0
       Local nOffset := 0
       Local x
       Local nHandle

       nHandle := FOpen( cDir + cFile + ;
                    If( At( ".", Upper( cFile ) ) > 0, "", ".DBF" ), FO_READWRITE + FO_SHARED )

       If nHandle != -1
          FRead( nHandle, @cBuf, 12 )
          nSize := FSeek(nHandle, 0, FS_END )
          FClose( nHandle )
          nSign := Asc( cBuf )
          If Ascan( VALID_SIGNATURE_BYTES, nSign ) > 0

             nRecs    := Bin2l( Subs( cBuf,  5, 4 ) )
             nRecSize := Bin2w( Subs( cBuf, 11, 2 ) )
             nOffset  := Bin2w( Subs( cBuf,  9, 2 ) )

             If nRecs > 0
                nReturn := If( Abs( ( nRecs * nRecSize ) + nOffset - nSize ) < 3, 0, -1 )
             Else
                nReturn := If( nOffset <= nSize + 1, 0, -1 )
             Endif
          Else
             nReturn := -1
          Endif

          If nReturn == 0
             If ( x := Ascan( DBT_FILE_NEEDED_BYTES, nSign ) ) > 0
                nReturn := -4
                nHandle := FOpen( cdir + cFile + "." + MEMO_FILE_EXTENSIONS[ x ], FO_READWRITE )
                If nHandle != -1
                   If MEMO_FILE_EXTENSIONS[ x ] == "DBT"
                      cBuf    := Space( 4 )
                      FRead( nHandle, @cBuf, 4 )
                      nSize   := FSeek( nHandle, 0, FS_END )
                      nBlocks := Bin2l( cBuf ) * 512
                      If nSize <= ( nBlocks + 1 ) .and. nSize > ( nBlocks - 512 )
                         nReturn := 0
                      Endif
                      // Movi para depois do segundo Endif abaixo...
                      // FClose( nHandle )
                   Else
                      nReturn := 0
                   Endif
                // Para clareza no cod retorno, se não encontrou o Memo associado, retorna -4;
                // de outra forma retorna FError()
                ElseIf FError() != 2
                   nReturn := FError()
                Endif
                FClose( nHandle )
             Endif
          Endif
       Else
          If Ferror() == 5
             nReturn := -3
          Else
             nReturn := Ferror()
          Endif
       Endif
    Return nReturn
//------------------------------------------------------------------------------
STATIC FUNCTION MsgDecode( nErr )

   LOCAL nPos

   STATIC aMsg

   IF aMsg == NIL
      aMsg := {}
      AAdd( aMsg, { -1, "File is corrupt" } )
      AAdd( aMsg, { -2, "File does not exist" } )
      AAdd( aMsg, { -3, "DBF file is set to read only" } )
      AAdd( aMsg, { -4, "Memo file is missing" } )
      AAdd( aMsg, {  2, "File not found" } )
      AAdd( aMsg, {  3, "Path not found" } )
      AAdd( aMsg, {  4, "Too many files open" } )
      AAdd( aMsg, {  5, "Access denied" } )
      AAdd( aMsg, {  6, "Invalid handle" } )
      AAdd( aMsg, {  8, "Insufficient memory" } )
      AAdd( aMsg, { 15, "Invalid drive specified" } )
      AAdd( aMsg, { 19, "Attempted to write to a write-protected" } )
      AAdd( aMsg, { 21, "Drive not ready" } )
      AAdd( aMsg, { 23, "Data CRC error" } )
      AAdd( aMsg, { 29, "Write fault" } )
      AAdd( aMsg, { 30, "Read fault" } )
      AAdd( aMsg, { 32, "Sharing violation" } )
      AAdd( aMsg, { 33, "Lock Violation" } )
   ENDIF

   nPos := AScan( aMsg, { |e| e[1] == nErr } )

   RETURN If( nPos > 0, aMsg[ nPos][2], "Erro desconhecido" )
//------------------------------------------------------------------------------
STATIC PROCEDURE MsgShow( aErr )

   LOCAL nChoice := -1, cColor := SetColor( "W+/W, W+/N" )

   SetCursor( SC_NONE )

   DispBox( 4,5,20,65, B_SINGLE )

   @ 4, 7 Say " Erros encontrados: " Color "W+/R"
   @ 20, 7 Say " <Esc> para sair " Color "W+/W"

   WHILE ( nChoice := Achoice( 6, 6, 19, 64, aErr, .T. ) ) != 0
   ENDDO

   SetColor( cColor )

   RETURN
//------------------------------------------------------------------------------
/***
*
*  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 )
//------------------------------------------------------------------------------

Re: Workarea not indexed DBFNSX/1020

Enviado: 27 Mar 2010 15:00
por jorge andrade
Bom dia,

Todas as respostas são válidas, inclusive esta última rotina é de grande valia, mas eu acho que o problema do meu amigo é outro, pode ser que ele esteja usando arquivos de índices dinamico, e estes podem estar sendo fechados/deletandos; sem que ele perceba por alguma função e também, como ele está rodando o programa numa estação BURRA, isso significa que estes arquivos de índices estão sendo criados/armazenados no servidor, talvez até o usuário que está executando o programa não tenha autoridade de criá-lo ou abri-lo, e se ele não tiver uma rotina de erro que informe isso, pode passar batido.
Arquivos de indíces criados de forma exclusiva, podem ser detonados a quarquer momento pelo usuário criador, portanto, verique todas as alternativas, pois já tive este tipo de problema e após queimar a MUFA, descobrir que eu fechava os arquivos de índices, principalmente os dinamicos, numa deteminada função sem perceber, e isso, não era constante, pois o uso de determinadas funções podem ser em determinadas rotinas.

[]s,

Re: Workarea not indexed DBFNSX/1020

Enviado: 27 Mar 2010 15:57
por Alexandre Silva
Jorge,
Acho que o sua colocaçao é a mais correta..até passei o programa que verifica a integridade. e deu tudo ok.
Essa questao dos indices serem apagados é que nao entendo.. acho que os indices nao sao apagados
em nenhum momento as rotinas fazem isso, essa opcao é restrita ao supervisor..

No meu caso todos os nomes de arquivos e nomes dos indices sao carregados no inicio do sistema em uma matriz.
definina como Static, entao pode ser que em algum momento esses nomes de indices nao sejam mais encontrados. Eu digo, nome porque os arquivos nsx estao lá..
Pode ser que essa matriz, por falta de memoria ? , se perca, fazendo com que quando acionada para abrir um arquivo e seus indices na sejam encontrados..

Nao sei se tem uma forma de verifcar isso.. alguma funcao ??

A duas estaçaos (chao de fabrica) acessam o servidor via WTS, com limitacoes de seguranca..
* Em outras estacoes isso nao acontece..

Vou ver com o pessoal de rede...
Por enquanto agradeco..

Re: Workarea not indexed DBFNSX/1020

Enviado: 27 Mar 2010 21:55
por rochinha
Amiguinho,

Estes problemas também podem ocorrer se caso uma tabela esteja sendo aberta em modo exclusivo ou um filelock/flock perdido sem que voce perceba por alguma falha no programa.

Outra coisa é que voce esta usando TS e setando o servidor para FILES, quando voce seta o servidor para FILES=200 não quer dizer que a maquina 1 vai ter FILES=200 e a maquina 2 FILES=200, pois o servidor esta se dividindo em processamentos e recursos para permitir as sessões.

Voce usa outros indices que não os .NTX portanto voce deve sacar de utilizar indices BAG desta forma voce diminui o numero de indices na memória, portanto melhora as aberturas.

Por enquanto em quanto voce não faz isto, aumente o tamanho de FILES para o máximo.

Eu até aposto em outros programas abrindo suas tabelas, como planilhas e assim travando seu programa, mas...

Re: Workarea not indexed DBFNSX/1020

Enviado: 30 Mar 2010 00:25
por Alexandre Silva
Oi..
tenho certeza que nao é file lock
Também nao uso NTX..
Aumentei o Files no script de LInk para 255 e também coloquei set clipper=f:255 no autoexex.nt
O Erro permanece..
Quero alertar para o seguite:
1- Acontece só nos Thin Client. Acontece em varios arquivos e em varias rotinas..
As vezes no primeiro arquivo que é aberto na entrada..
2- Esse erro nao acontecia até o mes passado, ai a licenca dos Thin Client experiou e o pessoal responsavel pela area de hardware andou "reinstalando" os thin client.

Agradeco a todas as respostas aqui postadas, mas o erro permace..