Problemas com indices no Harbour ...

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

Moderador: Moderadores

arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Problemas com indices no Harbour ...

Mensagem por arcanjoebc »

Amigos, peguei um exemplo de um livro de DBase III Plus e o estou usando, para construir um pequeno aplicativo, porém, estou tendo problemas com o arquivo de índices cdx ou, presumo eu, com a abertura da Select, vocês podem me ajudar? Desde já, sou-lhes grato por futura ajuda.
Erro na execução do programa:
Erro na execução do programa:
Listagem do erro ocorrido, visto no prompt do Ubuntu 16.04 64 bits:
Listagem do erro ocorrido, visto no prompt do Ubuntu 16.04 64 bits:
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Problemas com indices no Harbour ...

Mensagem por Toledo »

Amigo, faltou postar o código (PRG) onde está ocorrendo o erro.

Tudo indica que você está tentando abrir um arquivo de índice sem ter um arquivo DBF aberto. Então verifique se realmente o arquivo DBF está aberto, principalmente se o arquivo esta sendo aberto em modo exclusivo, pode ocorrer de o arquivo já estar aberto em outra área por um outro usuário na rede.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Problemas com indices no Harbour ...

Mensagem por arcanjoebc »

Olá amigo Toledo! Desculpe meu esquecimento ... aliás, faz um bom tempo que não trabalho mais com xBase e voltar após tanto tempo, trás velhos inconvenientes. Bem, abaixo, coloco a tua disposição o código que cria os bancos de dados, o que cria os indices e o menu principal, onde é apontado o erro acima mencionado no screenshot:

Criação das bases de dados

Código: Selecionar todos

*-----------------------------------------*
* PROGRAMA   : struc.prg                  *
* AUTOR      : Everaldo Bernardo Cunha    *
* DATA       : 28/04/2016                 *
* FINALIDADE : Criar base de dados .dbf   *
*-----------------------------------------*
	 
