Página 1 de 1

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 09:08
por rubens
Olá... Bom dia...

Eu fiz algumas pesquisas e a mais parecida com o meu problema está neste tópico:
viewtopic.php?f=4&t=15484&p=91596&hilit=dbedit+lento#p91596

Só que neste tópico e em outras não houve uma resposta conclusiva e é um tópico muito antigo..
Por isso tô postando aqui o meu problema... De repente de lá para cá alguém achou uma solução para o problema.

Na pesquisa com o dbedit quando se pressiona enter para selecionar um item ele demora até uns 10 segundos em rede para remontar a tela e posicionar o cursor na linha do item pesquisado. A mesma rotina no clipper é instantâneo.
Realmente é um erro do xharbour? tem alguma configuração para resolver isso?

Aqui como chama o dbedit

Código: Selecionar todos

DBEDIT(04,05,19,75,aCampo,'TECLAORC',,aTitulo,'Í','³')
Aqui a função 'Teclaorc'

Código: Selecionar todos

*******************************************************************************
FUNCTION TECLAPESQ(nMod)
LOCAL GETLIST := {}, nRecno

IF nMod=4

	IF LASTKEY() == 13	 // ENTER

		IF ALIAS()="ORC"
			VENDACUP(IF(ORC->TIPO='P',1,3))
			RETURN(2)
		ELSE
			cVar := aCampo[1]
			cVar := &cVar.
			SETCURSOR(0)
		ENDIF
		RETURN(0)
		
	ELSEIF LASTKEY() == 305   // ALT + N
	
	   IF ALIAS()="ORC"
			VENDACUP(2)
			RETURN(2)
		ELSE
			cVar := aCampo[1]
			cVar := &cVar.
			SETCURSOR(0)
		ENDIF
		RETURN(0)
		
	ELSEIF LASTKEY() == 286 .AND. ALIAS()="PRO"

		APLICAPRO()

	ELSEIF LASTKEY() == K_INS

		// SE ALIAS PRO - CADASTRA NOVO PRODUTO
		IF ALIAS()="PRO"
		
			GETOLD := GETLIST
			GETLIST:= {}
			nRECNOVO := 0
			
			IF ALERT("DESEJA ",{"ALTERAR","CADASTRAR NOVO"})=1
			   ALT_PRO()
			ELSE
			   INC_PRO()
			ENDIF
						
			GETLIST:= GETOLD
			SELE PRO
			IF nRECNOVO != 0
				DBGOTO( nRECNOVO )
			ENDIF
			
		ENDIF
		SETCURSOR(0)
		
	ELSEIF LASTKEY() == K_F6

	   IF ALIAS()='PRO'
		  // PESQUISA CODIGO DE BARRAS
		  PESQCODBARRA()
       ENDIF

	ELSEIF LASTKEY() == K_F11

	   IF ALIAS()='PRO'
		  // PESQUISA CODIGO DE BARRAS
		  PESQREF()
       ENDIF

	ELSEIF LASTKEY() == 27

		IF(VALTYPE(&(aCampo[1])) == "N",cVar := 0,cVar := SPACE(LEN(&(aCampo[1]))))
		SETCURSOR(0)
		RETURN(0)

	ELSEIF LASTKEY() == K_F2

		nRecno 		:= RECNO() 
		cSalvTela 	:= SAVESCREEN(24,00,24,79) 
		nOrd 			:= INDEXORD()
		DBSETORDER(nOrdPes1)
		COR("MENU") 
		@ 24,00 CLEAR TO 24,79
		cPer := IF(VALTYPE(&(aCampo[nF2])) == "C",SPACE(LEN(&(aCampo[nF2]))),0)
		@ 24,10 SAY aTitulo[nF2] + ": " GET cPer PICTURE aPict[nF2] VALID IF(aPict[nF2] == "999999",ZERO(@cPer,6),.T. == .T.)
		nOldCursor := SETCURSOR(2)
		READ

		IF EMPTY(cPer)
			RESTSCREEN(24,00,24,79,cSalvTela) 
			DBSETORDER(nOrd) 
			SETCURSOR(0)
		RETURN(1)

		ENDIF

		IF lZero
			cPer := STRZERO(VAL(cPer),LEN(cPer))
		ENDIF
	
		cPer:= IF(VALTYPE(cPer) == "C",ALLTRIM(cPer),cPer)
		SETCURSOR(nOldCursor)
		COR("MENU")
		@ 24,00 CLEAR TO 4,79
		DBGOTOP()
	
		IF !DBSEEK(cPer,.T.)
	
			BEEP()
			MENSAGEM("Desculpe, "+aTitulo[nF2]+" n„o encontrado !",3)
			DBGOTO(nRecno)
			RESTSCREEN(24,00,24,79,cSalvTela)
			SETCURSOR(0)
	
		ENDIF
	
		RESTSCREEN(24,00,24,79,cSalvTela)
		DBSETORDER(nOrd)
		SETCURSOR(0)
		RETURN(2)

	ELSEIF LASTKEY() == K_F5

		IF llF5

			nRecno		:= RECNO()
			cSalvTela 	:= SAVESCREEN(24,00,24,79)
			nOrd			:= INDEXORD()
			DBSETORDER(nOrdPes2)
			COR("MENU")
			@ 24,00 CLEAR TO 24,79
			nTAMCAMPO 	:= LEN(&(aCampo[nF5]))
			cPer			:= IF( nTAMCAMPO > 40, SPACE(40), SPACE(LEN(&(aCampo[nF5]))))
			@ 24,10 SAY ALLTRIM( LEFT(aTitulo[nF5],15) )+ ": " GET cPer PICTURE aPict[nF5] VALID IF(aPict[nF5] == "999999",ZERO(@cPer,6),.T. == .T.)
			nOldCursor	:= SETCURSOR(2)
			READ

			cPer:= ALLTRIM(cPer)
			SETCURSOR(nOldCursor)
			COR("MENU")
			@ 24,00 CLEAR TO 4,79

			IF EMPTY(cPer)
				RESTSCREEN(24,00,24,79,cSalvTela)
				DBSETORDER(nOrd)
				SETCURSOR(0)
				RETURN(1)
			ENDIF

			cPer := cEspaco+cPer
			DBGOTOP()
			IF !DBSEEK(cPer,.T.)
				BEEP()
				MENSAGEM("Desculpe, "+aTitulo[nF5]+" n„o encontrado !",3)
				DBGOTO(nRecno)
				RESTSCREEN(24,00,24,79,cSalvTela)
				SETCURSOR(0)
			ENDIF
			RESTSCREEN(24,00,24,79,cSalvTela)
			DBSETORDER(nOrd)
			SETCURSOR(0)
			RETURN(2)
		ENDIF
	ENDIF
	RETURN(1)

