Clipper On Line • Ver Tópico - BUG HWGUI 2.22 B4

BUG HWGUI 2.22 B4

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

BUG HWGUI 2.22 B4

Mensagempor Fernando queiroz » 28 Out 2020 14:30

Estou tendo um bug na HBROWSE da HWGUI usando ADO , o mesmo acontece esporadicamente quando estou consultando um produto, o produto tem um CODEBLOCK para colocar em vermelho os produtos que nao tem estoque ou preto nos que tem estoque.

Error BASE/1132  Bound error: array access
Called from CLASS_PRODUTOS.PRG->(b)PRODUTOSCLASS_PRODUTOS_PESQUISA(2820)
Called from source\winapi\hbrowse.prg->HBROWSE:LINEOUT(1112)
Called from source\winapi\hbrowse.prg->HBROWSE:PAINT(813)
Called from source\winapi\hbrowse.prg->HBROWSE:ONEVENT(331)
Called from ->HWG_REDRAWWINDOW(0)
Called from source\winapi\hbrowse.prg->HBROWSE:REFRESH(2025)
Called from CLASS_PRODUTOS.PRG->PRODUTOSCLASS:PESQUISA_PRODUTOS_ONKEYDOWN(2941)
Called from CLASS_PRODUTOS.PRG->(b)PRODUTOSCLASS_PRODUTOS_PESQUISA(2802)
Called from source\winapi\hbrowse.prg->HBROWSE:ONEVENT(381)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from source\winapi\hdialog.prg->HDIALOG:ACTIVATE(156)
Called from CLASS_PRODUTOS.PRG->PRODUTOSCLASS:PRODUTOS_PESQUISA(2842)
Called from NOTADEPEDIDOGRAFICA.PRG->NOTA_DE_PEDIDO_VALIDA_PRODUTOS(579)
Called from NOTADEPEDIDOGRAFICA.PRG->(b)NOTA_DE_PEDIDO(95)
Called from source\winapi\hedit.prg->__VALID(893)
Called from source\winapi\hedit.prg->(b)HEDIT_NEW(98)
Called from source\winapi\hdialog.prg->ONDLGCOMMAND(374)
Called from source\winapi\hdialog.prg->(b)(_INITSTATICS00003)(0)
Called from source\winapi\hdialog.prg->HDIALOG:ONEVENT(211)
Called from ->HWG_SETFOCUS(0)
Called from source\winapi\hedit.prg->HWG_GETSKIP(1082)
Called from source\winapi\hdialog.prg->ONDLGCOMMAND(359)
Called from source\winapi\hdialog.prg->(b)(_INITSTATICS00003)(0)
Called from source\winapi\hdialog.prg->HDIALOG:ONEVENT(211)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from source\winapi\hdialog.prg->HDIALOG:ACTIVATE(156)
Called from NOTADEPEDIDOGRAFICA.PRG->NOTA_DE_PEDIDO(218)
Called from SGC.PRG->(b)ACESSO_9(291)
Called from source\winapi\htool.prg->HTOOLBAR:NOTIFY(414)
Called from source\winapi\hcwindow.prg->ONNOTIFY(263)
Called from source\winapi\hcwindow.prg->(b)(_INITSTATICS00005)(0)
Called from source\winapi\hcwindow.prg->HWINDOW:ONEVENT(191)
Called from source\winapi\hdialog.prg->HDIALOG:ONEVENT(219)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from source\winapi\hdialog.prg->HDIALOG:ACTIVATE(156)
Called from SGC.PRG->MAIN(196)

HWGUI 2.22 Build 4
Date:28/10/2020
Time:11:36:08


