Para Daniel Garcia Gill

Para Daniel Garcia Gill

Postby goosfancito » Tue Jan 25, 2011 10:58 am

Daniel,

Estoy tratando de entender como trabaja el xbrowse y tengo algunas dudas. Quiero ver si podes explicarme esto.

Cual es el mecanismo que el xBrowse hace para mostrar una fila?

Mas especificamente quiero saber esto.

* le declaro una nueva columna.
**** Que es lo que hace primero el xbrowse?, que sigue despues...

Te pregunto esto porque quiero meterme a full con el xbrowse y veo que hay errores que se siguen cometiendo desde antanios y ya llegado a los anios que tiene el xbrowse creo que no deberia de tener algunos errores como "no poder mostrar un array en blanco" o "no poder mostrar un recordset en blanco".. por eso que quiero entenderlo para ver si puedo ayudar a mejorarlo.

gracias.
gustavo.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Para Daniel Garcia Gill

Postby Daniel Garcia-Gil » Tue Jan 25, 2011 12:47 pm

Hola Gustavo

Para mostrar una fila se detecta la cantidad de registros que existe en la fuente de datos
sea Array, DBFs, ADO, etc y evaluara el codeblock encargado para pintar las filas
solo se pintaran las lineas y columnas visibles, nada mas

si puedes hacer un xBrowse con un array vacio, el punto esta en especificar la cantidad de columnas que tendra el array,
los datos deben ser consistentes para la configuracion del xBrowse es necesaria esa informacion para configurar internamente el xBrowse
El Sr Rao ha hecho muchas mejoras a la clase no sabria decirte hasta donde ha llegado con este punto...

con respecto al record set, tambien puedes hacer un xbrowse con un RS vacio

te dejo ejemplo de ambos, el ejemplo de ADO esta funcional, usa la base de datos ejemplos de TDolphin

Array

Descagra EXE http://www.sitasoft.net/fivewin/samples/array1.zip

Code: Select all  Expand view

#include "fivewin.ch"
#include "xbrowse.ch"

function main()

   local oWnd
   local oBrw
   local aArray := {}
   
   define window oWnd
   
   @ 0, 0 xbrowse oBrw array aArray;
          columns 1, 2, 3, 4;
          headers "Column 1", "Column 2", "Column 3", "Column 4"
   
   oBrw:CreateFromCode()
   
   oWnd:oClient = oBrw
   
   
   activate window oWnd


return nil
 


Descarga EXE http://www.sitasoft.net/fivewin/samples/ado1.zip
Code: Select all  Expand view

#include "fivewin.ch"
#include "adordd.ch"
#include "xbrowse.ch"


PROCEDURE Main()
   
   LOCAL cTime :=  time()
   LOCAL oServer
   LOCAL oRs

   IF ( oServer := ConnectTo() ) != NIL  
      DoBrowse( oServer )      
   ENDIF

RETURN

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

function DoBrowse( oServer )

   local oWnd
   local oBrw
   local oRS
   
   oRS = RecSet( oServer )
   
   define window oWnd
   
   @ 0, 0 xbrowse oBrw object oRS
   
   oBrw:CreateFromCode()
   
   oWnd:oClient = oBrw
   
   activate window oWnd

return NIL

FUNCTION RecSet( oServer )

   LOCAL oRS, oError, cQry
   
   TRY
      oRS = TOleAuto():new( "ADODB.RecordSet" )      
   CATCH oError
      ? "Init RecordSet Failed!!!"
      ShowError( oError )      
      RETURN NIL
   END  

   cQry = "SELECT * FROM president limit 0"
   
   oRS:cursorLocation = adUseClient
   oRS:lockType       = adLockOptimistic
   oRS:cursorType     = adOpenDynamic
   oRS:source         = cQry
   oRS:activeConnection =  oServer
   
   TRY
      oRS:open()
   CATCH oError
      ? "Build RecordSet Failed!!!"
      ShowError( oError )      
      RETURN NIL
   END  

return oRS

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

PROCEDURE GetError( oServer, nError, lInternal )
   LOCAL cText := ""
   
   cText += "Error from Custom Error Message" + CRLF
   cText += "================================" + CRLF
   cText += oServer:ErrorTxt() + CRLF
   cText += "ERROR No: " + Str( nError ) + CRLF
   cText += "Internal: " + If( lInternal, "Yes", "No" ) + CRLF
   
   ? cText + CRLF
   
   
RETURN

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

FUNCTION ConnectTo()
   LOCAL oServer   := NIL
   LOCAL cServer  
   LOCAL cUser    
   LOCAL cPassword
   LOCAL nPort    
   LOCAL cDBName  
   LOCAL nFlags    
   LOCAL oErr
   LOCAL cConString
   LOCAL lRet      := .T.

   cServer   := "dolphintest.sitasoft.net"
   cUser     := "test_dolphin"
   cPassword := "123456"
   nPort     := "3306"
   cDBName   := "dolphin_man"
   nFlags    := 0

   cConString := "Driver={MySQL ODBC 5.1 Driver}"    + ;
                 ";Server=" + cServer                + ;
                 ";DefaultDatabase=" + cDBName       + ;
                 ";Database=" + cDBName              + ;
                 ";Port=" + nPort                    + ;
                 ";User=" + cUser                    + ;
                 ";Password=" + cPassword            + ;
                 ";Option=3;"  
   

   TRY
     oServer := TOleAuto():New( "ADODB.Connection" )    
   CATCH oErr
      ? "Init Server Failed!!!"
      ShowError( oErr )      
      RETURN NIL
   END  
   
   oServer:ConnecTionString := cConString
   
   TRY
     oServer:Open()
   CATCH oErr
     ? "Conection Server Failed!!!"
     ShowError( oErr )
     RETURN NIL
   END  
   
RETURN oServer

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

FUNCTION ShowError( oError )

   local cError := ""

   cError += " Descripción  : " + oError:Description
   cError += " SubSystem    : " + oError:SubSystem
   cError += " Error Number : " + Str( oError:SubCode )
   cError += " Severity     : " + Str( oError:Severity )
   
RETURN NIL

 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 45 guests