Browse com ADO

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Browse com ADO

Mensagem por JoséQuintas »

não uso isso, vai precisar dar uma olhada nas variáveis do tbrowse, em algum help do Clipper.
Ou... no fonte do browse do Harbour, ou em algum fonte de tbrowse do fórum.
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

Browse com ADO

Mensagem por JoséQuintas »

Faltou colocar: com WITH OBJECT simplifica um pouco digitar também:

Código: Selecionar todos

 oTemporario := oConexao:Execute( "SELECT CODIGO, NOME, ENDERECO FROM CLIENTES ORDER BY NOME" )
 oTBrowse := { ;
   { "CODIGO", { || Pad( oTemporario:Fields( "CODIGO" ):Value, 10 ) } }, ;
   { "NOME",  { || Pad( oTemporario:Fields( "NOME" ):Value, 30 ) } }, ;
   { "ENDERECO", { || Pad( oTemporario:Fields( "ENDERECO" ):Value, 30 ) } } }
 BrowseADO( oTemporario, oTBrowse )
 oTemporario:Close()
Usando WITH OBJECT não precisa colocar oTemporario:Isto, oTemporario:Aquilo, basta :Isto, :Aquilo

Código: Selecionar todos

 oTemporario := oConexao:Execute( "SELECT CODIGO, NOME, ENDERECO FROM CLIENTES ORDER BY NOME" )
WITH OBJECT oTemporario
 oTBrowse := { ;
   { "CODIGO", { || Pad( :Fields( "CODIGO" ):Value, 10 ) } }, ;
   { "NOME",  { || Pad( :Fields( "NOME" ):Value, 30 ) } }, ;
   { "ENDERECO", { || Pad( :Fields( "ENDERECO" ):Value, 30 ) } } }
 BrowseADO( oTemporario, oTBrowse )
:Close()
ENDWITH
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

Browse com ADO

Mensagem por Fernando queiroz »

Código: Selecionar todos

		cQuery:= "SELECT LOGGERAL_NUMNOT, LOGGERAL_CODPRO, LOGGERAL_DATMOV, LOGGERAL_TIPMOV, LOGGERAL_CODVEN, LOGGERAL_CLIFOR, LOGGERAL_QUANT, LOGGERAL_VALUNI, LOGGERAL_OPERADOR from loggeral"
		oTemporario := oCn:EXECUTE(cQuery)	
		

		INIT DIALOG oDlg TITLE "Log Geral - Consulta"  ;
			ICON MEMVAR->SGC_ICON  ;
			AT 0, 0 SIZE 1167,600 CLIPPER  NOEXIT  

		ThisBRW := oDlg		
		
		@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
				ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS 		

			oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
			oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)			
			oBrowse1:aArray := oTemporario
			oBrowse1:AddColumn( HColumn():New( "Nr.NOTA",{|v,o|o:aArray[o:nCurrent,1]},"C",16,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Codigo",{|v,o|o:aArray[o:nCurrent,2]},"C",10,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Movimento",{|v,o|o:aArray[o:nCurrent,3]},"D",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Tipo",{|v,o|o:aArray[o:nCurrent,4]},"N",1,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Vendedor",{|v,o|o:aArray[o:nCurrent,5]},"N",4,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Cli/For",{|v,o|o:aArray[o:nCurrent,6]},"C",10,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Quantidade",{|v,o|o:aArray[o:nCurrent,7]},"N",14,2,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Valor Unit.",{|v,o|o:aArray[o:nCurrent,8]},"N",14,2,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Operador",{|v,o|o:aArray[o:nCurrent,9]},"C",20,0,.F., ) )

		@ 8,-1 TOOLBAR oToolbar1  SIZE 1160,40 ;
			oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| DBCLOSEALL(), oDlg:Close() },'Sair da rotina','', "oToolbutton14")
			oToolbar1:CreateTool()

		ACTIVATE DIALOG oDlg CENTER    

		oCn:Close()

RETURN NIL

STATIC FUNCTION MySqlConnection( cServer, cDatabase, cUser, cPassword, nPort )

   LOCAL cnConnection

   hb_Default( @nPort, 3306 )

   cnConnection:= win_OleCreateObject( "ADODB.Connection" )
   cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
   cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
   cnConnection:ConnectionString += ;
      "Server=" + cServer + ";" + ;
      "Port=" + Ltrim( Str( nPort ) ) + ";" + ;
      "Stmt=;" + ;
      "Database=" + cDatabase + ";" + ;
      "User=" + cUser + ";" + ;
      "Password=" + cPassword + ";" + ;
      "Collation=utf8_general_ci;" + ;
      "AUTO_RECONNECT=1;" + ;
      "COMPRESSED_PROTO=0;" + ;
      "PAD_SPACE=1"
   cnConnection:CursorLocation    := 3
   cnConnection:CommandTimeOut    := 600 // seconds
   cnConnection:ConnectionTimeOut := 600 // seconds

   RETURN cnConnection