minha rotina esta assim:
   @ 4,70 BROWSE oBrowse1 ARRAY OF oDlgPROD SIZE 900,304 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
         ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
         ON CLICK {|| oDlgPROD:Close()  } ;
         ON KEYDOWN {|oBrowse1,nKeyPress| ::PESQUISA_PRODUTOS_onKeyDown( oBrowse1, nKeyPress, oDlgProd, @cProgressKey, cAlvo_Consulta ) }

      oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
      oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
      oBrowse1:freeze := 2
      oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( "ORDER BY PRODUTOS.DESPRO LIMIT 50" )

      oBrowse1:AddColumn( HColumn():New( "ID",hwg_ColumnArBlock(),"N",13,0,.F.,1,2,'99999999999',,,,,;
               {|| oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( "ORDER BY PRODUTOS.PRODUTOS_ID LIMIT 50" ),cAlvo_Consulta:="PRODUTOS.PRODUTOS_ID",obrowse1:Refresh(), hwg_WriteStatus( oDlgPROD,3,"Ordem: CODIGO") } ,,,,))

      oBrowse1:AddColumn( HColumn():New('DESCRIÇÃO/NOME PRODUTO', hwg_ColumnArBlock() ,'C',85, 0 ,.F.,1,,,,,,,;
               {|| oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( "ORDER BY PRODUTOS.DESPRO LIMIT 50" ), cAlvo_Consulta:="PRODUTOS.DESPRO",obrowse1:Refresh(), hwg_WriteStatus( oDlgPROD,3,"Ordem: DESCRIÇÃO/NOME PRODUTO") } ,,,,))

      oBrowse1:AddColumn( HColumn():New('Unidade', hwg_ColumnArBlock() ,'C',9, 0 ,.F.,1,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Preço Venda', hwg_ColumnArBlock() ,'N',14, 2 ,.F.,1,2,'@E 999,999.99',,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Estoque Loja', hwg_ColumnArBlock() ,'N',22, 3 ,.F.,1,2,,,,,,,,,,))

      BEGIN SEQUENCE
         bColorBlock :={|| IIF( oBrowse1:aArray[oBrowse1:nCurrent,6] < 0.001 ,{255, 16777215 ,16777215,255 },{0,16777215,16777215,0 }) }   
      RECOVER
         bColorBlock :={|| {0,16777215,16777215,0 } }   
      END SEQUENCE
      

      FOR EACH oColuna IN oBrowse1:aColumns
         oColuna:bColorBlock := bColorBlock
      NEXT


a rotina de carga e consulta esta assim:
************************************************************************************************************************************************************************************************************************
METHOD PESQUISA_PRODUTOS_CARREGA( cAlvo_Consulta ) CLASS PRODUTOSCLASS
************************************************************************************************************************************************************************************************************************
LOCAL aResult :={};
   , oQuery;
   , cQuery
   
   cQuery := "SELECT PRODUTOS.PRODUTOS_ID, ";
               + "PRODUTOS.DESPRO, ";
               + "PRODUTOS.TIPUNI, ";
               + "PRODUTOS.preven, ";
               + "PRODUTOS.ESTATU, ";
               + "(PRODUTOS.ESTATU + PRODUTOS.ESTL02) SOMA ";
               + "from PRODUTOS ";
               + cAlvo_Consulta
   oQuery := ::oServer:Execute(cQuery)

   if oQuery:Eof()
      aAdd( aResult, {0,;
                  '',;
                  '',;
                  0.00,;
                  0.000,;
                  0.000} )
   endif
   DO WHILE ! oQuery:Eof()
      aAdd( aResult, {oQuery:Fields( "PRODUTOS_ID" ):Value,;
                  oQuery:Fields( "DESPRO" ):Value,;
                  oQuery:Fields( "TIPUNI" ):Value,;
                  oQuery:Fields( "preven" ):Value,;
                  oQuery:Fields( "ESTATU" ):Value,;
                  oQuery:Fields( "SOMA" ):Value} )
      oQuery:MoveNext()
   ENDDO
   oQuery:Close()   
      
