Clipper On Line • Ver Tópico - Browse com ADO

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

 

Browse com ADO

Mensagempor JoséQuintas » 21 Dez 2019 11:44

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor JoséQuintas » 13 Mar 2020 22:41

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

 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

 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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor Fernando queiroz » 14 Mar 2020 13:54

      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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor JoséQuintas » 14 Mar 2020 14:43

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

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor Fernando queiroz » 17 Mar 2020 12:51

consegui fazer a coisa funcionar
MARIADB + ADO + HWGUI

/*
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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor alxsts » 17 Mar 2020 13:48

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
   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:
aResult := oQuery:getRows()
Ou na declaração do browse:
oBrowse1:aArray := oQuery:getRows()   
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2298
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 14 vezes
Mens.Curtidas: 159 vezes

Browse com ADO

Mensagempor Fernando queiroz » 17 Mar 2020 13:53

Fazendo as correções ficou assim

      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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor Fernando queiroz » 17 Mar 2020 13:59

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
   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:
aResult := oQuery:getRows()
Ou na declaração do browse:
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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor JoséQuintas » 17 Mar 2020 17:46

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor JoséQuintas » 17 Mar 2020 17:58

José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor JoséQuintas » 17 Mar 2020 18:11

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.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14341
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 859 vezes

Browse com ADO

Mensagempor Fernando queiroz » 17 Mar 2020 21:14

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:

      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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor gilbertosilverio » 18 Mar 2020 09:28

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 265
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 0 vez
Mens.Curtidas: 17 vezes

Browse com ADO

Mensagempor Fernando queiroz » 18 Mar 2020 09:38

/*
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.22 B4, SEFAZCLASS, DBFCDX, PDFClass, LETODBF
Fernando queiroz
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 421
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 5 vezes
Mens.Curtidas: 14 vezes

Browse com ADO

Mensagempor gilbertosilverio » 18 Mar 2020 11:10

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
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 265
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 0 vez
Mens.Curtidas: 17 vezes

Anterior Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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