jfaguiar Posted January 22, 2018 Report Share Posted January 22, 2018 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 ) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 22, 2018 Report Share Posted January 22, 2018 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. Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 23, 2018 Author Report Share Posted January 23, 2018 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 Quote Link to comment Share on other sites More sharing options...
MatheusFarias Posted January 23, 2018 Report Share Posted January 23, 2018 mostra teu index, no index on deve ter algo relacioando a isso Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 23, 2018 Report Share Posted January 23, 2018 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 */ Quote Link to comment Share on other sites More sharing options...
mkyx Posted January 23, 2018 Report Share Posted January 23, 2018 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. Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 23, 2018 Author Report Share Posted January 23, 2018 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.) *************************************************************************** Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 23, 2018 Report Share Posted January 23, 2018 João, faça um DEMO simples reproduzindo o problema, ZIP e poste no 4shared para download. Tá dificil te ajudar, pois o código é muito ruim. abs. Quote Link to comment Share on other sites More sharing options...
MatheusFarias Posted January 23, 2018 Report Share Posted January 23, 2018 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++ Quote Link to comment Share on other sites More sharing options...
Theotokos Posted January 23, 2018 Report Share Posted January 23, 2018 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)... Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 24, 2018 Author Report Share Posted January 24, 2018 João, faça um DEMO simples reproduzindo o problema, ZIP e poste no 4shared para download. Tá dificil te ajudar, pois o código é muito ruim. abs. kkkk ah não Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 24, 2018 Author Report Share Posted January 24, 2018 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 :=... Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 24, 2018 Author Report Share Posted January 24, 2018 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. Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 25, 2018 Author Report Share Posted January 25, 2018 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. Quote Link to comment Share on other sites More sharing options...
Theotokos Posted January 25, 2018 Report Share Posted January 25, 2018 INDEX ON BANCO+STR(EMPRESA,2) TAG TBCCOR01 TO TBCCOR INDEX ON DESCRICAO TAG TBCCOR02 TO TBCCOR Mude para: INDEX ON TBCCOR->BANCO+STR(TBCCOR->EMPRESA,2) TAG TBCCOR01 TO TBCCOR INDEX ON TBCCOR->DESCRICAO TAG TBCCOR02 TO TBCCOR jfaguiar 1 Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted January 25, 2018 Author Report Share Posted January 25, 2018 INDEX ON BANCO+STR(EMPRESA,2) TAG TBCCOR01 TO TBCCOR INDEX ON DESCRICAO TAG TBCCOR02 TO TBCCOR Mude para: INDEX ON TBCCOR->BANCO+STR(TBCCOR->EMPRESA,2) TAG TBCCOR01 TO TBCCOR INDEX ON TBCCOR->DESCRICAO TAG TBCCOR02 TO TBCCOR Obrigado amigão. Vou fazer assim Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted February 3, 2018 Author Report Share Posted February 3, 2018 Boa tarde amigos. Substitui por ordListAdd ("TBNFSM") // SET INDEX TO TBNFSM Parece que parou de dar o erro. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.