Página 1 de 1

Criar arq. DBF no Harbour ... problemas ...

Enviado: 16 Fev 2016 14:39
por arcanjoebc
Amigos, estou depois de muito tempo, revendo coisas há muito deixadas para trás. Instalei o pacote "harbour_3.2.0-1_amd64.deb" e suas dependências, no meu Ubuntu 15.10 64 bits. Iniciei fazendo um pequeno exemplo, mas na hora de acrescentar uma rotina de criação da base de daos ".dbf", apareceu uma mensagem que não sei do que se trata, poderiam ajudar-me com essa questão? Abaixo coloco os códigos do pequeno exemplo e a mensagem de erro dada, ok! Desde já, muito obrigado por qualquer solução que me for enviada!

Código: Selecionar todos

*---------------------------------------*
* PROGRAMA   : cli.prg                  *
* AUTOR      : Everaldo Bernardo Cunha  *
* DATA       : 15/02/2016               *
* FINALIDADE : Gerenciar o Sistema      *
*---------------------------------------*
function main ()

opcao = 0

do struc

do while .t.
   setcolor("w/n")
   clear screen
   quadro(1,1,40,140)
   @ 03,43 say "       CADASTRO DE CLIENTES"
   @ 04,43 say "       ======== == ========"
   @ 06,43 say "Incluir ....................... 1"
   @ 08,43 say "Alterar ....................... 2"
   @ 10,43 say "Consultar ..................... 3"
   @ 12,43 say "Excluir ....................... 4"
   @ 14,43 say "Imprimir ...................... 5"
   @ 16,43 say "Sair .......................... 9"
   @ 20,43 say "Opcao .............. #"
   @ 20,64 get opcao picture "9"
   read
   do case
      case opcao = 1
      * do cli01
      case opcao = 2
      * do cli02
      case opcao = 3
      * do cli03
      case opcao = 4
      * do cli04
      case opcao = 5
      * do cli05
      case opcao = 9
         exit
   endcase
enddo
return nil

// ---------------------------------------
function quadro(ri,ci,rf,cf)
@ ri,ci clear to rf,cf
dispbox(ri,ci,rf,cf)
return nil
                           
Prg criação DBF:

Código: Selecionar todos

*---------------------------------------------*
* PROGRAMA    :  struc.prg                    *
* AUTOR       :  Everaldo Bernardo Cunha      *
* DATA        :  15/02/2016                   *
* FINALIDADE  :  Criar base de dados .dbf     *
*---------------------------------------------*

if .not. file("clientes.dbf")
  aDBF := {}
  //
  aAdd(aDBF, {"COD", "N",10,0})
  aAdd(aDBF, {"NOME", "C",30,0})
  aAdd(aDBF, {"NASC", "D",08,0})
  aAdd(aDBF, {"END", "C",35,0})
  aAdd(aDBF, {"CID", "C",35,0})
  aAdd(aDBF, {"CEP", "C",10,0})
  aAdd(aDBF, {"UF", "C",02,0})
  aAdd(aDBF, {"FONE", "C",14,0})
  aAdd(aDBF, {"CPF", "C",14,0})
  aAdd(aDBF, {"PROF", "C",20,0})
  aAdd(aDBF, {"SEXO", "C",01,0})
  aAdd(aDBF, {"EC", "C",01,0})
  aAdd(aDBF, {"OBS", "C",50,0})
  //
  dbCreate("clientes",aDBF)
endif
Mensagem de erro dada no terminal:
everaldo@positivo:~/cli$ harbour cli.prg -n -gh
Harbour 3.2.0dev (r1602051722)
Copyright (c) 1999-2016, http://harbour-project.org/
Compiling 'cli.prg'...
Compiling 'struc.prg'...
struc.prg(8) Error E0001 Statement not allowed outside of procedure or function
1 error

No code generated.
everaldo@positivo:~/cli$

Everaldo

Criar arq. DBF no Harbour ... problemas ...