STATIC FUNCTION win_OsIs10(); RETURN .T.
Fiz o código acima mas não estou tendo resultados, acontece o erro

Error WINOLE/1016 Argument error (DOS Error -2147352562)
Called from ->WIN_OLEAUTO:__OPARRAYINDEX(0)
Called from CONSULTALOGGERALMARIADB.PRG->LOGGERALMARIADB(40) essa linha (oBrowse1:AddColumn( HColumn():New( "Nr.NOTA",{|v,o|o:aArray[o:nCurrent,1]},"C",16,0,.F., ) ))
Called from SGC.PRG->(b)MAIN(367)
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(930)

HWGUI 2.22 Build 4
Date:14/03/2020
Time:11:52:33

alguém que possa dar uma ajuda , pois não sei o que retorna da query, to perdido
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

Browse com ADO

Mensagem por JoséQuintas »

O SELECT retorna o recorset do ADO, no formato do ADO.

Código: Selecionar todos

oRs := cn:Execute( "SELECT CODIGO, NOME.... " )
DO WHILE ! oRs:Eof()
   ? oRs:Fields( "CODIGO" ):Value // ou oRs:Fields( 0 ):Value
   ? oRs:Fields( "NOME" ):Value  // ou oRs:Fields( 1 ):Value
  oRs:MoveNext()
ENDDO
oRs:Close()
Acho que tá confundindo com hbMySql() que retorna como 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/
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

Browse com ADO

Mensagem por Fernando queiroz »

consegui fazer a coisa funcionar
MARIADB + ADO + HWGUI

Código: Selecionar todos

/*
TITULO     : SISTEMA DE GEST¦O DE COMERCIO
DATA       : 14/03/2020
PROGRAMA   : CONSULTALOGGERAL.PRG
COMENTARIO : CONSULTA LOG GERAL COM MARIADB
*/
#pragma -w0
#pragma -es0 

#include "hwgui.ch"
******************************************
FUNCTION LOGGERALMARIADB(  )
******************************************

LOCAL oDlg;
	, oLabel1, oLabel2, oLabel3;
	, obusca, oBrowse1 ;
	, oToolbar1;
	, oToolbutton1, oToolbutton2, oToolbutton3, oToolbutton4;
	, oDatepicker1 , oDatepicker2 ;
	, oColuna, bColorBlock ;
	, vBusca := "";
	, oQuery, oRow;
	, aArray, oElemento;
	, aResult:= {}

	
PRIVATE   cProgressKey:="" ,dDatepicker1:=(m->dat_hoje - 30), dDatepicker2:=m->dat_hoje, lFiltro:=.T., nCODPRO:=0;
		, oLabel5 :="",  oLabel7 :="", oLabel10 :="", oLabel11 :="", oLabel6 :="", oLabel9 :="", oLabel12 :="", oLabel18 :=""

	
	oServer := MySqlConnection( "192.168.15.200", "", "sgcroot", "20r13uqse" )
	oServer:Open()
	oServer:Execute( "USE AMADEU")
	oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT,";
									   + "LOGGERAL_CODPRO,";
									   + "LOGGERAL_DATMOV,";
									   + "LOGGERAL_TIPMOV,";
									   + "LOGGERAL_CODVEN,";
									   + "LOGGERAL_CLIFOR,";
									   + "LOGGERAL_QUANT,";
									   + "LOGGERAL_VALUNI,";
									   + "LOGGERAL_OPERADOR ";
								+ "from loggeral LIMIT 9" )

	DO WHILE ! oQuery:Eof()
		aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
						oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
						oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
						oQuery:Fields( "LOGGERAL_TIPMOV" ):Value,;
						oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
						oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
						oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
						oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
						oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

		oQuery:MoveNext()
	ENDDO
	oQuery:Close()

	
		INIT DIALOG oDlg TITLE "Log Geral - Consulta"  ;
			ICON MEMVAR->SGC_ICON  ;
			AT 0, 0 SIZE 1167,600 CLIPPER  NOEXIT  

		ThisBRW := oDlg	
		
		@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,460 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
				ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS 	

			oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
			oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)			
			oBrowse1:aArray := aResult	

	
			oBrowse1:AddColumn( HColumn():New( "Nr.Nota",hwg_ColumnArBlock(),"C",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Codigo",hwg_ColumnArBlock(),"C",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Movimento",hwg_ColumnArBlock(),"C",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Tipo",hwg_ColumnArBlock(),"C",1,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Vendedor",hwg_ColumnArBlock(),"C",4,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Cli/For",hwg_ColumnArBlock(),"C",10,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Quantidade",hwg_ColumnArBlock(),"C",14,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Valor Unit.",hwg_ColumnArBlock(),"C",14,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Operador",hwg_ColumnArBlock(),"C",20,0,.F., ) )
			

		@ 8,-1 TOOLBAR oToolbar1  SIZE 1160,40 ;
			 