ELSEIF nMod=1
	// INICIO DO ARQUIVO

	BEEP()
	MENSAGEM("In¡cio da Consulta !",3)
	SETCURSOR(0)
	RETURN(1)

ELSEIF nMod=2

	// FIM DO ARQUIVO
	BEEP()
	MENSAGEM("Fim da Consulta !",3)
	SETCURSOR(0) ; RETURN(1)

ELSEIF nMod=3

	// ARQUIVO VAZIO
	BEEP()
	BEEP()
	MENSAGEM("N„o h  dados cadastrados para consulta !",4)
	SETCURSOR(0) ; RETURN(0)

ENDIF
RETURN(1)

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 11:23
por Jairo Maia
Olá Rubens,

Não uso DbEdit(), mas salvo se algum colega tenha outra opinião, o DbEdit() no xHarbour é lento mesmo, e em rede chega a ficar impossível.

Melhora se você não usar elementos gráficos (drivers GT), e se você usar CDX, mas ainda assim não é solução satisfatória. Isto aliás já foi amplamente comentado inclusive em fóruns internacionais, e como você disse, e até onde tenho a oportunidade de acompanhar essas discussões, a solução foi sempre trocar por TBrowse().

Um detalhe não relacionado a lentidão, mas se aceita uma dica sobre transporte de dados de matrizes em xHarbour e Harbour, você deve usar AClone() Nas linhas 40 e 50 do seu exemplo você faz transporte de dados de matrizes (particularmente nesse caso específico, não vejo necessidade, pois GetList foi declarada Local), mas dentro do raciocínio, sugiro desta forma:

Código: Selecionar todos

GETOLD := AClone( GETLIST )
e
GETLIST:= AClone( GETOLD )

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 14:38
por Kapiaba

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 14:47
por rubens
Pois eh... Jairo... parece que vai ser tbrowse, vou tentar generalizar porque tenho um função pesquisa usando o dbedit, vou tentar modificar para tbrowse...
Kabiaba eu já tinha visto esta postagem na pesquisa que fiz... para mim foi um dos inconclusivos... e ele é de 2007. Achei que de lá para cá alguém poderia ter achado uma solução. de qualquer forma agradeço a ajuda...

Obg

Rubens

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 18:49
por fladimir
Rubens TS resolve, porém vc quer saber pelo DBEdit, eu qdo migrei de clipper pra xHarbour na época tive muitos problemas com o DBEdit e a solução foi compilar o DBEdit.PRG junto com minha app e ai resolveu.

Porém qdo migrei pra Harbour tive que tirar o DBEdit.PRG, não precisando compilar mais junto pois no Harbour não tive mais problemas com o DBEdit.

Se vc procurar aki no fórum mesmo em postagens minhas de problemas com o DBEdit verá várias.

Se vc tiver o DBEdit.PRG vale a pena fazer o teste, pelo menos seria uma possibilidade a menos.

[]´s

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 19:04
por Jairo Maia
Olá Pessoal,

Boa idéia Fladimir. Se resolveu com você, pode ser que seja a solução. No site do WAGUCS tem os fontes do DbEdit() aqui: http://www.vagucs.com.br/cgi-bin/vagucs ... dioma=ptbr. Procure por: DBEDIT Alternativo, e faça o teste.

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 21:27
por rubens
Eu compilei um dbedit.prg que vem no proprio xharbour... teve uma melhora significativa mas não resolveu por completo..
Fladimir quando você fala que no harbour não teve problemas, está se referindo que no harbour você usou o dbedit e não teve nenhum problema.. isso?
Vou montar um ambiente pro harbour amanhã e tentar compilar com o harbour... para ver...
Não acho que vou ter dificuldade de compilar... não tem lib externa... só uns ch modificado que o xharbour aceitou de boa...

Obg
Rubens

Dbedit muito lento no xHarbour

Enviado: 05 Nov 2014 22:48
por fladimir
Isso mesmo Rubens, no Harbou não tive problemas com o DBEdit, faça isto q vc mencionou para comparar e ter uma base, mas no xHarbour compilando o DBEdit deveria ter funcionado, pelo menos na época com a versão xHb q eu usava funcionou, agora não lembro qual era a versão.

[]´s

Dbedit muito lento no xHarbour

Enviado: 07 Nov 2014 16:09
por rubens
Senhores...

Dentro da limitação da velocidade do pc o problema foi resolvido... depois de compilado com o harbour 3.20.
Até agora não houve mais nenhuma reclamação por parte dos usuários...

Obrigado

Rubens

Dbedit muito lento no xHarbour

Enviado: 07 Nov 2014 17:08
por paiva
OI

veja se te ajuda


a maioria dos prg troquei dbedit por esta função

qq duvida pode perguntar


a fucnao esta embaixo encima mostro como usa-la


PAiva