Clipper On Line • Ver Tópico - browse ADO

browse ADO

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Iniciando com hwgui

Mensagempor JoséQuintas » 13 Set 2020 19:59

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor Itamar M. Lins Jr. » 13 Set 2020 20:10

Ola!
Tem como postar zipado este conteúdo ?
 cnSQL


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 13 Set 2020 22:47

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 13 Set 2020 23:38

Deu sinal de vida

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

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 13 Set 2020 23:57

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 14 Set 2020 00:33

bingo.

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 14 Set 2020 01:12

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 14 Set 2020 01:29

pgup

br1.png


pgdn

br2.png


seta pra baixo

br3.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 14 Set 2020 01:43

E antes que comentem....

   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
   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor JoséQuintas » 14 Set 2020 01:52

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

@ 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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Iniciando com hwgui

Mensagempor Itamar M. Lins Jr. » 14 Set 2020 08:19

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

browse ADO

Mensagempor JoséQuintas » 14 Set 2020 09:50

O teste, incluindo um arquivo que é o recordset ADO.

teste.zip
(1.41 KiB) Baixado 49 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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

browse ADO

Mensagempor Itamar M. Lins Jr. » 14 Set 2020 18:59

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 ?

         // 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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6959
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

browse ADO

Mensagempor JoséQuintas » 14 Set 2020 19:25

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

browse ADO

Mensagempor JoséQuintas » 14 Set 2020 19:58

LineDown()

METHOD LINEDOWN( lMouse ) CLASS HBrowse

   LOCAL minPos, maxPos, nPos, colpos

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


LineUp

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Anterior Próximo



Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


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