//			oToolbar1:AddButton("BRW_FIL", , 4, 16, "Aplica" ,{||FILTROLOGGERAL(  ),obrowse1:REFRESH()},'Aplica Filtro no Arquivo de Log Geral','', "oToolbutton1") 
//			oToolbar1:AddButton("BRW_DFIL", , 4, 16, "Remove" ,{||REMOVEFILTROLOGGERAL(  ),obrowse1:REFRESH()},'Remover Filtro do Arquivo de Log Geral','', "oToolbutton2")
			oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| DBCLOSEALL(), oDlg:Close() },'Sair da rotina','', "oToolbutton14")
			oToolbar1:CreateTool()

		ACTIVATE DIALOG oDlg CENTER    

		oServer:Close()

RETURN NIL

FUNCTION MySqlConnection( cServer, cDatabase, cUser, cPassword, nPort )

   LOCAL cnConnection

   hb_Default( @nPort, 3306 )

   cnConnection:= win_OleCreateObject( "ADODB.Connection" )
   cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
   cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
   cnConnection:ConnectionString += ;
      "Server=" + cServer + ";" + ;
      "Port=" + Ltrim( Str( nPort ) ) + ";" + ;
      "Stmt=;" + ;
      "Database=" + cDatabase + ";" + ;
      "User=" + cUser + ";" + ;
      "Password=" + cPassword + ";" + ;
      "Collation=utf8_general_ci;" + ;
      "AUTO_RECONNECT=1;" + ;
      "COMPRESSED_PROTO=0;" + ;
      "PAD_SPACE=1"
   cnConnection:CursorLocation    := 3
   cnConnection:CommandTimeOut    := 600 // seconds
   cnConnection:ConnectionTimeOut := 600 // seconds

   RETURN cnConnection

FUNCTION win_OsIs10(); RETURN .T.
A TELA FICOU ASSIM , FALTA AJUSTES MAS ja deu uma boa iluminada
tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Browse com ADO

Mensagem por alxsts »

Olá!

Parabéns!

Dicas:

1 - Sempre declare as variáveis antes de as utilizar.

2 - Procure nunca usar variáveis PRIVATE e PUBLIC. Use LOCAL ou STATIC

3 - Este bloco de código

Código: Selecionar todos

   DO WHILE ! oQuery:Eof()
      aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
                  oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
                  oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
                  oQuery:Fields( "LOGGERAL_TIPMOV" ):Value,;
                  oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
                  oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
                  oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
                  oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
                  oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

      oQuery:MoveNext()
   ENDDO
Pode ser trocado por apenas uma linha, utilizando-se um recurso do ADO que coloca o conteúdo de um record set em um array:

Código: Selecionar todos

aResult := oQuery:getRows()
Ou na declaração do browse:

Código: Selecionar todos

oBrowse1:aArray := oQuery:getRows()   
[]´s
Alexandre Santos (AlxSts)
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

Browse com ADO

Mensagem por Fernando queiroz »

Fazendo as correções ficou assim

Código: Selecionar todos

		oBrowse1:AddColumn( HColumn():New( "Nr.Nota",hwg_ColumnArBlock(),"C",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Codigo",hwg_ColumnArBlock(),"C",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Movimento",hwg_ColumnArBlock(),"D",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Tipo", hwg_ColumnArBlock(),"N",12,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Vendedor",hwg_ColumnArBlock(),"N",10,0,.F.,1,2,'9999' ) )
			oBrowse1:AddColumn( HColumn():New( "Cli/For",hwg_ColumnArBlock(),"C",10,0,.F., ) )
			oBrowse1:AddColumn( HColumn():New( "Quantidade",hwg_ColumnArBlock(),"N",14,2,.F.,1,2,'99999999999.99' ) )
			oBrowse1:AddColumn( HColumn():New( "Valor Unit.", hwg_ColumnArBlock(),'N',14,2,.F.,1,2,'@E 99,999,999,999.99' ) )
			oBrowse1:AddColumn( HColumn():New( "Operador",hwg_ColumnArBlock(),"C",20,0,.F., ) )
resultado final , muito bom
tela.jpg
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

Browse com ADO

Mensagem por Fernando queiroz »

alxsts escreveu:Olá!

Parabéns!

Dicas:

1 - Sempre declare as variáveis antes de as utilizar.

2 - Procure nunca usar variáveis PRIVATE e PUBLIC. Use LOCAL ou STATIC

3 - Este bloco de código

