26 Nov 2019 13:07
#include "tbrowse.ch"
PROCEDURE Main
LOCAL oConexao, oTemporario, oTBrowse
oConexao := ConexaoMySql()
oConexao:Open()
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()
oConexao:Close()
RETURN
FUNCTION BrowseADO( oTemporario, oTBrowse )
LOCAL oBrowse, nKey, oElement
oBrowse := TBrowseDB():new( 04, 3, MaxRow() - 7, MaxCol() - 3 )
oBrowse:goTopBlock := { || oTemporario:moveFirst() }
oBrowse:goBottomBlock := { || oTemporario:moveLast() }
oBrowse:skipBlock := { | n | ADOSkipper( oTemporario, n ) }
FOR EACH oElement IN oTBrowse
oBrowse:AddColumn( TBColumnNew( oElement[ 1 ], oElement[ 2 ] ) )
NEXT
DO WHILE .T.
oBrowse:forceStable()
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:LeftVisible, oBrowse:RowPos, oBrowse:RightVisible }, { 2, 1 } )
oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:ColPos, oBrowse:RowPos, oBrowse:ColPos }, { 3, 2 } )
oBrowse:refreshCurrent()
nKey := Inkey(0)
DO CASE
CASE oBrowse:ApplyKey( nKey ) == TBR_EXIT
EXIT
ENDCASE
ENDDO
RETURN NIL
STATIC FUNCTION ADOSkipper( oTemporario, nSkip )
LOCAL nRec := oTemporario:AbsolutePosition
IF ! ( oTemporario:Eof )
oTemporario:Move( nSkip )
IF oTemporario:Eof
oTemporario:moveLast()
ENDIF
IF oTemporario:Bof
oTemporario:moveFirst()
ENDIF
ENDIF
RETURN oTemporario:AbsolutePosition - nRec
FUNCTION ConexaoMySql()
LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := "colocar_a_string"
oConexao:CursorLocation := 3 // adUseClient
oConexao:CommandTimeOut := 600
oConexao:ConnectionTimeOut := 600
RETURN oConexao
26 Nov 2019 13:13
26 Nov 2019 19:46
CASE oBrowse:ApplyKey( nKey ) == TBR_EXIT
CASE nkey == K_CTRL_PGDN ; oBrowse:GoBottom() ; LOOP
CASE nkey == K_CTRL_PGUP ; oBrowse:GoTop() ; LOOP
CASE nkey == K_DOWN ; oBrowse:Down() ; LOOP
CASE nkey == K_HOME ; oBrowse:GoTop() ; LOOP
CASE nkey == K_END ; oBrowse:GoBottom() ; LOOP
CASE nkey == K_LEFT ; oBrowse:Left() ; LOOP
CASE nkey == K_RIGHT ; oBrowse:Right() ; LOOP
CASE nkey == K_PGDN ; oBrowse:PageDown() ; LOOP
CASE nkey == K_PGUP ; oBrowse:PageUp() ; LOOP
CASE nkey == K_UP ; oBrowse:Up() ; LOOP
CASE nKey == K_ESC; EXIT
27 Nov 2019 12:49
#include "tbrowse.ch"
#include "directry.ch"
#define AD_BIGINT 20
#define AD_DATE 7
#define AD_VARCHAR 200
PROCEDURE Main
LOCAL oTemporario, oTBrowse, oFile, aList
SetMode( 40, 100 )
SetCOlor( "W/B","N/w",,,"W/B" )
CLS
// cria estrutura
oTemporario := win_OleCreateObject( "ADODB.Recordset" )
WITH OBJECT oTemporario:Fields
:Append( "NOME", AD_VARCHAR, 100 )
:Append( "TAMANHO", AD_BIGINT, 11 )
:Append( "DATA", AD_DATE )
:Append( "HORA", AD_VARCHAR, 8 )
ENDWITH
// grava informação
WITH OBJECT oTemporario
:Open()
aList := Directory( "*.*" )
FOR EACH oFile IN aList
:AddNew()
:Fields( "NOME" ):Value := oFile[ F_NAME ]
:Fields( "TAMANHO" ):Value := oFile[ F_SIZE ]
:Fields( "DATA" ):Value := oFile[ F_DATE ]
:Fields( "HORA" ):Value := oFile[ F_TIME ]
:Update()
NEXT
ENDWITH
oTemporario:MoveFirst()
oTBrowse := { ;
{ "NOME", { || Pad( oTemporario:Fields( "NOME" ):Value, 20 ) } }, ;
{ "TAMANHO", { || Str( oTemporario:Fields( "TAMANHO" ):Value, 20 ) } }, ;
{ "DATA", { || oTemporario:Fields( "DATA" ):Value } }, ;
{ "HORA", { || oTemporario:Fields( "HORA" ):Value } } }
BrowseADO( oTemporario, oTBrowse )
oTemporario:Close()
RETURN
FUNCTION BrowseADO( oTemporario, oTBrowse )
LOCAL oBrowse, nKey, oElement
oBrowse := TBrowseDB():new( 04, 3, MaxRow() - 7, MaxCol() - 3 )
oBrowse:goTopBlock := { || oTemporario:moveFirst() }
oBrowse:goBottomBlock := { || oTemporario:moveLast() }
oBrowse:skipBlock := { | n | ADOSkipper( oTemporario, n ) }
FOR EACH oElement IN oTBrowse
oBrowse:AddColumn( TBColumnNew( oElement[ 1 ], oElement[ 2 ] ) )
NEXT
DO WHILE .T.
oBrowse:forceStable()
// oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:LeftVisible, oBrowse:RowPos, oBrowse:RightVisible }, { 2, 1 } )
// oBrowse:ColorRect( { oBrowse:RowPos, oBrowse:ColPos, oBrowse:RowPos, oBrowse:ColPos }, { 3, 2 } )
// oBrowse:refreshCurrent()
nKey := Inkey(0)
DO CASE
CASE oBrowse:ApplyKey( nKey ) == TBR_EXIT
EXIT
ENDCASE
ENDDO
RETURN NIL
STATIC FUNCTION ADOSkipper( oTemporario, nSkip )
LOCAL nRec := oTemporario:AbsolutePosition
IF ! ( oTemporario:Eof )
oTemporario:Move( nSkip )
IF oTemporario:Eof
oTemporario:moveLast()
ENDIF
IF oTemporario:Bof
oTemporario:moveFirst()
ENDIF
ENDIF
RETURN oTemporario:AbsolutePosition - nRec
27 Nov 2019 13:06
05 Dez 2019 12:53
15 Dez 2019 00:35
oTBrowse := TBrowseDB():new( 05, 3, MaxRow() - 7, MaxCol() - 2 )
oTBrowse:goTopBlock := { || oRs:moveFirst() }
oTBrowse:goBottomBlock := { || oRs:moveLast() }
oTBrowse:skipBlock := { | n | ADORecordSetSkipper( oRs, n ) }
nLen := oRs:fields():count() - 1
FOR i := 0 TO nLen
oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
oColumn:width := Max( Min( oRs:Fields(i):definedSize,50), Len( oRs:fields(i):name ) )
oTBrowse:addColumn( oColumn )
NEXT
oColumn:width := Max( Min( oRs:Fields(i):definedSize,50), Len( oRs:fields(i):name ) )
15 Dez 2019 11:24
IF ValType( oRs:Fields(i):Value ) != "D"
nFieldLen := Min( oRs:Fields(I):DefinedSize, 50 )
oColumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) )
ENDIF
IF ValType( oRs:Fields(i):Value ) == "D"
nFieldLen := Len( Dtoc( Date() ) )
ELSE
nFieldLen := Min( oRs:Fields(I):DefinedSize, 50 )
ENDIF
oColumn:Width := Max( nFieldLen, Len( oRs:fields(i):name ) )
15 Dez 2019 14:56
16 Dez 2019 16:23
16 Dez 2019 23:13
oBrowse:HeadSep := Chr(196)
oBrowse:ColSep := Chr(179)
oBrowse:FootSep := ""
17 Dez 2019 00:53
18 Dez 2019 23:29
19 Dez 2019 14:39
cjp escreveu:1) como faço para mostrar no browse apenas alguns campos, não todos?
cjp escreveu:2) como faço para editar um registro? Na verdade só preciso ler o registro inteiro, não quero alterá-lo.
21 Dez 2019 00:55