xbrwose tdolphin y fillarray

xbrwose tdolphin y fillarray

Postby goosfancito » Fri Dec 05, 2014 6:57 pm

Hola.

Tengo un xbrowse que muestra:
Code: Select all  Expand view
...
   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  Expand view
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.
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: xbrwose tdolphin y fillarray

Postby joseluisysturiz » Sat Dec 06, 2014 2:59 am

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
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrwose tdolphin y fillarray

Postby pablovidal » Sat Dec 06, 2014 11:10 am

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  Expand view

  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
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Re: xbrwose tdolphin y fillarray

Postby acuellar » Sat Dec 06, 2014 1:22 pm

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

si la consulta es vacía la podes controlar así
Code: Select all  Expand view

  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
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: xbrwose tdolphin y fillarray

Postby goosfancito » Sat Dec 06, 2014 4:19 pm

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.
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: xbrwose tdolphin y fillarray

Postby goosfancito » Sat Dec 06, 2014 4:21 pm

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.
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: xbrwose tdolphin y fillarray

Postby joseluisysturiz » Sat Dec 06, 2014 6:31 pm

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
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: xbrwose tdolphin y fillarray

Postby goosfancito » Sun Dec 07, 2014 6:10 pm

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  Expand view
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)
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


Return to FiveWin para Harbour/xHarbour

Who is online

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