BUG HWGUI 2.22 B4

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

BUG HWGUI 2.22 B4

Mensagem por Fernando queiroz »

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.

Código: Selecionar todos

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:

Código: Selecionar todos

	@ 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:

Código: Selecionar todos

************************************************************************************************************************************************************************************************************************
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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

BUG HWGUI 2.22 B4

Mensagem por sygecom »

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

Código: Selecionar todos

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG HWGUI 2.22 B4

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG HWGUI 2.22 B4

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

BUG HWGUI 2.22 B4

Mensagem por Fernando queiroz »

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: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

BUG HWGUI 2.22 B4

Mensagem por Fernando queiroz »

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
joaoalpande
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 24 Fev 2005 09:04
Localização: CAMPO GRANDE / MS

BUG HWGUI 2.22 B4

Mensagem por joaoalpande »

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.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

BUG HWGUI 2.22 B4

Mensagem por Fernando queiroz »

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

BUG HWGUI 2.22 B4

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder