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

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

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

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

O segundo fonte está sem nome.
Coloque PROCEDURE Struc
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rmlazzari
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 09 Dez 2013 14:18
Localização: são paulo

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

Mensagem 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...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

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

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

Mensagem por arcanjoebc »

Obrigado, José Quintas! Tua dica deu certo, muito obrigado!


Everaldo
Responder