Código: Selecionar todos

   DO WHILE ! oQuery:Eof()
      aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
                  oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
                  oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
                  oQuery:Fields( "LOGGERAL_TIPMOV" ):Value,;
                  oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
                  oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
                  oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
                  oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
                  oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

      oQuery:MoveNext()
   ENDDO
Pode ser trocado por apenas uma linha, utilizando-se um recurso do ADO que coloca o conteúdo de um record set em um array:

Código: Selecionar todos

aResult := oQuery:getRows()
Ou na declaração do browse:

Código: Selecionar todos

oBrowse1:aArray := oQuery:getRows()   
fiz o que você falou e trazia os dados de uma linha como uma coluna
pode ser a versão do harbour 3.2 que eu tenho que pode estar errada
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

Browse com ADO

Mensagem por JoséQuintas »

Fernando queiroz escreveu:fiz o que você falou e trazia os dados de uma linha como uma colunapode ser a versão do harbour 3.2 que eu tenho que pode estar errada
Lembro de alguma alteração no Harbour sobre transferir array.
Inclusive, se não me engano, não tem no Harbour 3.4.

Lembro de ter lido mensagem.
Na época tinha a ver com gravar as colunas direto no Excel, e não dava certo.
Se não me engano era esse problema, mas só detectaram pra Excel.
Lógico, ao resolver, já resolveria pro ADO também.
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

Browse com ADO

Mensagem por JoséQuintas »

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

Browse com ADO

Mensagem por JoséQuintas »

Só comentário extra:

É tipo.... gravar o array diretamente no Excel, ou vice-versa.
Tem a ver com a hbwin, e o tratamento de OLE "CreateObject()"

No caso do Excel, é a diferença entre gravar uma coluna de cada vez, ou a planilha inteira de uma vez.
Então... o assunto é interessante, porque o ganho de velocidade pode ser extremo.

Por isso lembrei dele, porque um dia poderia me ser útil.

O problema da época era essa inversão do array multidimensional.
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

Browse com ADO

Mensagem por Fernando queiroz »

QUINTAS fazendo como fiz na rotina o legal é que posso fazer algumas coisas no query e depois so mudar a coluna de lugar , facilita muito

ex:

Código: Selecionar todos

		oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT,";
										   + "LOGGERAL_CODPRO,";
										   + "LOGGERAL_DATMOV,";
										   + "LOGGERAL_CODVEN,";
										   + "LOGGERAL_CLIFOR,";
										   + "LOGGERAL_QUANT,";
										   + "LOGGERAL_VALUNI,";
										   + "LOGGERAL_OPERADOR, ";
										   + "CASE WHEN LOGGERAL_TIPMOV IS TRUE THEN 'ENTRADA' ELSE 'SAIDAS' END AS STATUS_GERAL ";
									+ "from loggeral WHERE LOGGERAL_CODPRO = " + STRZERO(nCODPRO,7,0);
									+ " AND  LOGGERAL_DATMOV BETWEEN '" ;
									+ STRZERO(YEAR(dDatepicker1),4,0) + "-" + STRZERO(MONTH(dDatepicker1),2,0) + "-" + STRZERO(DAY(dDatepicker1),2,0);
									+ "' AND '";
									+ STRZERO(YEAR(dDatepicker2),4,0) + "-" + STRZERO(MONTH(dDatepicker2),2,0) + "-" + STRZERO(DAY(dDatepicker2),2,0);
									+ "'" )

		DO WHILE ! oQuery:Eof()
			aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
							oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
							oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
							oQuery:Fields( "STATUS_GERAL" ):Value,;
							oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
							oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
							oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
							oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
							oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

			oQuery:MoveNext()
		ENDDO
		oQuery:Close()
onde o STATUS_GERAL nao existe no banco , eu criei ele baseado em uma condição do LOGGERAL_TIPMOV e já joguei no local certo como o TIPO
tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Browse com ADO

Mensagem por gilbertosilverio »

Ola Fernando,

Não é possível você postar toda a rotina de como você fez o filtro desta pesquisa em ADO/MARIADB, para eu poder estudar, pois por mais que eu tente não consigo entender como funciona.

Ja li muito e vi muito exemplos postados pelo Quintas e pelo Simões, mais não tem jeito, pela complexidade, não consigo fazer funcionar na HWGUI.

Com este teu exemplo por ser básico, consegui fazer algo, mais parei ai...

Se você também tiver um exemplo básico de como salvar os dados em uma alteração, inclusao, exclução, com ADO/MARIADB para eu estudar e ver como funciona ficaria muito agradecido, pois os exemplos que encontrei são muito complexos, e meu tico/teco se perdem... kkkk
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
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

Browse com ADO

Mensagem por Fernando queiroz »

Código: Selecionar todos