Enviado: 16 Fev 2016 14:52
por JoséQuintas
O segundo fonte está sem nome.
Coloque PROCEDURE Struc

Criar arq. DBF no Harbour ... problemas ...

Enviado: 16 Fev 2016 18:46
por rmlazzari
Bem, o que o compilador está reclamando é que as linhas a partir de "If .not. file(..." devem estar dentro de uma proc ou func...
Chute de principiante mas... será que esse nome, "struc" não é o problema? Digo, considerando que você já a colocou no .PRG:

Código: Selecionar todos

*---------------------------------------------*
* PROGRAMA  : struc.prg          *
* AUTOR   : Everaldo Bernardo Cunha   *
* DATA    : 15/02/2016         *
* FINALIDADE : Criar base de dados .dbf  *
*---------------------------------------------*

PROCEDURE Struc
if .not. file("clientes.dbf")
 aDBF := {}
 //
 aAdd(aDBF, {"COD", "N",10,0})
 aAdd(aDBF, {"NOME", "C",30,0})
 aAdd(aDBF, {"NASC", "D",08,0})
 aAdd(aDBF, {"END", "C",35,0})
 aAdd(aDBF, {"CID", "C",35,0})
 aAdd(aDBF, {"CEP", "C",10,0})
 aAdd(aDBF, {"UF", "C",02,0})
 aAdd(aDBF, {"FONE", "C",14,0})
 aAdd(aDBF, {"CPF", "C",14,0})
 aAdd(aDBF, {"PROF", "C",20,0})
 aAdd(aDBF, {"SEXO", "C",01,0})
 aAdd(aDBF, {"EC", "C",01,0})
 aAdd(aDBF, {"OBS", "C",50,0})
 //
 dbCreate("clientes",aDBF)
endif
RETURN
É que esse nome, "struc", num compilador em que, se vc escreve "appe blan", ele entende "append blank"...
Eu tentaria mudar para "estrut.prg" e, sei lá... "proc estru" ou "func estru", algo assim. E nunca usaria o mesmo nome para o arquivo .PRG e a proc ou func...

Criar arq. DBF no Harbour ... problemas ...

Enviado: 16 Fev 2016 19:44
por JoséQuintas
O nome do arquivo PRG é desprezado, não faz diferença.
Só vale mesmo o nome interno, em PROCEDURE ou FUNCTION.

Esse é o default do Harbour.
Mas dá pra usar igual no Clipper, e alterar o default pra usar o nome do arquivo PRG.
Não acho interessante fazer isso.

Quanto ao nome, cabe a você decidir.
Inclusive no Harbour não há limite de nome, pode usar até PROCEDURE CriaDbfCliente

Criar arq. DBF no Harbour ... problemas ...

Enviado: 17 Fev 2016 07:26
por ANDRIL
Não me recordo no momento, talvez STRUC seja uma palavra reservada da linguagem, nesse caso não poderá ser utilizada como nome de função ou procedure. Tente mudar o nome da sua função.
Ate+

Criar arq. DBF no Harbour ... problemas ...

Enviado: 17 Fev 2016 11:48
por JoséQuintas
Não, isso tem a ver com compilação -n
Sem o -n, é considerado o nome físico do arquivo PRG. O nome do PRG acaba sendo o nome do módulo.
Esse é o default do Clipper.

Quando se usa -n, o nome físico do PRG é desprezado, então obrigatoriamente tem que declarar PROCEDURE ou FUNCTION dentro do fonte, pro compilador saber qual é o nome do módulo.
Esse é o default do Harbour.
struc.prg(8) Error E0001 Statement not allowed outside of procedure or function
Esse erro significa que tem comando antes de ter colocado PROCEDURE ou FUNCTION.
Justamente o que mencionei acima.
O compilador ficou sem saber que nome dar a esse módulo.

Criar arq. DBF no Harbour ... problemas ...

Enviado: 20 Fev 2016 20:30
por arcanjoebc
Obrigado, José Quintas! Tua dica deu certo, muito obrigado!


Everaldo