Error en XBROWSE

Post Reply
infosys
Posts: 57
Joined: Tue Jan 31, 2006 1:32 pm

Error en XBROWSE

Post 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
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en XBROWSE

Post 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") }
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
RenOmaS
Posts: 205
Joined: Fri Oct 07, 2005 5:07 pm

Re: Error en XBROWSE

Post by RenOmaS »

Si cierras la dbf
es mejor intentar hacer esto

Code: Select all

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

skype: americo.balboa
infosys
Posts: 57
Joined: Tue Jan 31, 2006 1:32 pm

Re: Error en XBROWSE

Post 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
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Error en XBROWSE

Post 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
 
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply