Jump to content
Fivewin Brasil

Erro ao abrir indice


jfaguiar

Recommended Posts

Bom dia amigos.

Estou tendo este erro com bastante frequência em um cliente quando executo o comando set index to ...

Devo esclarecer que o índice está corretamente criado e ocorre aleatoriamente.

Alguém teria uma solução para este problema?

 

Application
===========
   Path and name: C:\SISCOM\sgcwgb.exe (32 bits)
   Size: 5,314,560 bytes
   Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20130422)
   FiveWin  Version: FWHX 13.07
   Windows version: 6.1, Build 7601 Service Pack 1

   Time from start: 0 hours 5 mins 6 secs 
   Error occurred at: 22/01/18, 09:39:07
   Error description: Error BASE/1003  Vari vel nÆo existe: BANCO

Stack Calls
===========
   Called from:  => ORDLISTADD( 0 )
   Called from: H:\GRUPOBH\FNTW\tranctb.prg => TRANCTB( 27 )
 

Link to comment
Share on other sites

 

Variavel nao existe: BANCO

e um CAMPO(Field) do BD ou LOCAL, PRIVATE ou PUBLIC?

CHAMADA DE: TRANCTB( 27 )  // mostre o que tem neste .PRG que contem esta linha.
 

É um campo field() normal em um dbf. Estou utilizando five win 13.07 + xHarbour

IF Netuse("TBCCOR","TBCCOR",.T.,.T.,5)
   SET INDEX TO TBCCOR   // ta dando o erro aqui. è dbf/cdx
ENDIF

Obrigado kapiaba

Link to comment
Share on other sites

FUNCTION...
	   FIELD BANCO  // DECLARE, DESDE QUE NAO TENHA MAIS NADA COM ESTE NOME
	// IF Netuse("TBCCOR","TBCCOR",.T.,.T.,5)
//    SET INDEX TO TBCCOR   // ta dando o erro aqui. è dbf/cdx
// ENDIF
	// IF NetUse( "CADASTRO", .T. )  // compartilhado
	// IF NetUse( "CADASTRO", .F. )  // EXCLUSIVO
	
   // CORRETO:
   IF Netuse( "TBCCOR", .T. )
	      // DIGA QUAL AS TAGS DO INDICE
      OrdListAdd( "TABCCOR", "CODIGO", "NOME", "END",             ;
                             "NOME_ARTIS", "CPF",       "CNPJ",            ;
                             "TELEFONE" )
	      SET ORDER TO 01 // 02, 03, 04 ... QUAL A TAG?
	      BROWSE()
	   ELSE
	      MsgStop( "Banco de Dados dos CLIENTES Bloqueado", "Cuidado!" )
	      RETURN NIL
	   ENDIF
	// ------------------------------------------------------------------------
// Programa ..: REDE.PRG
//
// Descri‡Æo..: Fun‡äes de usuario (UDF) para Rede.
//
// Autor .....: Aulaware - A. Canudas
//
// Fun‡äes      Comentarios
// ------------ -----------------------------------------------------------
// NetUse       Abre Uma Tabela em Rede.
// NetCloseAll  Fecha Uma Tabela em Rede.
// NetFileLock  Bloqueia uma tabela aberta e compartilhada.
// NetRecLock   Bloqueio de registros em Rede.
//
// Datas        Comentarios
// ------------ -----------------------------------------------------------
// Maio, 2000
// ------------------------------------------------------------------------
	#Include "FiveWin.Ch"
	// ------------------------------------------------------------------------
// Fun‡Æo.....: NetUse
// Descri‡Æo..: Abre um Arquivo DBF, em modo EXCLUSIVE (.F.), ou SHARED (.T.)
// Par metros : cDbf      -> Nome da Base de Dados
//              lShared   -> SHARED (.T.), EXCLUSIVE (.F.)
// Devolve ..: .T.       -> Si se ha podido abrir.
//             .F.       -> Si no se ha podido abrir.
// ------------------------------------------------------------------------
	FUNCTION NetUse( cDbf, lShared )
	   LOCAL cAlias := cFileName( cDbf )
   LOCAL bAlias := cFileName( cDbf )
	   // CONTROLE DE PARAMETROS DE ENTRADA =====================
   If cDbf = NIL .OR. !File( cDbf + ".DBF" )
      MsgStop( "NOME DO ARQUIVO INCORRETO" + CRLF + CRLF + ;
               "NÃO ACHEI BANCO DE DADOS." + CRLF + CRLF + ;
               cDbf + ".DBF", "ERRO FATAL!!" )
      RETURN( .F. )
   ENDIF
	   IIf( lShared = NIL, lShared := .F., lShared )
   // ======================================================
	   IF lShared = .T.
      USE ( cDbf ) ALIAS ( cAlias := GetNewAlias( cAlias ) ) ;
      VIA "DBFCDX" SHARED NEW
   ELSE
      USE ( cDbf ) ALIAS ( cAlias ) VIA "DBFCDX" EXCLUSIVE NEW
   ENDIF
	   IF !NetErr()
      RETURN( .T. )
   ENDIF
	   // Se nÆo podemos abrir, solicita repeti‡Æo
   MsgStop( "IMPOSSIVEL ABRIR BANCO DE DADOS: " + cAlias + CRLF + ;
            OemToAnsi( "BLOQUEADO POR OUTRO USUµRIO." ), ;
            "ERRO FATAL DE REDE! FECHAR BANCO DE DADOS." )
	RETURN( .F. )
	// ------------------------------------------------------------------------
	// ------------------------------------------------------------------------
