Erro na função ACHOICE()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Erro na função ACHOICE()

Mensagem por Hasse »

Boa tarde colegas.

Implantei a versão 1.1.0 e dá pau na função ACHOICE().

Voltando para a versão 0.99.70 funciona normal.

Na versão 1.1.0 esta função sofreu modicações bem profundas. Na linha 112 ela invoca a função THROW(). E é justamente nela é que ocorre o erro, conforme abaixo:

Código: Selecionar todos

      Tipo de Mensagem ..............: BASE
      Número do Erro ................: 1.127
      Descrição .....................: Argument error: <acMenuItems> should contain string values
      Objeto do Erro ................: ACHOICE
      Erro do DOS ...................: 0
      Área de Trabalho ..............: 3
      Nome do Arquivo ...............: 
      Módulo ........................: THROW.................... :Linha... 0                   
                                       ACHOICE.................. :Linha... 112  
Posso substituir ela pela mesma da versão 0.99.70 até que saia a sua correção ?

Neste caso bastaria compilar via make_b32.bat ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Hasse, post um codigo com exemplo onde ocorre o erro. eu estou usando aqui ACHOICE sem problemas !!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Tenho várias ocorrência. Acredito que devo ter umas 20, e destas testei 8 e TODAS dão erro. Selecionei duas bem características:

Ocorrência 1:

Código: Selecionar todos

DECLARE v_cvnome[300],v_cvcod[300]
conta = 0
FOR i=1 TO 300       conta = conta + 1
    v_cvnome[i] = SUBS(CONTEUDO,01,19) + COD
    SKIP 2
    IF TIP != "CV"
       EXIT
    ENDIF
NEXT
ASORT(v_cvnome)
FOR i=1 TO conta
   v_cvcod[i]  = RIGHT(v_cvnome[i],3)
   v_cvnome[i] = LEFT(v_cvnome[i],19) + "-" + SUBS(v_cvnome[i],20)
NEXT i
SET CURSOR ON

DO WHILE .T.
   SELE 3
   @ 06,06 TO 20,32
   n_opcao := ACHOICE(08,08,18,30,v_cvnome)        && <<-- AQUI OCORRE O ERRO.
   IF n_opcao = 0
      EXIT
   ENDIF
   c_busca = "CV"+v_cvcod[n_opcao]
   ...
   ...
Ocorrência 2:

Código: Selecionar todos

nExam = 900
DECLARE v_exnome[nExam]
conta = 0
FOR i=1 TO nExam
    conta = conta + 1
    v_exnome[i] = SUBS(CONTEUDO,01,28) + COD
    SKIP
    IF TIP != "EX"
       EXIT
    ENDIF
NEXT

SET CURSOR ON
DO WHILE .T.
   M_tela = SAVESCREEN(03,11,17,47)
   @ 03,11 CLEAR TO 17,47
   @ 03,11 TO 17,47 DOUBLE
   n_opcao = ACHOICE(04,14,16,44,v_exnome)    && <<-- AQUI OCORRE O ERRO.
   SETCOLOR(cornow)
   RESTSCREEN(03,11,17,47,M_tela)
   IF n_opcao = 0
      EXIT
   ENDIF
   c_exame = READVAR()
   &c_exame = RIGHT(v_exnome[n_opcao],3)
   KEYBOARD CHR(13)
   EXIT
ENDDO
...
...
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Caros colegas.

Encontrei o ERRO e a solução. É o seguinte !!!!

Ao se criar Matrizes de tamanho fixo elas são preenchidas automaticamente com o valor NIL. A seguir o meu sistema preenchia a matriz com os dados, mas ficavam algumas posições (???) com o valor NIL.

O ACHOICE antigo descartava automaticamente estas posições, avaliando somente as preenchidas com STRINGS. O ACHOICE da versão 1.1.0 é mais exigente e aceita SOMENTE STRINGS.

Desta forma temos 2 caminhos:

1-Usamos o sistema antigo e antes de preencher a matriz com os nossos dados ela deve ser toda preenchida com "" (string vazia) com a função AFILL(). O ACHOICE descarta todas as posições com string vazio.

2-Criamos uma matriz o (zero) usando a atribuição v_dtnome := {}, e depois no preenchimento dos dados usamos a função AADD(). Desta forma criamos a matriz do tamanho exato dos nossos dados.

As 2 formas são suportadas pelo novo ACHOICE.

Obrigado pela atenção de todos, muito especialmente do colega Sygecom, que sempre está atento e prestativo.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Hasse, talvez por isso que nunca deu problema comigo, desde no clipper eu sempre inicie vazio ( v_dtnome := {} ) e sempre preenchi com AADD().
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder