http://www.pctoledo.com.br/forum/viewtopic.php?f=45&t=15328&hilit=sql+server
Como está na resposta de outra coisa, talvez fique difÃcil de ser localizado o browse para ADO.
Aqui fiz algumas mudanças.
É um browse simples, sem qualquer tipo de filtro ou opção especial.
Só usar um browse de DBFs como referência, e adicionar recursos.
Para o recordset, usei o nome de oTemporario, fica claro pra quem não usa ADO, o que ele representa.
#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
Provavelmente vão querer adicionar opções de:
codeblock a executar, filtrar colunas, cores no tbrowse, navegação por mouse, filtro enquanto digita, etc, mas de um modo geral isso pode ser encontrado em qualquer browse de DBF.