Página 1 de 2

Error BASE/1004 No exported method: EVAL. Como resolvo?

Enviado: 29 Out 2007 09:35
por miracle
Amigos, o código é o seguinte:

Código: Selecionar todos

SELECT 31
IF .NOT. ABRE("PEDIDOS.DBF",5,"C")
    ALERT("ARQUIVO PEDIDOS.DBF INDISPONIVEL NO MOMENTO!",{"OK"},"15/16")
    CLOSE DATA
    RETURN
END IF
SET INDEX TO PEDID01.CDX,PEDID02
SET ORDER TO 1
nPEDIDO = 29
SEEK cEMPRESA + STR(nPEDIDO)
IF FOUND()
    IF BLOQUEIA(5)
        DELETE
        UNLOCK
        DBCOMMIT()
    ENDIF
ENDIF
E, ao executar dá o erro mostrado no cabeçalho deste tópico: Error BASE/1004 No exported method: EVAL. Uso esse código faz tempo e nunca tive problema. Agora preciso disso funcionando até o meio dia de HOJE e, talvez pelo desespero, não estou conseguindo resolver o problema.
:(Neg :?
Alguém pode me ajudar?

Error base/1004

Enviado: 29 Out 2007 10:26
por Adalberto
Miracle,

O problema não é esse código, acredito que está na função de Bloqueio, que é o lugar onde um CodeBlock é usado. Confira isso.

Enviado: 29 Out 2007 10:42
por sygecom
Post as funções ABRE() e BLOQUEIA()

Enviado: 29 Out 2007 10:45
por Maligno
Detalhe que percebi: a função Alert() possui apenas dois parâmetros, mas você está informando três.
Pergunta: em qual dessas linhas (ele dá o número?) aparece o erro?

Error base/1004

Enviado: 29 Out 2007 11:04
por Adalberto
Em Guía Norton e em outro literatura a função ALERTA() tem dois parâmetros mas recebe 3, é o terceiro e a cor.

Enviado: 29 Out 2007 12:46
por clodoaldomonteiro
Pessoal!
Aproveitando que estamos falando de code block, como é que eu visualizo um code block?

É que eu coloquei campo tipo senha direto no getsys só que não tá funcionando o comando VALID, no getsys a expressão do valid tá dentro de um code block, o oget:postblock que tá dentro da função getpostvalidate(), nela o programador usou: lvalid := eval( oget:postblobk, oget ), para testar a validade do get.

Eu queria então ver qual o conteúdo de oget:postblock para poder fazer os tratamentos do valid para camo tipo senha.

Malígno vê se me dá uma força, e obrigado pelo o que você tem fei por mim.

Enviado: 29 Out 2007 13:57
por Maligno
Para visualizar um codeBlock só olhando o fonte. De outra forma não tem jeito. Isso por quê, depois de compilado, o codeBlock se transforma em opCodes.

Enviado: 29 Out 2007 16:33
por miracle
O prazo já era... :? Consegui enrolar até amanhã. :-o

Ai vão as funções ABRE e BLOQUEIA. Eu as utilizo há tempos e nunca tive problema com elas. :-o

Código: Selecionar todos

FUNCTION ABRE(cARQUIVO, nTEMPO, cMODO)
DO WHILE nTEMPO > 0
    IF cMODO = "C"
        USE &cARQUIVO SHARED
    ELSE
        USE &cARQUIVO EXCLUSIVE
    ENDIF
    IF NETERR()
        nTEMPO = nTEMPO - 0.5
        INKEY(0.5)
    ELSE
        RETURN(.T.)
    ENDIF
ENDDO
RETURN(.F.)

FUNCTION BLOQUEIA(nTEMPO)
DO WHILE nTEMPO > 0
    IF RLOCK()
        RETURN(.T.)
    ENDIF
    nTEMPO = nTEMPO - 0.5
    INKEY(0.5)
ENDDO
RETURN(.F.)
As Alert que usei no código, Maligno, não registram o código de erro. Ele ocorre na execução, na hora da deleção dos dados com o comando DELETE. E isso nunca tinha acontecido antes. :-o

Enviado: 29 Out 2007 16:40
por miracle
Ha! E eu nem sei o que é Code Block. Desculpem a ignorância, mas é que eu aprendi Clipper autodidaticamente e o que eu não conseguia entender, procurava uma outra forma de fazer para que desse o mesmo resultado.
:{
São Code Blocks as rotinas de Loop e Escolha com If then else?

Enviado: 29 Out 2007 16:48
por Maligno
miracle escreveu:São Code Blocks as rotinas de Loop e Escolha com If then else?
Codeblock é um bloco de código. :)

Explicitamente: um tipo especial de dado que possui código compilado. Normalmente ele contém uma ou mais expressões avaliadas com base numa lista de argumentos descritos no próprio codeblock.

Enviado: 29 Out 2007 16:51
por Maligno
miracle escreveu:O prazo já era... :? Consegui enrolar até amanhã.
Programador que não sabe enrolar cliente não é programador. :)))
As Alert que usei no código, Maligno, não registram o código de erro. Ele ocorre na execução, na hora da deleção dos dados com o comando DELETE.
Não respondeu minha pergunta: em qual linha ele disse que o erro está? Pra qual código ele aponta?

Enviado: 29 Out 2007 17:00
por miracle
O erro aponta exatamente para a linha 1119, caindo diretamente no comando DELETE.

Enviado: 29 Out 2007 17:12
por Maligno
Pergunta: esse programa foi inteiramente compilado sem o switch /L? Se não, compile tudo sem esse switch e veja de novo onde o erro vai dar.

Enviado: 29 Out 2007 18:36
por ANDRIL
Vc ja verificou se isso acontence com um determinado cliente ou acontece com todos justamente neste ponto do seu programa. Eu acho que isso pode ser problema de registro/banco de dados/indice danificado, pois o erro em EVAL pode ser ocasionado por algum comando interno do proprio clipper que necessita exportar o registro para o comando DELETE.


SET INDEX TO PEDID01.CDX,PEDID02


O porque do PEDID01.CDX e o PEDID02 nao ter o .CDX? Bom é só uma curiosidade.


Ate+,

Enviado: 30 Out 2007 08:21
por miracle
O PEDID02 saiu sem o .CDX por um acidente na hora de copiar para a mensagem. No código original ele é acompanhado do .CDX, Andril.

Não verifiquei se isso acontece com este cliente apenas. vou dar uma verificada. Pode ser que o DBF esteja danificado, mesmo.

Mas, por via das dúvidas, vou passar o FileFix no DBF e apagar todos os índices. Já estou reescrevendo o módulo no qual esse código está... ´o)

Mais tarde eu posto o que eu conseguir. :*