Página 1 de 1

control browse para tmysql de harbour - ayuda

Publicado: Mar Jul 18, 2023 3:12 am
por carloskds
Hola, he intentado crear un control TQryBrowse, para poder visualizar un query que tengo con la clase tmysql de harbour, que es la que uso, me interesa mostrar el query en un browse, pero no he podido hacerlo, todavia me falta en xailer, si alquien que quere echar una mano, estaria agradecido: :-)
Esta es una prueba con un ejemplo de xailer con un archivo de texto, adecuado para query pero no he podido avanzar.

Código: Seleccionar todo

//------------------------------------------------------------------------------

METHOD Button1Click( oSender ) CLASS TForm1
   LOCAL oBrw
   LOCAL oQry

   oQry := ::oServer:Query( "select * from municipios" )
   IF ::oServer:NetErr()
      MsgStop( ::oServer:ErrorTxt(), "Saliendo" )
      return nil
   ENDIF

   MsgInfo("RecCount:" + hb_ntos( oQry:RecCount() ) )

   WITH OBJECT ( oBrw := TQryBrowse():New( ::oBevel1 ) )
      :nAlign := alCLIENT
      :Create()
      :oQry := oQry
   END WITH
/* ESTO NO: queria usar el control dbfbrowse, pero tampoco pude. se me nota el nivel. :-)
   WITH OBJECT ( oBrw := TDbfBrowse():New( ::oBevel1 ) )
      :Cargo      := oQry
      :OnBof      := {|o| oQry:Bof() }
      :OnEof      := {|o| oQry:Eof() }
      :OnGoTop    := {|o, n| oQry:GoTop() }
      :OnGoBottom := {|o, n| oQry:GoBottom() }
      :OnKeyNo    := {|o, n| iif(n== nil, oQry:RecNo(), oQry:GoTo(n) )}
      :OnKeyCount := {|o, n| oQry:RecCount() }
      :OnSkip     := {|o, n| oQry:Skip(n) }
   END WITH
*/
RETURN Nil

//------------------------------------------------------------------------------

CLASS TQryBrowse FROM TBrowse

PUBLISHED:
	PROPERTY oQry INIT NIL WRITE SetQry
   PROPERTY nMarqueeStyle INIT bmHIGHLROW
   PROPERTY cVersion INIT "TQryBrowse: version 1.0a"

PUBLIC:
   METHOD Create( oParent ) CONSTRUCTOR
   METHOD Free()
	
	METHOD IsEof()
	METHOD IsBof()
	METHOD BookMark( nPos )
	METHOD KeyNo( nPos )
	METHOD KeyCount( nPos )
	METHOD Refresh( lComplete )
	METHOD Goto( nPos )
	
RESERVED:
   METHOD GoTop()
   METHOD GoBottom()
   METHOD Skip( nSkip )
   METHOD SetQry( oQry )

ENDCLASS

//------------------------------------------------------------------------------

METHOD Create( oParent ) CLASS TQryBrowse
   ::lRecordSelector := .T.
   ::oFont := TFont():Create( "Courier New", 8, 0, 400 )
   ::Super:Create( oParent )
RETURN Self

//------------------------------------------------------------------------------

METHOD Free() CLASS TQryBrowse
RETURN ::Super:Free()

//------------------------------------------------------------------------------

METHOD SetQry( oQry ) CLASS TQryBrowse
	IF hb_isObject( oQry )
		::oQry := oQry
	ENDIF
   ::Reset()
   //BrwColumn():New( Self ):Create()
   ::GetDisplayCols()
RETURN NIL

//------------------------------------------------------------------------------

METHOD IsEof() CLASS TQryBrowse
	LOCAL xRet := ::OnEof()
	IF xRet == Nil
		RETURN ::oQry:Eof()
	ENDIF
RETURN xRet

//------------------------------------------------------------------------------

METHOD IsBof() CLASS TQryBrowse
	LOCAL xRet := ::OnBof()
	IF xRet == Nil
		RETURN ::oQry:Bof()
	ENDIF
RETURN xRet

//------------------------------------------------------------------------------

METHOD BookMark( nPos ) CLASS TQryBrowse
	LOCAL xRet := ::OnBookMark( nPos )
	IF xRet == Nil
		xRet := ::oQry:RecNo()
		IF nPos != Nil
			::oQry:GoTo( nPos )
		ENDIF
	ENDIF
RETURN xRet

//------------------------------------------------------------------------------

METHOD KeyNo( nPos ) CLASS TQryBrowse
	LOCAL xRet := ::OnKeyNo( nPos )
	IF xRet == Nil
		IF nPos != Nil
			::oQry:Goto( nPos )
		ELSE
			xRet := ::oQry:RecNo()
		ENDIF
	ENDIF
RETURN xRet

//------------------------------------------------------------------------------

METHOD KeyCount() CLASS TQryBrowse
   LOCAL xRet := ::OnKeyCount()
   IF xRet == Nil
      xRet := IIF( HB_IsNIL( ::oQry ), 0, ::oQry:RecCount() )
   ENDIF
   ::nLen  := xRet
RETURN xRet

//------------------------------------------------------------------------------

METHOD GoTop() CLASS TQryBrowse
	LOCAL xRet := ::OnGoTop()
	IF xRet == Nil
      ::oQry:GoTop()
	ENDIF
RETURN Nil

//------------------------------------------------------------------------------

METHOD GoBottom() CLASS TQryBrowse
	LOCAL xRet := ::OnGoBottom()
	IF xRet == Nil
      ::oQry:GoBottom()
	ENDIF
RETURN Nil

//------------------------------------------------------------------------------

METHOD GoTo( nPos ) CLASS TQryBrowse
	IF ::nLen < 1
		RETURN Nil
	ENDIF
	::DrawLine()
	::KeyNo( nPos )
	::OnChange( .T. )
   ::SetVPos( ::RecNo() )
	::Refresh( .F. )
RETURN Nil

//------------------------------------------------------------------------------

METHOD Skip( nSkip ) CLASS TQryBrowse
   LOCAL xRet
	
   DEFAULT nSkip TO 1

   xRet := ::OnSkip( nSkip )
MsgInfo( ProcName() + " / "+ HB_NToS( nSkip ) )
	IF xRet == Nil
		RETURN ::oQry:Skip( nSkip )
	ENDIF

RETURN xRet

//------------------------------------------------------------------------------

METHOD Refresh( lComplete ) CLASS TQryBrowse
	DEFAULT lComplete TO .F.
	IF lComplete
		::GoTop()
	ENDIF
RETURN ::Super:Refresh( lComplete )

//------------------------------------------------------------------------------

//CLASS TQryBrwColumn FROM TBrwColumn STATIC
//RESERVED:
//   METHOD GetData() VIRTUAL
//   METHOD SetData( Value, nLine ) VIRTUAL
//ENDCLASS

Re: control browse para tmysql de harbour - ayuda

Publicado: Lun Jul 24, 2023 7:33 pm
por carloskds
ignacio, se podra?

Re: control browse para tmysql de harbour - ayuda

Publicado: Mar Jul 25, 2023 10:10 am
por ignacio
Hola,

Con Xailer se han de utilizar datasets. Todo se puede hacer, pero, no tiene sentido reinventar la rueda.

Un saludo