Page 1 of 1

Error en XBROWSE

Posted: Wed Mar 11, 2009 2:22 pm
by infosys
La clase funciona sin problemas, pero cuando intento agregar una nueva columna al browse, luego de que este ya fue creado y desplegado en pantalla, me arroja un error, en el metodo LASTDISPLAYPOS().
Intento explicar mejor: mi aplicacion ofrece al operador ir agregando columnas a un browse existente por ende cuando se ejecuta esta opcion, cierro el DBF agrego el nuevo campo luego lo abro de nuevo, creo en el browse la nueva columna e intento refrescar los datos, ahi es donde se produce el problema.
Copio el código para ver si alguien me puede indicar que esta mal o que falta.

Code: Select all

    
    oCol:=oBrw:AddCol()
    oCol:cHeader:="Nueva Columna"
    oCol:bStrData:=FieldWBlock(tran(LECTURAS->newcol,"9999999.99999")
    oBrw:Refresh()
 
El Error que arroja es el siguiente:
Application
===========
Path and name: C:\INFOSQL1\qcstd.exe (32 bits)
Size: 1,755,136 bytes
Time from start: 0 hours 0 mins 8 secs
Error occurred at: 11/03/2009, 11:08:06
Error description: Error BASE/1081 Error de argumento: +
Args:
[ 1] = U
[ 2] = N 2

Stack Calls
===========
Called from: qcstd.prg => TXBROWSE:LASTDISPLAYPOS(1336)
Called from: qcstd.prg => TXBROWSE:MOUSEMOVE(2223)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: CONTROL.prg => TXBROWSE:HANDLEEVENT(1322)
Called from: WINDOW.prg => _FWH(3128)
Called from: => WINRUN(0)
Called from: WINDOW.prg => TWINDOW:ACTIVATE(881)
Called from: qcstd.prg => MAIN(429)

Este codigo me ha funcionado muy bien utilizando TsBrowse, ahora que intento utilizar xBrowse, me trae problemas al refrescar la pantalla.
Desde ya muy agradecido por información o sugerencia al respecto.

Miguel

Re: Error en XBROWSE

Posted: Tue Mar 17, 2009 3:13 am
by Daniel Garcia-Gil
Infosys

Revisando el error y creo que lo puedes solventar agregandole el ancho a la columna a añadir, vere de que forma se podria solventar desde la clase

creo que solo te faltaria incluir

Code: Select all

oCol:nWidth := 40
o el ancho que tu decidas es solo un ejemplo

personalmente usaria

Code: Select all

oCol:bStrData:={|| tran(LECTURAS->newcol,"9999999.99999") }

Re: Error en XBROWSE

Posted: Tue Mar 17, 2009 9:16 am
by RenOmaS
Si cierras la dbf
es mejor intentar hacer esto

Code: Select all

oBrowse:Hide()
//cierras tu dbf
// agregas tu columnas..
................
oBrowse:Show()
 

Re: Error en XBROWSE

Posted: Tue Mar 17, 2009 11:26 am
by infosys
Gracias por las sugerencias, pero el error persiste, el mensaje es el mismo que indique, y ocurre en este metodo:

Code: Select all


METHOD LastDisplayPos( lComplete ) CLASS TXBrowse

   local nWidth, nMaxWidth, nPos, nLen

   DEFAULT lComplete := .f.

   nPos      := 1
   nMaxWidth := ::BrwWidth()
   nLen      := len( ::aDisplay )

   if ::lRecordSelector
      nWidth := RECORDSELECTOR_WIDTH
   else
      nWidth := 0
   endif

   do while nPos <= nLen .and. nWidth < nMaxWidth
      nWidth += ::ColAtPos( nPos++ ):nWidth + COL_SEPARATOR
   enddo

   nPos --

   if lComplete
      nPos--
   endif

   nPos := Max( 1, nPos )

return nPos
 
La linea: nWidth += ::ColAtPos( nPos++ ):nWidth + COL_SEPARATOR es donde se produce el error, el cual dice:
Error description: Error BASE/1081 Error de argumento: +
Args:
[ 1] = U
[ 2] = N 2

Esto se produce cuando luego de haber agregado la columna, abierto el dbf, etc. le ordeno un oBrwose:Refresh()

No logro sacarle el error.

Saludos
Miguel

Re: Error en XBROWSE

Posted: Tue Mar 17, 2009 1:30 pm
by Daniel Garcia-Gil
Infosys...

El error se produce pq en la columna no se le ha definido el ancho ( nWidth ), por eso te comente que agregaras oCol:nWitdh := 40
A mi me trabaja perfectamente bien este ejemplo

Te dejo el link para que descargues el EXE y lo pruebes tu mismo

http://www.sitasoft.com/fivewin/test/testbrw1.rar

Code: Select all

#include "FiveWin.ch"
#include "xbrowse.ch"

REQUEST DBFCDX
function main()

local oDlg
local oBrw
local cAlias
local oBar

cAlias = "customer"

use customer alias (cAlias) new via "dbfcdx"

   DEFINE window oDlg title "TEST" from 0,0 to 400, 600 pixel
   define buttonbar oBar of oDlg size 30,30
   
   define button of oBar action agrega( oBrw, cAlias )

   @ 0,0 XBROWSE oBrw OF oDlg ;
      COLUMNS "First", "Salary", "state" ;
      HEADERS nil, nil, "State" ;
      JUSTIFY .t., nil, .F., .T. ;
      ALIAS cAlias AUTOSORT LINES CELL
        
   oDlg:oClient := oBrw
   
   oBrw:CreateFromCode()

   ACTIVATE window oDlg  

return nil 

procedure Agrega( oBrw, cAlias )
local oCol
   
    oCol:=oBrw:AddCol()
    oCol:cHeader:="Nueva Columna"
    oCol:bStrData:={|| transform( ( cAlias )->age,"9999999.99999") }
    oCol:nWidth := 100
    oBrw:Refresh()

return