Página 1 de 1

Problemas com indices no Harbour ...

Enviado: 04 Mai 2016 21:28
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:

Problemas com indices no Harbour ...

Enviado: 04 Mai 2016 22:14
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,

Problemas com indices no Harbour ...

Enviado: 24 Mai 2016 22:29
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

Problemas com indices no Harbour ...

Enviado: 24 Mai 2016 23:31
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.

Problemas com indices no Harbour ...

Enviado: 25 Mai 2016 21:27
por arcanjoebc
Obrigado, Jairo! Funcionou ...


Everaldo :))