Página 1 de 1

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 17:48
por ssflavio
Boa tarde a todos!

Estou convertendo meu sistema clipper 5.2 para harbour, depois de muitas tentativas e de muita consulta aqui no forum consegui criar o executável.
O problema é que ele não reconhece o nome dos campos do arquivo aberto, vou dar um exemplo bem simples:
estrutura do arquivo TESTE.DBF
CODIGO Caracter 6
PRODUTO Caracter 50

use TESTE alias TST new
CODPRO := CODIGO (desta maneira dá o erro)
CODPRO := TST->CODIGO (desta maneira não da erro)


==> utilizo as seguintes chaves de compilação: /w3 /es2 /v /a /b /m /v /n2 /w0

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 18:53
por MSDN
Vc mesmo respondeu sua pergunta, o Clipper aceita qualquer coisa, o Harbour sem esses parâmetros, é quase igual tbem, mas com os parâmetros que vc usa, ele faz uma checagem rigorosa, por isso aponta erro.

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 19:39
por ssflavio
obrigado pela ajuda, mas não tem como ficar igual ao clipper?
o sistema é muito grande e na maioria das vezes não é utilizada a referência do ALIAS
talvez se tirasse alguma das chaves ou adicionasse alguma???

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 19:49
por JoséQuintas
ssflavio escreveu:obrigado pela ajuda, mas não tem como ficar igual ao clipper?
Na verdade É igual o Clipper, seus comandos é que bagunçaram tudo.
Foi resolver uma coisa, e piorou mais ainda.
Confira seus parâmetros, e retire tudo que não interessa.
Esses mesmos parâmetros no Clipper iam causar o mesmo erro, então..... só pode ter acrescentado algo sem saber direito para o que servia.

Código: Selecionar todos

d:\>Harbour


Harbour 3.4.0dev (1662d538b6) (2019-01-28 19:13)
Copyright (c) 1999-2019, https://github.com/JoseQuintas/harbour34/

Syntax:  harbour <file[s][.prg]|@file> [options]

Options:  -a               automatic memvar declaration
          -b               debug info
          -build           display detailed version info
          -credits         display credits
          -d<id>[=<val>]   #define <id>
          -es[<level>]     set exit severity
          -fn[:[l|u]|-]    set filename casing (l=lower u=upper)
          -fd[:[l|u]|-]    set directory casing (l=lower u=upper)
          -fp[:<char>]     set path separator
          -fs[-]           turn filename space trimming on or off (default)
          -g<type>         output type generated is <type> (see below)
          -gc[<type>]      output type: C source (.c) (default)
                           <type>: 0=compact (default) 1=normal 2=verbose
                                   3=generate real C code
          -gh              output type: Harbour Portable Object (.hrb)
          -gd[.<destext>]  generate dependencies list into (.d) file
          -ge[<mode>]      error output <mode>: 0=Clipper (default)
                                                1=IDE friendly
          -i<path>         #include file search path
          -i[-|+]          disable/enable support for INCLUDE envvar
          -j[<file>]       generate i18n gettext file (.pot)
          -k               compilation mode (type -k? for more data)
          -l               suppress line number information
          -m               compile module only
          -n[<type>]       no implicit starting procedure
                           <type>: 0=no implicit starting procedure
                                   1=no starting procedure at all
                                   2=add starting procedure if necessary
          -o<path>         object file drive and/or path
          -p[<path>]       generate pre-processed output (.ppo) file
          -p+              generate pre-processor trace (.ppt) file
          -q               quiet
          -q0              quiet and don't display program header
          -q2              disable all output messages
          -ql              hide line counter gauge
          -r:<max>         set maximum number of preprocessor iterations
          -s[m]            syntax check only [minimal for dependencies list]
          -u[<file>]       use command def set in <file> (or none)
          -u+<file>        add command def set from <file>
          -undef:<id>      #undef <id>
          -v               variables are assumed M->
          -w[<level>]      set warning level number (0..3, default 1)
          -z               suppress shortcutting (.and. & .or.)
          @<file>          compile list of modules in <file>

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 20:02
por ssflavio
Caro José Quintas, é uma honra poder ser ajudado por você!
Seus posts são sempre muito importantes na resolução dos problemas por aquí!

qual seria a sequencia de chaves que você usa para compilar os seus sistemas em harbour?

erro base/1003 Variavel não existe

Enviado: 10 Abr 2019 20:55
por JoséQuintas
ssflavio escreveu:qual seria a sequencia de chaves que você usa para compilar os seus sistemas em harbour?
Vai pelo lado mais simples...
retire TODOS os parâmetros
Compile e veja o que acontece.

erro base/1003 Variavel não existe

Enviado: 11 Abr 2019 07:02
por Jairo Maia
Olá ssflavio,