// Funci¢n ...: NetCloseAll
// Descripci¢n: Libera todos los ficheros, vuelca posibles datos de memoria
//              a disco duro, y cierra todos los ficheros.
// Par metros : Ninguno.
// Devolve ..: NIL
// ------------------------------------------------------------------------
FUNCTION NetCloseAll()
	   DbUnLockAll()
   DbCommitAll()
   DbCloseAll()
	RETURN NIL
// ------------------------------------------------------------------------
	// ------------------------------------------------------------------------
// Funci¢n ...: NetFileLock
// Descripci¢n: Bloquea un fichero DBF.
// Par metros : Ninguno.
// Devolve ..: .T. -> Si se ha podido bloquear.
//              .F. -> Si no se ha podido bloquear.
// ------------------------------------------------------------------------
FUNCTION NetFileLock()
	   IF fLock()
      RETURN( .T. )
   ENDIF
	   MsgStop( "BANCO DE DADOS " + Alias() + " BLOQUEADO Por Outro Usuario.", ;
            "ERROR DE REDE" )
	RETURN( .F. )
// ------------------------------------------------------------------------
	// ------------------------------------------------------------------------
// Funci¢n ...: NetRecLock
// Descripci¢n: Bloquea un registro de fichero DBF, abierta en modo SHARED.
// Par metros : oDbf -> Objeto DATABASE.
// Devolve ..: .T.  -> Si se ha podido bloquear.
//              .F.  -> Si no se ha podido bloquear.
// ------------------------------------------------------------------------
FUNCTION NetRecLock( oDbf )
	   IF oDbf:RecLock()
      RETURN( .T. )
   ENDIF
	   MsgStop( "REGISTRO BLOQUEADO." + CRLF + ;
            "Outro Usuario o Esta Usando.", "ERRO DE REDE" )
	RETURN( .F. )
// ------------------------------------------------------------------------
	/*
// verificamos que no ocurra error si otros usuario están ocupando la Tabela
	If MiTabela->( neterr() )
   ? "Imposible Agregar Registro en este momento"
    Return Nil
 Else
    // si no ocurrió error, la Tabela está libre para agregarle un registro
    // en blanco, Porem queda bloqueado así que...
    MiTabela->( LastRec( DbUnLock() ) )
    // Con LastRec() nos aseguramos que sea el último registro físico
    // Agora se Podem reemplazar valores
    replace miTabela->campo1 with xvalor1
    replace miTabela->campo2 with ...etc, etc
Endif
	if ( !NETERR() )
    Ferase("MiTabela.cdx")
    INDEX ON MiTabela->nombre1 TAG nom1
    INDEX ON ...etc, etc
 else
    ? "Lo Siento.... Imposible Reindexar Agora"
endif
*/


 

Link to comment
Share on other sites

 

mostra teu index, no index on deve ter algo relacioando a isso

Tá assim Kapiaba:

INDEX ON BANCO+STR(EMPRESA,2) TAG TBCCOR01 TO TBCCOR

INDEX ON DESCRICAO TAG TBCCOR02 TO TBCCOR

A minha função de abertura é essa:

FUNCTION Netuse(ctabela, cAPELID,lcompart,lLeitura,tempo,cIndOpen,lPathvar)
LOCAL sempre // ,lLeitura := lcompart
Default lPathvar := .F. // O 7º parâmetro de Netuse foi criado em 10/08/2015 para controlear path variável
IF SELECT(cAPELID) > 0
   RETURN(.T.)
ENDIF
//
IF lPathvar
   ctabela := cPATHVAR + "\" + ctabela
   IF !cIndOpen == Nil
      cIndOpen := cPATHVAR + "\" + cIndOpen
   endif
ENDIF

