browse ADO

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

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

Iniciando com hwgui

Mensagem por JoséQuintas »

Meu teste é assim: funcionou vai pro cliente, não funcionou não vai.
Não tem essa de ficar convertendo uma coisa de cada vez pra algum dia instalar.

Como estou gostando muito do resultado do SQL, e muita coisa é browse....
um browse gráfico seria ideal pra complementar o SQL, e já substituir várias telas.

Por enquanto terminar o serviço, que precisa funcionar, e outro dia vejo GUI novamente.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciando com hwgui

Mensagem por Itamar M. Lins Jr. »

Ola!
Tem como postar zipado este conteúdo ?

Código: Selecionar todos

 cnSQL
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Iniciando com hwgui

Mensagem por JoséQuintas »

Pensar em alguma coisa equivalente, que dê pra fazer teste isolado.
Talvez até um array hash.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

Deu sinal de vida

Código: Selecionar todos

#include "hwgui.ch"

Function Main
Local oMainWindow

   INIT WINDOW oMainWindow MAIN TITLE "Example" ;
     AT 200,0 SIZE 400,150

   MENU OF oMainWindow
      MENUITEM "&Exit" ACTION hwg_EndWindow()
      MENUITEM "&Dialog" ACTION DlgGet()
   ENDMENU

   ACTIVATE WINDOW oMainWindow
Return Nil

STATIC FUNCTION DlgGet()

   LOCAL oModDlg, oBrw1, cnSQL

   cnSQL := win_OleCreateObject( "ADODB.Recordset" )
   cnSQL:Open( hb_cwd() + "teste.ado" )

   INIT DIALOG oModDlg TITLE "Licenças" AT 0,0 SIZE 1024,768

   @ 1,1 BROWSE oBrw1 SIZE 1022,700 ;
        STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL
   @ 500,720 OWNERBUTTON ON CLICK {|| hwg_EndDialog()} ;
       SIZE 180,36 FLAT                                ;
       TEXT "Close" COLOR hwg_ColorC2N("0000FF")
   oBrw1:aarray := cnSQL
   oBrw1:AddColumn( HColumn():New( "Codigo", { |v,o| (v), o:aArray:Fields( "CODIGO" ):Value },"C",6,0,.F.,DT_CENTER ) )
   oBrw1:AddColumn( HColumn():New( "Nome",   { |v,o| (v), o:aArray:Fields( "NOME" ):Value }, "C",30,0,.T.,DT_CENTER,DT_RIGHT ) )
   oBrw1:aColumns[2]:lResizable := .F.
   oBrw1:bSkip := { |o,nSkip| ADOSkipper( o:aArray, nSkip ) }
   oBrw1:bGotop := { |o| o:aArray:MoveFirst() }
   oBrw1:bGobot := { |o| o:aArray:MoveLast() }
   oBrw1:bEof  := { |o| o:aArray:Eof() }
   oBrw1:bBof  := { |o| o:aArray:Bof() }
   oBrw1:bRcou := { |o| o:aArray:RecordCount() }
   oBrw1:bRecno := { |o| o:aArray:AbsolutePosition }
   oBrw1:bGOTO := { |o,n| (o),o:aArray:Move( n ) }

   ACTIVATE DIALOG oModDlg
   Inkey(10)
Return Nil

FUNCTION ADOSkipper( cnSQL, nSkip )

   LOCAL nRec := cnSQL:AbsolutePosition()
      IF ! cnSQL:Eof()
         cnSQL:Move( nSkip )
         IF cnSQL:Eof()
            cnSQL:MoveLast()
         ENDIF
         IF cnSQL:Bof()
            cnSQL:MoveFirst()
         ENDIF
      ENDIF
      RETURN cnSQL:AbsolutePosition() - nRec
hwgui.png
Gravei isto, é o que aparece na tela:

Código: Selecionar todos

PROCEDURE PTESRSADO

LOCAL cnSQL := ADOClass():New()
LOCAL cLetra

WITH OBJECT cnSQL
   :RsCreate( { ;
      { "CODIGO", "C", 5, 0 } , ;
      { "NOME", "C", 30, 0 } } )
   FOR EACH cLetra IN { "A", "B", "C", "D", "E", "F" }
      :AddNew()
      :Fields( "CODIGO" ):Value := Asc( cLetra )
      :Fields( "NOME" ):Value := Replicate( cLetra, 30 )
      :Update()
   NEXT
   cnSQL:Rs:Save( "teste.ado" )
   cnSQL:Close()
ENDWITH
O erro até dá pra considerar normal no ADO, porque ADO NÃO deixa acessar quando Eof(), ao contrário do DBF.
Justamente minha classe é pra evitar esse tipo de problema.
Só não sei dizer se deveria acontecer ou não.

Pelo menos mostrou o conteúdo, e deu erro depois.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

As coisas estranhas é precisar de GOTO e RECNO.
Se tentar acessar o que não existe.... daria erro.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

bingo.

