Página 2 de 4
Iniciando com hwgui
Enviado: 13 Set 2020 19:59
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.
Iniciando com hwgui
Enviado: 13 Set 2020 20:10
por Itamar M. Lins Jr.
Ola!
Tem como postar zipado este conteúdo ?
Saudações,
Itamar M. Lins Jr.
Iniciando com hwgui
Enviado: 13 Set 2020 22:47
por JoséQuintas
Pensar em alguma coisa equivalente, que dê pra fazer teste isolado.
Talvez até um array hash.
Iniciando com hwgui
Enviado: 13 Set 2020 23:38
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

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.
Iniciando com hwgui
Enviado: 13 Set 2020 23:57
por JoséQuintas
As coisas estranhas é precisar de GOTO e RECNO.
Se tentar acessar o que não existe.... daria erro.
Iniciando com hwgui
Enviado: 14 Set 2020 00:33
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 ) }
Ficou doidão, e não deu erro.
o tal GOTO ferra tudo.
Iniciando com hwgui
Enviado: 14 Set 2020 01:12
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.
Iniciando com hwgui
Enviado: 14 Set 2020 01:29
por JoséQuintas
Iniciando com hwgui
Enviado: 14 Set 2020 01:43
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.
Iniciando com hwgui
Enviado: 14 Set 2020 01:52
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).
Iniciando com hwgui
Enviado: 14 Set 2020 08:19
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.
browse ADO
Enviado: 14 Set 2020 09:50
por JoséQuintas
O teste, incluindo um arquivo que é o recordset ADO.
É 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.
browse ADO
Enviado: 14 Set 2020 18:59
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.
browse ADO
Enviado: 14 Set 2020 19:25
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.
browse ADO
Enviado: 14 Set 2020 19:58
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?