RETURN aResult
************************************************************************************************************************************************************************************************************************
METHOD PESQUISA_PRODUTOS_onKeyDown( oBrowse1, nKeyPress, oDlgProd, cProgressKey, cAlvo_Consulta ) CLASS PRODUTOSCLASS
************************************************************************************************************************************************************************************************************************
LOCAL nPosicao:=0;
   , cConsulta;
   
   KSETCAPS(.T.);

   IF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ "34|33|37|38|39|40|20|16"
      cProgressKey:=""
      oDlgProd:oLabel2:settext(cProgressKey)
      RETURN .T.
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [90]
      nKeyPress := 90
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [96]
      nKeyPress := 48
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [97]
      nKeyPress := 49
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [98]
      nKeyPress := 50
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [99]
      nKeyPress := 51
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [100]
      nKeyPress := 52
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [101]
      nKeyPress := 53
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [102]
      nKeyPress := 54
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [103]
      nKeyPress := 55
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [104]
      nKeyPress := 56
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [105]
      nKeyPress := 57
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [106]
      nKeyPress := 42
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [190]
      nKeyPress := 46
   ELSEIF nKeyPress == Asc("8") .AND. hwg_isCtrlShift( .F.,.T. )
      nKeyPress := 42      
   ENDIF   
   
   IF  nKeyPress = VK_RETURN .OR. nKeyPress = VK_ESCAPE
         oDlgProd:Close()
      RETURN .T.
   ENDIF
      
   If nKeyPress # 8
      cProgressKey += Chr(nKeyPress)
      nPosicao:=AScan(oBrowse1:aArray,cProgressKey)
      oDlgProd:oLabel2:settext(cProgressKey)
//      cConsulta:= "WHERE " + cAlvo_Consulta + IF(isalpha(cProgressKey), " LIKE '%" + cProgressKey + "%'" ,  " LIKE '" + cProgressKey + "%'") + " ORDER BY " + cAlvo_Consulta
      cConsulta:= "WHERE " +cAlvo_Consulta + " LIKE '%" + cProgressKey + "%'" + " ORDER BY " + cAlvo_Consulta
      oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( cConsulta )
      oDlgProd:obrowse1:REFRESH()
   ELSEIF nKeyPress = 8 .AND. Len(cProgressKey) >= 1
      cProgressKey:=Left(cProgressKey,Len(cProgressKey) - 1)
      nPosicao:=AScan(oBrowse1:aArray,cProgressKey)
      oDlgProd:oLabel2:settext(cProgressKey)
//      cConsulta:= "WHERE " + cAlvo_Consulta + IF(isalpha(cProgressKey), " LIKE '%" + cProgressKey + "%'" ,  " LIKE '" + cProgressKey + "%'") + " ORDER BY " + cAlvo_Consulta
      cConsulta:= "WHERE " +cAlvo_Consulta + " LIKE '%" + cProgressKey + "%'" + " ORDER BY " + cAlvo_Consulta
      oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( cConsulta )
      oDlgProd:obrowse1:REFRESH()
   ENDIF   
   IF nPosicao # 0
      cConsulta:= "WHERE " + cAlvo_Consulta + " LIKE '%" + cProgressKey + "%'" + " ORDER BY " + cAlvo_Consulta
//      cConsulta:= "WHERE " +cAlvo_Consulta + IF(isalpha(cProgressKey), " LIKE '%" + cProgressKey + "%'" ,  " LIKE '" + cProgressKey + "%'") + " ORDER BY " + cAlvo_Consulta
      oBrowse1:aArray := ::PESQUISA_PRODUTOS_CARREGA( cConsulta )
      oDlgProd:obrowse1:REFRESH()
   ENDIF 

return .T.


estou achando que deve ser um problema com o ADO que nao esta retornando os dados ou o HBROWSE que se perde com o retorno
obs: o erro nao acontece sempre
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

BUG HWGUI 2.22 B4

Mensagempor sygecom » 28 Out 2020 17:46

Não sei qual SGBD está usando, mas já tentou forçar no SQL para sempre ser um determinado tipo de campo ?
ex?

cQuery := "SELECT PRODUTOS.PRODUTOS_ID, ";
009                  + "PRODUTOS.DESPRO, ";
010                  + "PRODUTOS.TIPUNI, ";
011                  + "PRODUTOS.preven, ";
012                  + "PRODUTOS.ESTATU, ";
013                  + "(PRODUTOS.ESTATU + PRODUTOS.ESTL02)::numeric(19,2) SOMA ";
014                  + "from PRODUTOS ";
015                  + cAlvo_Consulta
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

BUG HWGUI 2.22 B4

Mensagempor JoséQuintas » 29 Out 2020 10:40

Fernando queiroz escreveu:estou achando que deve ser um problema com o ADO que nao esta retornando os dados ou o HBROWSE que se perde com o retorno


Aqui você está errado pra você mesmo, ao mesmo tempo que está cortando possível ajuda.
Você está usando ADO, ok, mas isso não tem nada a ver com o browse, porque no browse está usando ARRAY.

