Página 1 de 1

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 12:44
por porter
olá pessoal, na execução dessa rotina, na linha abaixo está dando erro de sintaxe, essa mesma linha compilado com xHarbour, funciona perfeitamente,
gostaria de saber porque quando compilado com hbmk2 estoque.hbp, da erro de sintaxe no momento da execução.

brw:getcolumn(i_):colorblock=&("{||IF(BLOQ='S',{3,2},IF(BLOQ='N',{1,2},IF(MOTBLO='3',{6,2})))}")

Código: Selecionar todos

 FOR i_=1 TO LEN(brw_campos)
cp_titu:=brw_campos[i_,3]
cp_masc:=brw_campos[i_,2]
cp_:=brw_campos[i_,1]
brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))
brw:getcolumn(i_):colorblock=&("{||IF(BLOQ='S',{3,2},IF(BLOQ='N',{1,2},IF(MOTBLO='3',{6,2})))}")  <- ERRO DE SINTAXE
brw:FREEZE:=1  && CONGELA PRIMEIRA COLUNA
NEXT
Error Base/1449 Erro de sintaxe : &

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 15:14
por Kapiaba
Isto ocorre quando você vai imprimir alguma coisa?

Código: Selecionar todos

ERRO: ERROR BASE 1449/ SYNTAX ERROR : &
DESCRIÇÃO: Erro de Sintaxe
O QUE FAZER: Este erro geralmente ocorre durante o processo de impressão quando os comandos de Ativa Comprimido Desativa Comprimido, Ativa Expandido, Desativa Expandido, estão preenchidos de forma incorreta nos CADASTROS do programa. Defina corretamente o Cadastro de impressora no sistema. Exemplo.: 
Impressora EPSON;

ATIVA COMPRIMIDO: CHR(15)
DESATIVA COMPRIMIDO: CHR(18)
ATIVA EXPANDIDO: CHR(14)
DESATIVA EXPANDIDO: CHR(20)

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 15:28
por porter
Isto ocorre quando você vai imprimir alguma coisa?
olá Kapiaba,
Esse erro ocorre quando tento mostrar um cadastro de clientes pelo Tbrowse, ao invés de usar o Dbedit, estou usando o Tbrowse, vou passar o código com mais detalhe para ver se facilita, dependendo do valor do campo o registro é mostrado com uma cor diferente.

Código: Selecionar todos

PROCEDURE BRW_ARQ
PARAMETERS brw_ls,brw_cs,brw_li,brw_ci,brw_campos
brw:=TBrowseDB(brw_ls+1,brw_cs+1,brw_li-1,brw_ci-1)
brw:colorspec :=  "&BCB/&AZ , &MR+/&VD , &CYB/&AZ , &PR/&PR , &VDB/&MR , &VM/&AZB"
brw:headsep:=chr(205)+chr(205)
brw:colsep:=" "+" "
brw:gotopblock({|| dbGoTop()})
brw:gobottomblock({|| dbGoBottom()})
brw:skipblock({|_1| MOV_PTR(_1)})
FOR i_=1 TO LEN(brw_campos)
cp_titu:=brw_campos[i_,3]
cp_masc:=brw_campos[i_,2]
cp_:=brw_campos[i_,1]
brw:addcolumn(tbcolumnnew(cp_titu,&("{||TRAN("+cp_+",["+cp_masc+"])}")))
brw:getcolumn(i_):width := LEN(TRAN(&cp_.,cp_masc))
brw:getcolumn(i_):colorblock=&("{||IF(BLOQ='S',{3,2},IF(BLOQ='N',{1,2},IF(MOTBLO='3',{6,2})))}")  <---  Erro
brw:FREEZE:=1  && CONGELA PRIMEIRA COLUNA
NEXT

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 15:30
por gilbertosilverio
Ola Porter,

Não esta faltando um "nil" nesta chave... IF(MOTBLO='3',{6,2}, nil)

brw:getcolumn(i_):colorblock=&("{||IF(BLOQ='S',{3,2}, IF(BLOQ='N',{1,2}, IF(MOTBLO='3',{6,2}, nil) ) )}")

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 15:31
por Kapiaba
Ou, falta declarar uma variável com PRIVATE ou MEMVAR.

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 15:52
por porter
Obrigado Kapiaba e Gilberto, agora deu certo, como havia dito, com xHarbour sempre usei assim, estava compilando e executando normalmente.

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 16:10
por Kapiaba
Tudo é mais fácil com XHARBOUR, compilador maravilhoso, igual ao CLIPPER5.3, Mas, gosto não se discute! Abs.

erro sintaxe na execução quando compiladao com harbour

Enviado: 07 Mar 2017 20:56
por JoséQuintas
Tudo é mais fácil com XHARBOUR, compilador maravilhoso
Discordo totalmente: o xHarbour aceita bagunça, igual o Clipper.

Se iif é pra escolher entre duas opções.... cadê a segunda opção?

O erro foi em run-time.
Usando codeblock sem macro, já teria isso conferido durante a compilação.
Mais ainda se usar -w3 -es2.

Código: Selecionar todos

brw:GetColumn( i_ ):ColorBlock := { || iif( BLOQ == "S", { 3, 2 }, iif( BLOQ == "N", { 1, 2 }, iif( MOTBLO == "3", {6,2}, ??????? ) ) ) }
No final, depende muito do ponto de vista.
Será que faltou a cor porque foi esquecido, ou era NIL mesmo?
Às vezes é bom perder certos hábitos, vai ajudar quando isso realmente for problema.