/*
TITULO     : SISTEMA DE GEST¦O DE COMERCIO
DATA       : 14/03/2020
PROGRAMA   : CONSULTALOGGERAL.PRG
COMENTARIO : CONSULTA LOG GERAL COM MARIADB
*/
#pragma -w0
#pragma -es0 

#include "hwgui.ch"
******************************************
FUNCTION LOGGERALMARIADB(  )
******************************************

LOCAL oDlg;
	, oLabel1, oLabel2, oLabel3;
	, obusca, oBrowse1 ;
	, oToolbar1;
	, oToolbutton1, oToolbutton2, oToolbutton3, oToolbutton4;
	, oDatepicker1 , oDatepicker2 ;
	, oColuna, bColorBlock ;
	, vBusca := "";
	, oQuery, oRow;
	, aArray, oElemento;
	, aResult:= {}
	
PRIVATE   cProgressKey:="" ,dDatepicker1:=(m->dat_hoje - 30), dDatepicker2:=m->dat_hoje, lFiltro:=.T., nCODPRO:=0;
		, oLabel5 :="",  oLabel7 :="", oLabel10 :="", oLabel11 :="", oLabel6 :="", oLabel9 :="", oLabel12 :="", oLabel18 :="";
		

	IF ! ABRE_PRODUTOS( )
	   DBCLOSEALL()
	   RETURN
	END
	
	oServer := MySqlConnection( "192.168.15.200", "", "sgcroot", "20r13uqse" )
	oServer:Open()
	oServer:Execute( "USE AMADEU")
	oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT,";
									   + "LOGGERAL_CODPRO,";
									   + "LOGGERAL_DATMOV,";
									   + "LOGGERAL_CODVEN,";
									   + "LOGGERAL_CLIFOR,";
									   + "LOGGERAL_QUANT,";
									   + "LOGGERAL_VALUNI,";
									   + "LOGGERAL_OPERADOR, ";
									   + "CASE WHEN LOGGERAL_TIPMOV IS TRUE THEN 'ENTRADA' ELSE 'SAIDAS' END AS STATUS_TIPO ";
								+ "from loggeral WHERE LOGGERAL_DATMOV BETWEEN '";
								+ STRZERO(YEAR(dDatepicker1),4,0) + "-" + STRZERO(MONTH(dDatepicker1),2,0) + "-" + STRZERO(DAY(dDatepicker1),2,0);
								+ "' AND '";
								+ STRZERO(YEAR(dDatepicker2),4,0) + "-" + STRZERO(MONTH(dDatepicker2),2,0) + "-" + STRZERO(DAY(dDatepicker2),2,0);
								+ "'" )

	DO WHILE ! oQuery:Eof()
		aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
						oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
						oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
						oQuery:Fields( "STATUS_TIPO" ):Value,;
						oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
						oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
						oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
						oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
						oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

		oQuery:MoveNext()
	ENDDO
	oQuery:Close()

	
	INIT DIALOG oDlg TITLE "Log Geral - Consulta"  ;
		ICON MEMVAR->SGC_ICON  ;
		AT 0, 0 SIZE 1167,600 CLIPPER  NOEXIT  

	ThisBRW := oDlg	
	
	@ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1160,495 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
			ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS 	

		oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
		oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)			
		oBrowse1:aArray := aResult	

		oBrowse1:AddColumn( HColumn():New( "Nr.Nota",hwg_ColumnArBlock(),"C",12,0,.F., ) )
		oBrowse1:AddColumn( HColumn():New( "Codigo",hwg_ColumnArBlock(),"C",12,0,.F., ) )
		oBrowse1:AddColumn( HColumn():New( "Movimento",hwg_ColumnArBlock(),"D",12,0,.F., ) )
		oBrowse1:AddColumn( HColumn():New( "Tipo", hwg_ColumnArBlock(),"C",12,0,.F., ) )
		oBrowse1:AddColumn( HColumn():New( "Vendedor",hwg_ColumnArBlock(),"N",10,0,.F.,1,2,'9999' ) )
		oBrowse1:AddColumn( HColumn():New( "Cli/For",hwg_ColumnArBlock(),"C",10,0,.F., ) )
		oBrowse1:AddColumn( HColumn():New( "Quantidade",hwg_ColumnArBlock(),"N",14,3,.F.,1,2,'99999999999.999' ) )
		oBrowse1:AddColumn( HColumn():New( "Valor Unit.", hwg_ColumnArBlock(),'N',14,2,.F.,1,2,'@E 99,999,999,999.99' ) )
		oBrowse1:AddColumn( HColumn():New( "Operador",hwg_ColumnArBlock(),"C",20,0,.F., ) )
		

	@ 8,-1 TOOLBAR oToolbar1  SIZE 1160,40 ;
		 
		oToolbar1:AddButton("BRW_FIL", , 4, 16, "Filtra" ,{||oBrowse1:aArray := FILTROLOGGERAL( ), obrowse1:REFRESH()},'Filtra o Arquivo de Log Geral','', "oToolbutton1") 
		oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| DBCLOSEALL(), oDlg:Close() },'Sair da rotina','', "oToolbutton14")
		oToolbar1:CreateTool()

    ADD STATUS PANEL TO oDlg HEIGHT 30  PARTS 200,120,300 
	
	@ 4,43 SAY oLabel1 CAPTION "Codigo"  SIZE 138,25 ;
		STYLE SS_CENTER +WS_DLGFRAME 
	@ 150,43 GET oEdit1 VAR nCODPRO SIZE 90,25 STYLE ES_RIGHT PICTURE '9999999' MAXLENGTH 7 		
		
	@ 245,43 OWNERBUTTON oOwnerbutton1  SIZE 24,24   ;
		TEXT ''  ;
		COORDINATES 0, 0, 0, 0  ;
		BITMAP 'FINDBMP' FROM RESOURCE TRANSPARENT;
		COORDINATES 0, 0, 0, 0 ;
		ON CLICK {|| ThisBRW:oEdit1:SETFOCUS(), CONSULTA_PRODUTOS( ), nCODPRO := VAL(PRODUTOS->CODPRO), ThisBRW:oEdit1:REFRESH() } 
		
	@ 283,47 SAY oLabel2 CAPTION "Periodo:"  SIZE 56,18  
	@ 349,43 GET DATEPICKER oDatepicker1 VAR dDatepicker1 SIZE 125,24 VALID {|| (dDatepicker1 < dDatepicker2) } 
	@ 482,47 SAY oLabel3 CAPTION "A"  SIZE 10,18
	@ 499,43 GET DATEPICKER oDatepicker2 VAR dDatepicker2 SIZE 125,24 
   
	ACTIVATE DIALOG oDlg CENTER    

	DBCLOSEALL()
	oServer:Close()