sempre := (tempo = 0)
WHILE (sempre .OR. tempo > 0) .AND. INKEY()<>27
   DbUseArea(.T.,cTIPODB,ctabela,cAPELID,lcompart,lLeitura)
   // 1 = Novaarea
   // 2 = Drive (dbfcdx,topconec...
   // 3 = Tabela
   // 4 = Alias
   // 5 = Compartilhado ou nao .T. .F.
   // 6 = Somente Leitura .t. .f.
   IF !NetErr()
      IF !cIndOpen == Nil
         IF !".CDX" $ UPPER(cIndOpen)
            cIndOpen += ".CDX"
         ENDIF
         IF FILE(cIndOpen)
            SET INDEX TO (cIndOpen)
         ELSE
            MsgAlert("Prezado usuário,"+CRLF+;
                     "Um arquivo de índice denominado "+cIndOpen+" não foi encontrado."+CRLF+;
                     "Causa provável: Alguém solicitou uma reorganização da base de dados"+CRLF+;
                     "e não lhe avisou para sair do sistema.")
            ERRORED := .T.
         ENDIF
      ENDIF
      RETURN(.T.)
   ENDIF
   INKEY(1)
   -- Tempo
ENDDO
ERRORED := .T.
MsgStop("O arquivo "+ ctabela +" não está disponível !")
RETURN(.F.)
***************************************************************************
 

Link to comment
Share on other sites

Se teu programa tem alguma variável declarada ou atribuída mesmo que não esteja com nenhum escopo(local,static,public,private) ele com certeza esta criticando isso. 

 

verifica ai se não tem nenhuma atribuição, por exemplo:  banco="algo" ou banco:=" " 

outra coisa é que dependendo da situação o forma como usa o IF nas comparações pode ser entendido como uma atribuição, se recentemente adicionou SET EXACT ON no código isso deve ser um dos motivos.

Se usar o XDevStudio, manda um [CTRL]+[SHIFT]+[F3] e procura nos prgs da sua pasta, ou se não usa baixa o sublime text ou notepad++

 

Link to comment
Share on other sites

 

DBF e WINDOWS, não se combinam,

é um lixo, trabalhar com dbf no Windows, já perdi três clientes bons, por causa dessa mer....a.

Não adianta usar cdx, nem tampouco ntx, este ultimo é o pior.

O correto é mysql.

 

 

Utilizo DBF + CDX com Windows 7, 8, 10.... e sempre funcionou... é claro que as vezes dá algum problema de indice... mas mando reCriar o indice e pronto... nem tudo é perfeito... até mesmo o mysql tem seus problemas... (é claro que melhor)...

Link to comment
Share on other sites

 

Se teu programa tem alguma variável declarada ou atribuída mesmo que não esteja com nenhum escopo(local,static,public,private) ele com certeza esta criticando isso. 

 

verifica ai se não tem nenhuma atribuição, por exemplo:  banco="algo" ou banco:=" " 

outra coisa é que dependendo da situação o forma como usa o IF nas comparações pode ser entendido como uma atribuição, se recentemente adicionou SET EXACT ON no código isso deve ser um dos motivos.

Se usar o XDevStudio, manda um [CTRL]+[SHIFT]+[F3] e procura nos prgs da sua pasta, ou se não usa baixa o sublime text ou notepad++

 

Não. As variáveis de bancos estão comvo nBanco :=...

Link to comment
Share on other sites

 

Se teu programa tem alguma variável declarada ou atribuída mesmo que não esteja com nenhum escopo(local,static,public,private) ele com certeza esta criticando isso. 

 

verifica ai se não tem nenhuma atribuição, por exemplo:  banco="algo" ou banco:=" " 

outra coisa é que dependendo da situação o forma como usa o IF nas comparações pode ser entendido como uma atribuição, se recentemente adicionou SET EXACT ON no código isso deve ser um dos motivos.

Se usar o XDevStudio, manda um [CTRL]+[SHIFT]+[F3] e procura nos prgs da sua pasta, ou se não usa baixa o sublime text ou notepad++

 

rsrs Essa function Netuse foi escrita por Antonio Geraldo da Rocha Vidal. Ele só tem uns sete ou oito livros de programação xbase escrito! Éh, acho que o mysql é o melhor caminho mesmo.

Link to comment
Share on other sites

Caros amigos, não costumo declarar variáveis com o mesmo nome de campos do dbf e trabalho com computadores de desde 09/1982. Sou programador em clipper desde 1990 e depois passei pelo clipper 5.0, 5.01 e 5.2. Antes passei por lottus 123, Quattro-pro, dbase rsrs. Depois do clipper conheci e programei em delphi e vb. Em 04/2007 ingressei no fivewin onde me encontrei. Só gostaria de saber se existe uma solução para essa questão dos dbfs, porque se não houver, irei sim para o mysql ou postgre, bancos que já conheço bem e só preciso me inteirar melhor de como usar esses bancos com essa excelente linguagem de programação, o fw.

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...