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.