PROCEDURE struc
IF .NOT. FILE("bcmov.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"LANCAMENTO", "N",04,0})
 aAdd(aDBF, {"BANCO", "N",02,0})
 aAdd(aDBF, {"TIPO", "N",01,0})
 aAdd(aDBF, {"NOMETIPO", "C",14,0})
 aAdd(aDBF, {"VALOR", "N",13,2})
 aAdd(aDBF, {"DATA", "D",08,0})
 aAdd(aDBF, {"DOCUM", "C",10,0})
 aAdd(aDBF, {"HISTORICO", "C",47,0})
 aAdd(aDBF, {"CHEQUE", "C",09,0})
 //
 dbCreate("bcmov",aDBF)
ENDIF

IF .NOT. FILE("bccad.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"CODBCO", "N",02,0})
 aAdd(aDBF, {"NOME", "C",30,0})
 aAdd(aDBF, {"NUMAGE", "N",07,0})
 aAdd(aDBF, {"AGENCIA", "C",25,0})
 aAdd(aDBF, {"CONTA", "N",10,0})
 aAdd(aDBF, {"SALDO", "N",13,2})
 //
 dbCreate("bccad.dbf",aDBF)
ENDIF

IF .NOT. FILE("bcmes.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"LANCAMENTO", "N",04,0})
 aAdd(aDBF, {"BANCO", "N",02,0})
 aAdd(aDBF, {"TIPO", "N",01,0})
 aAdd(aDBF, {"NOMETIPO", "C",14,0})
 aAdd(aDBF, {"VALOR", "N",13,2})
 aAdd(aDBF, {"DATA", "D",08,0})
 aAdd(aDBF, {"DOCUM", "C",10,0})
 aAdd(aDBF, {"HISTORICO", "C",47,0})
 aAdd(aDBF, {"CHEQUE", "C",09,0})
 //
 dbCreate("bcmes",aDBF)
ENDIF

IF .NOT. FILE("bcant.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"LANCAMENTO", "N",04,0})
 aAdd(aDBF, {"BANCO", "N",02,0})
 aAdd(aDBF, {"TIPO", "N",01,0})
 aAdd(aDBF, {"NOMETIPO", "C",14,0})
 aAdd(aDBF, {"VALOR", "N",13,2})
 aAdd(aDBF, {"DATA", "D",08,0})
 aAdd(aDBF, {"DOCUM", "C",10,0})
 aAdd(aDBF, {"HISTORICO", "C",47,0})
 aAdd(aDBF, {"CHEQUE", "C",09,0})
 //
 dbCreate("bcant",aDBF)
ENDIF
RETURN
Criação dos índices:

Código: Selecionar todos

*------------------------------------------*
* PROGRAMA   :  indices.prg                *
* AUTOR      :  Everaldo Bernardo Cunha    *
* DATA       :  29/04/2016                 *
* FINALIDADE :  Criar arquivos de indices  *
*------------------------------------------*
REQUEST DBFNTX
RDDSETDEFAULT("DBFNTX")

IF .NOT. FILE("bcmes.ntx")
  SELE C
  USE bcmes 
  INDEX ON LANCAMENTO TO bcmes
  USE
ENDIF
//
IF .NOT. FILE("bcmesdt.ntx")
  SELE C2
  USE bcmes
  INDEX ON DATA       TO bcmesdt
  USE 
ENDIF
//
IF .NOT. FILE("bccad.ntx")
  SELE B
  USE bccad 
  INDEX ON CODBCO     TO bccad
  USE
ENDIF
//
IF .NOT. FILE("bcmov.ntx")
  SELE A
  USE bcmov
  INDEX ON LANCAMENTO TO bcmov
  USE
ENDIF
//
IF .NOT. FILE("bcmovdt.ntx")
  SELE A2
  USE bcmov
  INDEX ON DATA       TO bcmovdt
  USE
ENDIF
close all
return
Menu principal do sistema:

Código: Selecionar todos

*-------------------------------------------*
* PROGRAMA      : bc.prg                    *
* AUTOR         : EVERALDO BERNARDO CUNHA   *
* DATA          : 28/04/2016                *
* FINALIDADE    : Gerenciar arquivos        *
*-------------------------------------------*
function main ()

SET DATE FRENCH
SET CENTURY ON

REQUEST DBFNTX
RDDSETDEFAULT("DBFNTX")


DO struc
DO indices

CLEAR
@ 01,23 SAY "DATALOGICA"
@ 02,50 SAY "SISTEMA DE CONTROLE DE BANCOS - Versao 1.0"
@ 03,23 SAY "Mensagem [                                "
@ 03,109 SAY "]"
@ 04,00 SAY "_________________________________________________________________________________________________________________________________________________"
CLEAR ALL
SELE C
USE bcmes INDEX bcmes
SELE B
USE bccad INDEX bccad
SELE A
USE bcmov INDEX bcmov

PUBLIC WDATA

WDATA = DATE()
@ 03,34 SAY "Informe a data de hoje."
@ 01,83 SAY "Data: [          ]"
@ 01,90 GET WDATA
READ
@ 03,33 SAY SPACE(60)
WOP = 9
DO WHILE WOP # 0
  @ 05,00 CLEAR
  @ 10,60 SAY "0 - Fim"
  @ 11,60 SAY "1 - Manutencao de Bancos"
  @ 12,60 SAY "2 - Rotina Diaria"
  @ 13,60 SAY "3 - Rotina Mensal"
  WOP = 9
  DO WHILE WOP > 3
    WOP = 0
    @ 16,53 SAY "Entre com sua opcao:" GET WOP PICT "9"
    READ
    IF WOP > 3 
       ENTER = SPACE(01)
       @ 03,34 SAY "OPCAO INVALIDA - TECLE <ENTER>" GET ENTER
       READ
       @ 03,34 SAY SPACE(60)
    ENDIF
  ENDDO
  DO CASE
    CASE WOP = 1
      DO bcmanbco
    CASE WOP = 2
      DO bcrotdia
    CASE WOP = 3
     * DO bcrotmes
  ENDCASE
ENDDO
CLEAR ALL
RETURN
Espero que possas me ajudar com meu dilema, caro amigo! Desde já, sou-lhe grato por qualquer ajuda que puderes me fornecer.


Everaldo
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Problemas com indices no Harbour ...

Mensagem por Jairo Maia »

Olá arcanjoebc,

Só para adiantar:

Na sua função Main() (do menu), troque a linha 12 para cima da linha 7, deixando esse início assim:

Código: Selecionar todos

REQUEST DBFNTX  // <= coloque o Request antes de Main()

function main ()

RDDSETDEFAULT("DBFNTX")
	 
SET DATE FRENCH
SET CENTURY ON
		 
DO struc
DO indices

// demais códigos
Todo REQUEST deve ficar antes da declaração da função Main().

Na função Indices(), altere as seguintes linhas:
de SELE C2 para SELE C
de SELE A2 para SELE A

Ou simplesmente use sempre SELE A ou SELE 0. Isso faz com que a próxima área livre seja selecionada para abrir o arquivo.

Veja se vai funcionar.
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)
arcanjoebc
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 23 Dez 2015 23:58
Localização: Tramandaí/RS

Problemas com indices no Harbour ...

Mensagem por arcanjoebc »

Obrigado, Jairo! Funcionou ...


Everaldo :))
Responder