RETURN NIL
************************************************************************************
FUNCTION MySqlConnection( cServer, cDatabase, cUser, cPassword, nPort )
************************************************************************************
   LOCAL cnConnection

   hb_Default( @nPort, 3306 )

   cnConnection:= win_OleCreateObject( "ADODB.Connection" )
   cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
   cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
   cnConnection:ConnectionString += ;
      "Server=" + cServer + ";" + ;
      "Port=" + Ltrim( Str( nPort ) ) + ";" + ;
      "Stmt=;" + ;
      "Database=" + cDatabase + ";" + ;
      "User=" + cUser + ";" + ;
      "Password=" + cPassword + ";" + ;
      "Collation=utf8_general_ci;" + ;
      "AUTO_RECONNECT=1;" + ;
      "COMPRESSED_PROTO=0;" + ;
      "PAD_SPACE=1"
   cnConnection:CursorLocation    := 3
   cnConnection:CommandTimeOut    := 600 // seconds
   cnConnection:ConnectionTimeOut := 600 // seconds

   RETURN cnConnection
******************************************
FUNCTION win_OsIs10(); RETURN .T.
******************************************

*****************************************
STATIC FUNCTION onDlgInit(  )
*****************************************
   hwg_WriteStatus( ThisBRW,1,"Tabela: " + Alias())
   hwg_WriteStatus( ThisBRW,2,LTrim(Str( RecNo(),8))+ "/" +LTrim(Str( Lastrec(),8)))
   hwg_WriteStatus( ThisBRW,3,"Ordem: Codigo/Data Movimento")	

RETURN Nil

********************************************************
STATIC FUNCTION FILTROLOGGERAL(  )
********************************************************
LOCAL nI, aResult:={}

