xbrwose tdolphin y fillarray

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

xbrwose tdolphin y fillarray

Post by goosfancito »

Hola.

Tengo un xbrowse que muestra:

Code: Select all

...
   aDatos:= consulta()
   oBrw:setArray(aDatos)

function consulta()
    local oQry
    define query oQry  "SELECT * FROM tbclientes"
return (oQry:fillarray())
No hay problemas cuando la consulta devuelve datos, pero si no devuelve datos el FillArray no "crea" el array que muestro en el xbrowse, por lo tanto el xbrowse
trona mal.

para verififcar hice esto:

Code: Select all

function consulta()
    local oQry, aDatos
    define query oQry "SELECT * FROM tbclientes"
    aDatos:= oQry:fillarray()
    xbrowse(aDatos)
return (aDatos)
 
y el xbrowse(aDatos) devuelve una sola columna si la consulta no devuelve datos, si devuelve datos el xbrowse(aDatos) me muestra todas las columnas...
Como hago para que cuando no tenga datos igual me muestre el xbrowse?

gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: xbrwose tdolphin y fillarray

Post by joseluisysturiz »

Intenta definir el array con un registro en blanco, saludos... :shock:

ejemplo:
tu_array := {0,0,0, NIL, space(5),0}
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
pablovidal
Posts: 398
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana
Contact:

Re: xbrwose tdolphin y fillarray

Post by pablovidal »

Para que poner los datos en un array,
si puedes poner directamente el query en el browse.

Date una revisadita a los ejemplos de la tDolphin

Code: Select all

  LOCAL oQry 
   LOCAL oDlg
   LOCAL oBrw
   LOCAL oData, oCol
   
   
   oQry = oServer:Query( "SELECT * FROM president ORDER BY last_name ASC" )
   
   DEFINE DIALOG oDlg SIZE 700,300 OF oWnd

   @ 0, 0 XBROWSE oBrw OF oDlg
   
   SetDolphin( oBrw, oQry )
      
   oBrw:CreateFromCode()
  
   oDlg:oClient = oBrw 
   
   ACTIVATE DIALOG oDlg CENTERED ON INIT oDlg:Resize()
   
   oQry:End()
 
Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: xbrwose tdolphin y fillarray

Post by acuellar »

goosfancito como indica Pablo no es necesario cargar la tabla sin entre _ no va haber cálculos.

si la consulta es vacía la podes controlar así

Code: Select all

  LOCAL oQry 
   LOCAL oDlg
   LOCAL oBrw
   LOCAL oData, oCol
   
   
   oQry = oServer:Query( "SELECT * FROM president ORDER BY last_name ASC" )
   TotalRec:=oQry:nRecCount
  If TotalRec>0
     DEFINE DIALOG oDlg SIZE 700,300 OF oWnd

     @ 0, 0 XBROWSE oBrw OF oDlg
   
     SetDolphin( oBrw, oQry )
      
    oBrw:CreateFromCode()
  
     oDlg:oClient = oBrw 
   
    ACTIVATE DIALOG oDlg CENTERED ON INIT oDlg:Resize()
   
    oQry:End()
 Else
  MsgStop("No existen registros","Lo siento") 
 Endif
 
Saludos,

Adhemar C.
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: xbrwose tdolphin y fillarray

Post by goosfancito »

Hola.

Lo pongo en un array porque de otra forma tengo muchos inconvenientes a la hora de interactuar con el xbrowse,
no puedo hacer que el xbrowse muestre diferentes cabeceras en diferentes consultas, no esta funcionandome bien,
tengo que llamar dos veces al setdolphin para que me complete el xbrowse...
Estoy viendo que eso con el setarray no me pasa.

gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: xbrwose tdolphin y fillarray

Post by goosfancito »

joseluisysturiz wrote:Intenta definir el array con un registro en blanco, saludos... :shock:

ejemplo:
tu_array := {0,0,0, NIL, space(5),0}
lo q hice fue verificar si nreccount() dvuelve 0 registros, si lo hace hago lo que vos me decis (eso ya lo probe y anda)
pero despues de 10 put.. como se puedde arreglar para no tener que hacer esa comprobacion en cada fillarray?
como hacer para que el fillarray devuelva ese array vacio (por lo menos con la estructura)

gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: xbrwose tdolphin y fillarray

Post by joseluisysturiz »

Como ya dijeron los colegas, si no vas hacer nada de operaciones o edicion en el xbrowse, sino solo mostrar los datos, hacer un array es trabajar doble cuando con TDolphin y xBrowse puedes hacer maravillas y mas en los filtrados para mostrar datos con el oQry:setwhere(), creo que si pones algo mas de codigo de como estas haciendo tu query y utlizandolo en el xbrowse y lo que quieres en si hacer, entre todos podriamos ayudarte a resolver, te aseguro q con tdolphin + xbrowse, puedes hacer lo que quieres y mas, yo cargo array vacios o querys vacios sin ningun problema, todo esta en la buena combinacin entre TD + XB...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: xbrwose tdolphin y fillarray