Primeiro, concordo com o José e o MSDN, quando dizem que melhor nesse momento não usar parâmetros. A medida que você for lapidando seu sistema ao Harbour então vai incrementando.

Quanto a sua dúvida:
Eric.Developer escreveu:use TESTE alias TST new
CODPRO := CODIGO (desta maneira dá o erro)
CODPRO := TST->CODIGO (desta maneira não da erro)
Veja que você está usando o parâmetro -v. Isso significa que: -v = variables are assumed M-> (Memory variables).

Então se você fizer CODPRO := M->CODIGO, também funciona. Esse parâmetro faz com que as variáveis do arquivo corrente não sejam lidas, isso é o mesmo que SELECT 0, ou seja, deixar a área sem arquivo aberto (para o caso de leitura de variáveis).

erro base/1003 Variavel não existe

Enviado: 11 Abr 2019 08:30
por Itamar M. Lins Jr.
Ola!
../a /v..

/a É automática a declaração.
/v Assume MEMVAR.
Então; CODIGO é uma MEMVAR ou FIELD (Campo do DBF) ? Ele não sabe e retorna erro, porque assumiu CODIGO como M->.

Saudações,
Itamar M. Lins Jr.

erro base/1003 Variavel não existe

Enviado: 11 Abr 2019 12:16
por JoséQuintas
Jairo Maia escreveu:Então se você fizer CODPRO := M->CODIGO, também funciona.
Funciona se for variável, equivale ao -v ou -a, mas é justamente a origem do post, e causa do erro.

A diferença entre Clipper e Harbour é: o Harbour vém com algumas coisas úteis já ativadas, então precisa desativar pra ficar "inútil" igual no Clipper.

Ao compilar sem parâmetro nenhum, através das mensagens de erro, e dessa lista de parâmetros, por dedução ou teste, vai saber o que usar.

No geral, o default diferente do Harbour + hbmk2 é:

-n valer somente o que tem dentro do fonte, e não o nome externo do arquivo
-w3 -es2 obrigar a declarar variáveis/campos de arquivo, pra não ter problemas depois (o que teve)
-m tratar cada fonte separadamente

-w3 -es2 mostrou que poderia acontecer esse seu erro, o objetivo é justamente impedir que isso não aconteça, já mostrar que o fonte precisa ser alterado.
O problema foi o que usou pra anular essa checagem.
Além de anular a checagem, ainda modificou seus fontes dizendo que NADA VÉM DE ARQUIVO, é TUDO variável de memória.

erro base/1003 Variavel não existe

Enviado: 11 Abr 2019 18:53
por Jairo Maia
Eric.Developer escreveu:uma variável sem prefixo (ALIAS, M, FIELD) , o padrão é, pesquisar primeiramente na TABELA, e depois na MEMÓRIA (PUBLIC, PRIVATE).
Eric.Developer, isso se aplica se não compilar com o parâmetro -v. Se usar -v, as variáveis de arquivo (Field) não serão visíveis. Isso provocava o erro relatado pelo autor do tópico.
Eric.Developer escreveu:O Sr esta enganado, fez montagem de mensagem pra pessoa errada.
Jairo Maia escreveu:
Quanto a sua dúvida:
Oi!? Não entendi. Não me lembro de ter feito qualquer menção a você nesse tópico antes dessa mensagem.

erro base/1003 Variavel não existe

Enviado: 11 Abr 2019 20:10
por JoséQuintas
Jairo Maia escreveu:Não me lembro de ter feito qualquer menção a você nesse tópico antes dessa mensagem.
Pois é Jairo... acho que pegou o trecho de um post de resposta, e isso causou pegar usuário errado.

Mas voltando ao tópico:
Só faltou eu mencionar uma coisa:
O contrário da checagem máxima (-w3 -es2) é checagem mínima (-w0 -es0).

O problema da checagem máxima é quando pega fonte antigo, geralmente do Clipper.
Acaba tendo quilômetros de fonte pra acertar, e pode levar meses pra fazer isso.
Por isso é comum desativar a checagem, e muitas vezes nunca mais ativar.

Mas se interessar depois fazer isso, tem como ativar/desativar pra somente alguns fontes.

erro base/1003 Variavel não existe

Enviado: 14 Abr 2019 12:17
por ssflavio
obrigado queridos amigos!
consegui minimizando as chaves como voces recomendara
ficou assim: /b /es2 /m /n2
considerando que /b e /m não alteram nada, sobrou
/es2 /n2

desculpa a demora, mas estive viajando!!!
:{

erro base/1003 Variavel não existe

Enviado: 14 Abr 2019 15:58
por JoséQuintas
ssflavio escreveu:consegui minimizando as chaves como voces recomendaram
ficou assim: /b /es2 /m /n2
considerando que /b e /m não alteram nada...
na verdade alteram sim, e a recomendação foi deixar somente o necessário.