//	FOR nI = Len( aResult ) TO 1 STEP -1
//	   hb_ADel( aResult, nI, .T. )
//	NEXT

	IF nCODPRO # 0
		oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT,";
										   + "LOGGERAL_CODPRO,";
										   + "LOGGERAL_DATMOV,";
										   + "LOGGERAL_CODVEN,";
										   + "LOGGERAL_CLIFOR,";
										   + "LOGGERAL_QUANT,";
										   + "LOGGERAL_VALUNI,";
										   + "LOGGERAL_OPERADOR, ";
										   + "CASE WHEN LOGGERAL_TIPMOV IS TRUE THEN 'ENTRADA' ELSE 'SAIDAS' END AS STATUS_TIPO ";
									+ "from loggeral WHERE LOGGERAL_CODPRO = " + STRZERO(nCODPRO,7,0);
									+ " AND  LOGGERAL_DATMOV BETWEEN '" ;
									+ STRZERO(YEAR(dDatepicker1),4,0) + "-" + STRZERO(MONTH(dDatepicker1),2,0) + "-" + STRZERO(DAY(dDatepicker1),2,0);
									+ "' AND '";
									+ STRZERO(YEAR(dDatepicker2),4,0) + "-" + STRZERO(MONTH(dDatepicker2),2,0) + "-" + STRZERO(DAY(dDatepicker2),2,0);
									+ "'" )

		DO WHILE ! oQuery:Eof()
			aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
							oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
							oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
							oQuery:Fields( "STATUS_TIPO" ):Value,;
							oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
							oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
							oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
							oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
							oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

			oQuery:MoveNext()
		ENDDO
		oQuery:Close()
	ELSE
		oQuery := oServer:Execute( "SELECT LOGGERAL_NUMNOT,";
										   + "LOGGERAL_CODPRO,";
										   + "LOGGERAL_DATMOV,";
										   + "LOGGERAL_CODVEN,";
										   + "LOGGERAL_CLIFOR,";
										   + "LOGGERAL_QUANT,";
										   + "LOGGERAL_VALUNI,";
										   + "LOGGERAL_OPERADOR, ";
										   + "CASE WHEN LOGGERAL_TIPMOV IS TRUE THEN 'ENTRADA' ELSE 'SAIDAS' END AS STATUS_TIPO ";
									+ "from loggeral WHERE LOGGERAL_DATMOV BETWEEN '";
									+ STRZERO(YEAR(dDatepicker1),4,0) + "-" + STRZERO(MONTH(dDatepicker1),2,0) + "-" + STRZERO(DAY(dDatepicker1),2,0);
									+ "' AND '";
									+ STRZERO(YEAR(dDatepicker2),4,0) + "-" + STRZERO(MONTH(dDatepicker2),2,0) + "-" + STRZERO(DAY(dDatepicker2),2,0);
									+ "'" )


		DO WHILE ! oQuery:Eof()
			aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
							oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
							oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
							oQuery:Fields( "STATUS_TIPO" ):Value,;
							oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
							oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
							oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
							oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
							oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

			oQuery:MoveNext()
		ENDDO
		oQuery:Close()	
	ENDIF
	
RETURN aResult

****************************************
STATIC FUNCTION CONSULTA_PRODUTOS(  )
****************************************
LOCAL oDlgPro ;
	, oLabel1, oLabel2 ;
	, oBrowse4 ;
	, oColuna, bColorBlock, vBusca ;
	, oToolbar1 ;
	, nKeyPress 

PRIVATE cProgressKey:=""

	DBSELECTAREA("PRODUTOS")
	ORDSETFOCUS( 2 )
	PRODUTOS->(dbgotop())

	

  INIT DIALOG oDlgPro TITLE "Nota de Pedido - Consulta Produtos"  ;
		ICON MEMVAR->SGC_ICON  ;
		AT 0, 0 SIZE 1006,582 CLIPPER  NOEXIT NOCLOSABLE ;
		ON INIT {|This| onDlgInit3( This, oDlgPro ) }
    PRODUTOSBRW := oDlgPro

	@ 4,70 BROWSE oBrowse4 DATABASE OF oDlgPro SIZE 1000,480 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
			ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
			ON POSCHANGE {|| hwg_WriteStatus( oDlgPro,2,LTrim(Str( RecNo(),8))+ "/" +LTrim(Str( Lastrec(),8))) } ;
			ON CLICK {|| PESQUISAPRODUTO_onClick(  ) } ;
			ON KEYDOWN {|oBrowse4,nKeyPress| PESQUISAPRODUTO_onKeyDown( oBrowse4,nKeyPress ) }

		oBrowse4:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
		oBrowse4:oFont := HFont():Add( '',0,-18,700,,,)	
		oBrowse4:freeze := 2
//		oBrowse4:alias := 'PRODUTOS'
//		SELECT (oBrowse4:alias)  
		bColorBlock :={|| IIF(PRODUTOS->ESTATU + PRODUTOS->ESTL02 = 0.0000 ,{255, 16777215 ,16777215,255 },{0,16777215,, }) }	
		
		oBrowse4:AddColumn( HColumn():New('Codigo', FieldBlock( 'codpro' ) ,'C',9, 0 ,.F.,1,2,'@R 999999-9',,,,,;
		                    {|| Ordsetfocus(1), Dbgotop(), obrowse4:Refresh(), vBusca:="" ,  ;
							hwg_WriteStatus( oDlgPro,3,"Ordem: Codigo   ") } ,,,,))
							
		oBrowse4:AddColumn( HColumn():New('Descrição/Nome Produto', FieldBlock( 'despro' ) ,'C',58, 0 ,.F.,1,,'@S58',,,,,;
						{|| Ordsetfocus(2), Dbgotop(), obrowse4:Refresh(), vBusca:="" , ;
						hwg_WriteStatus( oDlgPro,3,"Ordem: Descriçao") } ,,,,))

		oBrowse4:AddColumn( HColumn():New('Unidade', FieldBlock( 'TIPUNI' ) ,'C',9, 0 ,.F.,1,,,,,,,,,,,))

		oBrowse4:AddColumn( HColumn():New('Preço Venda', FieldBlock( 'preven' ) ,'N',14, 2 ,.F.,1,2,'@E 999,999.99',,,,,,,,,))
		
		oBrowse4:AddColumn( HColumn():New('Estoque Loja', {|| IF(PROSER = "1",ESTATU,ESTATU*(-1)) } ,'N',12, 3 ,.F.,1,2,,,,,,,,,,))