Código: Selecionar todos

   oBrw1:bGOTO     := { | o, n | (o), o:aArray:Move( n ), ;
      iif( o:aarray:Bof(), o:aarray:MoveFirst(), nil ), ;
      iif( o:aarray:Eof(), o:aarray:MoveLast(), nil ) }
hwgui.png
Ficou doidão, e não deu erro.

o tal GOTO ferra tudo.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

Código: Selecionar todos

   oBrw1:bGOTO     := { | o, n | (o), o:aArray:Move( n - 1, 1 ) }
Errei no equivalente ao GOTO.
Move, se não indicar, é a partir do registro atual.

Foi o mais próximo que deu de funcionar.
PGUP ok até o primeiro
PGDN ok até o último
seta pra cima ok até primeiro
seta pra baixo não para nunca, ou melhor... vai em frente além do limite, até dar aquele mesmo erro de Eof()
Tipo, tem 10 registros, vai até o 20 ou mais antes de dar erro.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

pgup
br1.png
pgdn
br2.png
seta pra baixo
br3.png
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

Iniciando com hwgui

Mensagem por JoséQuintas »

E antes que comentem....

Código: Selecionar todos

   oBrw1:bGOTO     := { | o, n | (o), o:aArray:Move( n - 1, 1 ) }
Se eu alterar pra Move( n, 1 ).... aí não mostra o primeiro.
Como o 1 indica a partir do primeiro, provavelmente move (1, 1, ) indica mover pro segundo, por isso usei o n-1
Mas mesmo que eu altere, o final não chega nunca.

Se eu usar minha classe, provavelmente o resultado vai ser o mesmo, porque ela é apenas intermediária.

Apelei agora, tentei browse array e browse database com ADO.
Também alterei estes dois igual array

Código: Selecionar todos

   oBrw1:bEof      := { | o | o:nCurrent > o:aArray:RecordCount() }
   oBrw1:bBof      := { | o | o:nCurrent < 1 }
Tanto faz ARRAY, DATABASE ou nenhum, coloque o que colocar, o resultado é sempre o mesmo, problema em seta pra baixo.
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

Iniciando com hwgui

Mensagem por JoséQuintas »

NÃO tem a ver com esse problema.
Acrescentei pra fechar o recordset.

Código: Selecionar todos

@ 500,720 OWNERBUTTON ON CLICK {|| cnSQL:Close(), hwg_EndDialog()} ;
e retirei o inkey(10) que não sei porque estava lá no fonte.
Pensei até que estava travando no final, mas era o inkey(10).
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciando com hwgui

Mensagem por Itamar M. Lins Jr. »

Ola!
Tem uma classe ADO que o pessoal da OOH usa. Pode ser aproveitado na Hwgui. Quando sobrar tempo vou olhar...
Agora vou ter que ir na cidade comprar tinta, para pintar um quarto... Mas vc já viu que na Hwgui podemos mexer em tudo é tudo classe.
Quando tiver pronto um exemplo com ADO vou mandar para commit no SVN, tomara que aceitem. Tem outros exemplos com browse etc.. que foram perdidos na sobreposição da versão 2.16 em cima da 2.17. Vou avisar para o Wilfried...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

browse ADO

Mensagem por JoséQuintas »

O teste, incluindo um arquivo que é o recordset ADO.
teste.zip
(1.41 KiB) Baixado 197 vezes
É justamente essa parte que as LIBs esquecem: o recordset ADO é independente, não importa conexão, se MySQL, PostgreSQL, etc. O recordset é sempre um recordset. Ficar querendo vincular isso junto com a origem, é onde estraga tudo.
Mesmo que o ADO tenha muito mais recursos, o básico e importante é esse.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

browse ADO

Mensagem por Itamar M. Lins Jr. »

Ola!
Acredito que é um BUG do hBrowse.prg (fonte da Hwgui).
Quando chega no final volta para o primeiro.

Tô vendo aqui...tá correto isso ? Chegando no fim vai para o primeiro ?

Código: Selecionar todos

         // Modified by Luiz Henrique dos Santos (luizhsantos@gmail.com)
         IF Eval( ::bEof, Self ) .OR. Eval( ::bBof, Self )
            Eval( ::bGoTop, Self )
            ::rowPos := 1
         ENDIF
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

browse ADO

Mensagem por JoséQuintas »

Depende aonde tem isso.
Se for na navegação tá errado, causaria o problema que mostrei.
Mas aconteceria com qualquer coisa: DBF, array, etc.
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 ADO

Mensagem por JoséQuintas »

LineDown()

Código: Selecionar todos

METHOD LINEDOWN( lMouse ) CLASS HBrowse

   LOCAL minPos, maxPos, nPos, colpos

   Eval( ::bSkip, Self, 1 )
   IF Eval( ::bEof, Self )
      Eval( ::bSkip, Self, - 1 )
LineUp

Código: Selecionar todos

METHOD LINEUP() CLASS HBrowse

   LOCAL minPos, maxPos, nPos

   Eval( ::bSkip, Self, - 1 )
   IF Eval( ::bBof, Self )
      Eval( ::bGoTop, Self )
Reparou algo diferente?
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