Post by goosfancito »

Les explico que necesito hacer

tengo un xbrowse, necesito que sea capaz de mostrar informacion de varias tablas dependienddo lo que el usuario necesite.
ya probe varias maneras, la unica que me muestra los datos como quiero es mostrando un array, de otra manera si lo hago sin eso
tengo que cada vez que hago un nuevo DEFINE QUERY volver a declarar el setdolphin(....), asi y todo mostrando el array tengo el mismo problema
cuando hago el setarray(...) las columnas del xbrowse pierden todo el nWidth, deja de expandir la ultima columna...
no entiendo que es lo que hago mal, la ultima modificacion (que pense que podía funcionar) me hace lo mismo.

aca dejo el codigo donde esta el problema.
gracias.

Code: Select all

METHOD pantalla()
   LOCAL oDlg
   LOCAL oGets := Array(3),;
         vGets := Array(3),;
         oBtns := Array(4),;
         oQry,;
         oBrw,;
         oFont,;
         oFont1,;
         adatos

   DEFINE FONT oFont NAME "" bold SIZE 0, -11
   DEFINE FONT oFont1 NAME "Ebrima" SIZE 0, -11

   vGets[1]:= Date()
   vGets[2]:= 4

   DEFINE DIALOG oDlg resource "CAJA"

      REDEFINE DTPICKER oGets[1] VAR vGets[1] ID 100 OF oDlg
      REDEFINE radio oGets[2] VAR vGets[2] ID 101, 102, 103, 104 OF oDlg

      //----------( botones )----------

      REDEFINE BUTTON oBtns[1] ID 200 OF oDlg
      REDEFINE BUTTON oBtns[2] ID 201 OF oDlg

      //----------( browser )----------

      oBrw:= TXBROWSE():new(oDlg)

      aDatos:= ::cargarBrowser(@oBrw, vGets)

      WITH OBJECT oBrw
         :setarray(aDatos)

         :bClrStd    := { || If( oBrw:KeyNo() % 2 == 0, ;
                   { CLR_BLACK, RGB( 255, 255, 255 ) }, ;
                   { CLR_BLACK, RGB( 214, 255, 215 ) } ) }

         :bClrSel:={ || { CLR_BLACK, CLR_WHITE} }

         :nMarqueeStyle       := 5
         :lKinetic            := .F.
         :ltransparent        := .F.
         :nRowHeight          := 18
         :lHScroll            := .T.
         :nheaderHeight       := 20
         :lRecordSelector     := .F.
         :lAllowColSwapping   := .F.
         :lColDividerComplete := .f.
         :nRowDividerStyle    := 4
         :nStretchCol         := STRETCHCOL_LAST
         :nColDividerStyle    := 4
         :L2007               := .T.

      END WITH

      oBrw:createfromresource(205)

      //----------( )----------

      oBtns[1]:bAction:= {|| ::cargarBrowser( oBrw, vGets )}
      oBtns[2]:bAction:= {|| ::cargarProductos( oBrw, vGets )}

   ACTIVATE DIALOG oDlg CENTERED

   RETURN (NIL)

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

METHOD valorRetorno( nKey )

   RETURN ( NIL )

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

METHOD cargarBrowser( oBrw, vGets)
   LOCAL oQry
   LOCAL cSql
   LOCAL aDatos

   DO CASE
      CASE vGets[2] = 1

      CASE vGets[2] = 2
      CASE vGets[2] = 3
      CASE vGets[2] = 4
         cSql:= "select " + ;
                "tbctacte.fecha as c1, " + ;
                "tbclientes.nombre as c2, " + ;
                "tbctacte.importe as c3 " + ;
                "from tbctacte " + ;
                "left join tbclientes " + ;
                "on tbclientes.id = tbctacte.idcliente " + ;
                "where tbctacte.fecha = " + ClipValue2SQL(vGets[1]) + ;
                " order by tbctacte.fecha"


      END CASE

      DEFINE query oQry cSql

      IF oQry:nRecCount()== 0
         aDatos:= {{"" ,"","",""}}
      ELSE
         aDatos:= oQry:fillarray()
      ENDIF

      oBrw:setarray(aDatos)

      DO CASE
         CASE vGets[2] = 4
            WITH OBJECT obrw
            WITH object :aCols[1]
            :cHeader       := "Fecha"
            :nWidth        := 100
            :nHeadStrAlign := AL_CENTER
         END with

         WITH object :aCols[2]
            :cHeader       := "Productos"
            :nHeadStrAlign := AL_CENTER
            :nWidth        := 250
         END with

         WITH object :aCols[3]
            :cHeader       := "Cantidad"
            :nWidth        := 120
            :nHeadStrAlign := AL_CENTER
         END with
         END with
      END CASE

      oBrw:refresh()

   RETURN (aDatos)
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Post Reply