//		bColorBlock :={|| IIF(PRODUTOS->ESTATU + PRODUTOS->ESTL02 = 0.0000 ,{255, 16777215 ,16777215,255 },{0,16777215,, }) }	

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

		
	@ 8,-1 TOOLBAR oToolbar1  SIZE 945,40 ;
		 
		oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| oDlgPro:Close() },'Sair da rotina','', "oToolbutton8")
		oToolbar1:CreateTool()

    ADD STATUS PANEL TO oDlgPro HEIGHT 30  PARTS 200,120,300 
	@ 4,43 SAY oLabel1 CAPTION "Pesquisar"  SIZE 138,25 ;
		STYLE SS_CENTER +WS_DLGFRAME 	
	@ 150,43 SAY oLabel2 CAPTION "" SIZE 410,25 ;
        STYLE WS_BORDER;
        COLOR 16777215  BACKCOLOR 255 

	ACTIVATE DIALOG oDlgPro  CENTER   

	
RETURN .T.

***********************************************************************************
STATIC FUNCTION onDlgInit3( This, oDlgPro )
   hwg_WriteStatus( oDlgPro,1,"Tabela: " + Alias())
   hwg_WriteStatus( oDlgPro,2,LTrim(Str( RecNo(),8))+ "/" +LTrim(Str( Lastrec(),8)))
   hwg_WriteStatus( oDlgPro,3,"Ordem: Descrição")	
RETURN .T.


******************************************************
STATIC FUNCTION PESQUISAPRODUTO_onClick(  ) 
	IF hwg_LastKey() ==	MK_LBUTTON
		PRODUTOSBRW:Close()
	ENDIF
RETURN .T.
********************************************************
STATIC FUNCTION PESQUISAPRODUTO_onKeyDown( oBrowse4,nKey )
   LOCAL nPosicao:=0, nKeyPress:=nkey
   LOCAL cRegEx := "[a-zA-Z0-9 ]{1}"
   KSETCAPS(.T.)

   aResult:=HB_RegExALL( cRegEx, Chr(nKeyPress) )

   IF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ "34|33|37|38|39|40|20|16"
      cProgressKey:=""
      PRODUTOSBRW: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
		PRODUTOSBRW:Close()		
		RETURN .T.   
	ENDI

		
// IF IsAscii(Chr(nKeyPress)) .AND. nKeyPress # 8
   If nKeyPress # 8
		cProgressKey += Chr(nKeyPress)
		nPosicao:=AScan(PRODUTOSBRW:oBrowse4:aArray,cProgressKey)
		PRODUTOSBRW:oLabel2:settext(cProgressKey)
		PRODUTOSBRW:oBrowse4:TOP()
		DBSEEK(cProgressKey,.T.)

   ELSEIF nKeyPress = 8 .AND. Len(cProgressKey) >= 1
		cProgressKey:=Left(cProgressKey,Len(cProgressKey) - 1)
		nPosicao:=AScan(PRODUTOSBRW:oBrowse4:aArray,cProgressKey)
		PRODUTOSBRW:oLabel2:settext(cProgressKey)
		PRODUTOSBRW:oBrowse4:TOP()
		DBSEEK(cProgressKey,.T.)
   ENDIF   
   IF nPosicao # 0
      oBrowse4:rowPos := nPosicao
      Eval( PRODUTOSBRW:oBrowse4:bGoTo, PRODUTOSBRW:oBrowse4, nPosicao )
      PRODUTOSBRW:oBrowse4:Refresh()
   ENDIF   
return .t.  

rotina completa para estudos , tem alguma coisas que podem ser melhoradas, como declarações de variaveis , mas era somente um teste
nao tive muita preocupação de deixar tudo bonitinho.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Browse com ADO

Mensagem por gilbertosilverio »

Fernando,

Muito obrigado.

E so pra eu tentar entender como funciona, como sou leigo (burro mesmo... kkkk) e com do básico que consigo dar inicio e ir avançando.

Valeu...
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Responder