Página 1 de 1
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 07:32
por juniorcamilo
ola amigos veja o codigo abaixo:
onde ALIAS->CAMPO := "(cVal1*(cVal2/100))" e de um arquivo qualquer
Código: Selecionar todos
Function teste()
Private cMostra := ALIAS->CAMPO
Private cVal1 := 10, cVal2 := 10
@ 10,10 say &cMostra.
wait
return .t.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 09:26
por Pablo César
Junior, você já utilizou a função FieldGet(<número do campo>) ?
FIELDGET()
Recupera o valor de um campo usando a posiçao ordinal deste dentro da
estrutura do arquivo de dados
─────────────────────────────────────────────────────────────────────────
Sintaxe
FIELDGET(<nCampo>) --> valorCampo
Argumentos
<nCampo> é a posiçao ordinal do campo na estrutura do registro para
a área de trabalho corrente.
Retorna
FIELDGET() retorna o valor do campo especificado. Se <nCampo> nao
corresponde a posiçao de qualquer campo no arquivo de dados, FIELDGET()
retorna NIL.
Descriçao
FIELDGET() é uma funçao de arquivo de dados que recupera o valor de um
campo usando sua posiçao dentro da estrutura do arquivo de dados ao
invés de seu nome. Dentro das funçoes genéricas de acesso a arquivos
de daods isto permite entre outras coisas, a recuperaçao de valores de
campos sem o uso do operador macro.
Exemplos
O exemplo a seguir compara FIELDGET() ao código funcionalmente
equivalente que usa o macro operador para recuperar o valor de um
campo:
LOCAL nField := 1, FName, FVal
USE Customer NEW
//
// Usando o macro operador
FName := FIELD( nField ) // Obtem nome do campo
FVal := &FName // Obtem valor do campo
// Using FIELDGET()
FVal := FIELDGET( nField ) // Obtem valor do campo
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 10:12
por juniorcamilo
Pablo César escreveu:Junior, você já utilizou a função FieldGet(<número do campo>) ?
sim o fielget pega o conteudo do campo, mas nao consegui fazer a formula matematica. o conteudo do campo do arquivo é (ALIAS->X*(ALIAS->Y/100)) calculo de porcentagem. no arquivo que estoutentando idealizar possui varias formulas matematicas e quando for preciso usarei a escolhida para dar o resultado na tela.. onde declaro que ALIAS->X e ALIAS->Y vem de uma arquivo com definicoes armazendas de um caddastro previo. o conteudo de X e Y pode ser trocado com o sistema rodando.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 10:28
por Pablo César
Entendi, o resultado é algo lógico, foi por isso que indiquei a FieldGet que fica mais fácil caso você montar uma lógica de sequência na criação do seu banco de dados. Só que você não deu exemplo algum e fica dificil dar uma outra dica. Não sabemos a que se refere e quantas possibilidades existem nessa composição.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 10:39
por juniorcamilo
Pablo César escreveu:Entendi, o resultado é algo lógico, foi por isso que indiquei a FieldGet que fica mais fácil caso você montar uma lógica de sequência na criação do seu banco de dados. Só que você não deu exemplo algum e fica dificil dar uma outra dica. Não sabemos a que se refere e quantas possibilidades existem nessa composição.
é se vc ver outros post meus eu sempre penso mas nao escrevo oq real mente quero,rsrsrs, mas vamos la...
arquivo nome 'TESTE', campos X, Y e FORMULA onde TESTE->X := 10, TESTE->Y := 10 e TESTE->FORMULA := "(TESTE->X*(TESTE->Y/100))"
Código: Selecionar todos
Function teste()
Sele 1
use TESTE alias TESTE
@ 10,10 say &TESTE->FORMULA.
wait
return .t.
espero que entenda...
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 11:05
por Pablo César
juniorcamilo escreveu:é se vc ver outros post meus eu sempre penso mas nao escrevo oq real mente quero,rsrsrs, mas vamos la...
kkk pois é...
Você me desculpa mas para dar uma boa indicação é preciso entender e juro que está difícil de eu entender.
Você esqueceu de listar a estrutura do seu BD. E o que fiquei confuso é que você tinha mencionado dois BD.
Eu fiz este teste:
Código: Selecionar todos
X := 10
Y := 10
FORMULA := "(TESTE->"+StrZero(X,3,0)+"*(TESTE->"+StrZero(Y,3,0)+"/100))"
RESULTADO:= X*Y/100
@ 10,10 say StrZero(RESULTADO,3,0)
@ 11,10 say FORMULA
// @ 12,10 say (&FORMULA)
inkey(0)
Pois acredito que o seu problema maior é resolver primeiramente o cálculo matemático (acho que é uma porcentagem) e depois compor o nome do campo. Mas preciso ver como você definiu a sua estrutura. Para facilitar utilize o STRU.exe para postar aqui no fórum.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 11:10
por Jairo Maia
Olá Júnior,
Qual o erro você está tendo? Acabei de testar o exemplo abaixo em Harbour, e nada muda com o Clipper pelo que sei neste caso. Tente compilar este exemplo em Clipper e veja se funciona:
Código: Selecionar todos
//Func Main()
If !File( "Macros.dbf" )
aEstr := {;
{"valor1" ,"N", 10, 0},;
{"valor2" ,"N", 10, 0},;
{"macro" ,"C", 50, 0};
}
DBCreate( "Macros", aEstr )
Use Macros Shared New
Appen Blank
Repl valor1 with 10
Repl valor2 with 10
Repl macro with "(cVal1*(cVal2/100))"
Use
EndIf
Use Macros Shared New
Teste()
//Return Nil
Function teste()
Private cMostra := MACROS->macro
Private cVal1 := MACROS->valor1
Private cVal2 := MACROS->valor2
Clear Screen
@ 10,10 say ( &cMostra. ) // Retorna 1.00 (correto)
//wait
Return .t.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 11:18
por Pablo César
Ahhh você sabia a estrutura do dbf Jairo ? Agora entendi.
Eu sempre utilizei macros entre parenteses e o sinal de macro no inicio mas dentro do parentese. E nunca tive problemas, nem em Harbour nem em Clipper. E não vejo que no Harbour possa haver algum problema.
O único que achei que pode estar errado no seu código, Jairo. É na linha 15 onde cVal1 e cVal2 não estão declaradas.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 11:26
por Jairo Maia
Olá Pablo,
Pablo César escreveu:você sabia a estrutura do dbf Jairo
Não sabia. Montei com as informações do último post dele.
Jairo Maia escreveu:É na linha 15 onde cVal1 e cVal2 não estão declaradas
Na linha 15 é uma linha string. Depois de ser gravada no DBF, elas serão substituidas na funcão Teste() via Macro.
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 11:44
por Pablo César
Bom dia Jairo. Ahhh tem razão, nessa linha não irá dar erro pois está como string.
Jairo Maia escreveu:Montei com as informações do último post dele
Imaginei... rs
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 14:57
por juniorcamilo
amigos achei o erro, erro tao idiota da minha parte que nao m dei conta, oq postei foi um ex. para facilitar o entendimento, mas na minha aplicacao é um pouco mais complexa, errei o nome do campo...... :^|
Macro substituicao, é possivel?
Enviado: 12 Jul 2013 15:09
por Pablo César
ahh ainda bem... acho que você se tocou quando te pedi a listagem de estrutura do dbf...
Mas se está resolvido, isso é o que importa.