A mensagem de erro é sobre elemento que não existe no array.
Olhe a linha do erro, para tentar descobrir as variáveis envolvidas: array e elemento
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

BUG HWGUI 2.22 B4

Mensagempor JoséQuintas » 29 Out 2020 10:47

E se está recarregando o array durante o browse.....

Supondo que o array tem 11 elementos, e está posicionado no elemento 10....
Se recarrega o array com 5 elementos... a posição 10 se tornou inválida e vai gerar esse erro.
Verifique se ao recarregar o array está atualizando para uma nova posição.

Como eu já disse, a linha do erro é o ponto de referência, pra olhar as variáveis envolvidas.
Olhando o fonte postado não dá pra saber que linha é essa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

BUG HWGUI 2.22 B4

Mensagempor Fernando queiroz » 29 Out 2020 14:23

Quinta o Array estava sendo carregado corretamente tanto que o erro não aparece sempre, a coisa pode passar vários dias sem erro e em algum momento ocorrer o erro, sem compilar novamente e tentando simular o mesmo procedimento no momento em que deu o erro ele não se repete mais,

tanto que:
o campo testado no CODEBLOCK constava do ARRAY

a única coisa que depois verifique era que eu somava decimal(10,3) + decimal(10,3) < 0.0001 ou < 1 fiz a correção para < 0.001
e agora estou testando para ver se não acontece mais.

e durante alguns teste fiz ate a soma pelo banco de dados e retornava 0 = false ou 1 = true e mesmo assim ocorria o erro , coloquei o campo no hbrowse e no array e o erro persistia.

parecia que ele em algum momento nao conseguia fazer o EVAL do CODEBLOCK , e na maior parte do tempo ele fazia corretamente, isso que achei estranho.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

BUG HWGUI 2.22 B4

Mensagempor Fernando queiroz » 29 Out 2020 14:35

a minha solução mais pratica foi carregar o array somente com os produtos que tem estoque , não mostro mais os que estão zerados em vermelho, mas ficou a duvida quanto ao problema.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

BUG HWGUI 2.22 B4

Mensagempor joaoalpande » 29 Out 2020 15:13

Boa tarde,

Já me ocorreu um erro desses , por algum motivo o :nCurrent fica com um valor superior ao tamanho do array do browse e ocorre esse erro, na altura eu fiz uma validação para testar se é superior ao tamanho do array, para solucionar esse erro que ocorria esporádicamente:

IF LEN(:oBrw:aArray)>0 .AND. LEN(:oBrw:aArray) >= :oBrw:nCurrent

Pode tentar se resolve seu problema.
joaoalpande
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 92
Data de registro: 24 Fev 2005 09:04
Cidade/Estado: CAMPO GRANDE / MS
Curtiu: 1 vez
Mens.Curtidas: 3 vezes

BUG HWGUI 2.22 B4

Mensagempor Fernando queiroz » 29 Out 2020 17:19

joaoalpande escreveu:Boa tarde,

Já me ocorreu um erro desses , por algum motivo o :nCurrent fica com um valor superior ao tamanho do array do browse e ocorre esse erro, na altura eu fiz uma validação para testar se é superior ao tamanho do array, para solucionar esse erro que ocorria esporádicamente:

IF LEN(:oBrw:aArray)>0 .AND. LEN(:oBrw:aArray) >= :oBrw:nCurrent

Pode tentar se resolve seu problema.


João com o seu POST reforçou a certeza que o problema é na HWGUI , pois testei de varias formas e acontecia esporadicamente

Valeu pela dica!!
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

BUG HWGUI 2.22 B4

Mensagempor JoséQuintas » 29 Out 2020 23:04

joaoalpande escreveu:por algum motivo o :nCurrent fica com um valor superior ao tamanho do array do browse e ocorre esse erro


Tive essa impressão quando tive problema com ADO.
Até mencionei que tudo estava diferente do tbrowse, não só pra ADO, mas também pra array e DBF.
Pra incluir novos registros, talvez seja criado o registro "fantasma", com um número maior do que existe.

Talvez ajustar o hbrowse de uma vez igual ao tbrowse, os codeblocks de movimentação de dbf e array.
Mas vai precisar ajustar internamente também, fazer o que fez pra ADO também em dbf e array.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro