FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour XBROWSE Y TABLA ADT
Posts: 94
Joined: Thu May 11, 2006 10:00 PM

XBROWSE Y TABLA ADT

Posted: Fri Jan 30, 2009 08:21 PM
Estimado Antonio,

Estamos mudando los antiguos WBROWSE a XBROWSE de FWH 8.12 y XHARBOUR, usamos tablas ADT pero no pudimo hacer andar el XBROWSE el mini codigo a continuaci贸n funciona perfecto con tablas DBF pero tira el error mas abajo cuando mostramos una tabla ADT, podr铆as darnos una mano con esto,

C贸digo de Prueba,
USE TABLA1 NEW SHARED ALIAS GUSTAVO VIA "ADT"

SELECT GUSTAVO

BROWSE()


DEFINE WINDOW oWSal MDIChild OF oWnd;
       TITLE "Salidas"

			 ** Controles ******

			 DEFINE BUTTONBAR oBar 3DLOOK BUTTONSIZE 34,34 OF oWSal 2007

			 DEFINE BUTTON oBto1 ;
              OF oBar ;
              RESOURCE "B_NUEVO" ;
              TOOLTIP "Nueva Salida"   ;
              NOBORDER

   		 @ 0,0 XBROWSE oBrw;
      	 OF oWnd ;
      	 ALIAS "GUSTAVO" AUTOCOLS

         oBrw:CreateFromCode()

oWsal:oClient := oBrw


ACTIVATE WINDOW oWSal;
				 VALID  (oWSal:=Nil,.T.)


El error es el siguiente en XBRWOSE

Application
===========
Path and name: C:\CONTROLV\controlv.exe (32 bits)
Size: 1,937,920 bytes
Time from start: 0 hours 0 mins 4 secs
Error occurred at: 01/30/09, 18:08:24
Error description: Error BASE/1111 Argument error: LEN
Args:
[ 1] = U

Stack Calls
===========
Called from: => LEN(0)
Called from: XBROWSE.prg => SETCOLFROMRDD(5121)
Called from: XBROWSE.prg => TXBROWSE:SETRDD(3194)
Called from: XBROWSE.prg => XBRWSETDATASOURCE(7922)
Called from: XBROWSE.prg => XBROWSENEW(7800)
Called from: controlv.PRG => CON_SALIDAS(254)
Called from: controlv.PRG => (b)BUILDMENU(114)
Called from: .\source\classes\MENU.PRG => TMENU:COMMAND(0)
Called from: .\source\classes\WINDOW.PRG => TWINDOW:COMMAND(0)
Called from: .\source\classes\MDIFRAME.PRG => TMDIFRAME:COMMAND(0)
Called from: => TMDIFRAME:HANDLEEVENT(0)
Called from: .\source\classes\WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE(0)
Called from: controlv.PRG => MAIN(85)

Desde ya Gracias por tu ayuda,

Saludos,
GUSTAVO PREDIGER
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: XBROWSE Y TABLA ADT

Posted: Fri Feb 13, 2009 11:37 AM
Gustavo,

La funci贸n SETCOLFROMRDD() se modific贸 para no llamar a Len(). Este es el c贸digo a usar (reempl谩zalo en xbrowse.prg):
static function SetColFromRDD( oCol, nFld, cAlias, aFldInfo, lAutoSort )

   local cName       // if fieldname is specified in different case, header is set accordingly
   local nLen, nDec, nSelect  := SELECT( cAlias )

   if valtype( nFld ) == 'C'
      nFld  := (cAlias)->(FieldPos(cName := nFld))

   endif

   aFldInfo          := aFldInfo[ nFld ]

   oCol:cHeader      := If( cName == nil, aFldInfo[ 1 ], cName )
   if ( cName == nil )
      cName          := aFldInfo[ 1 ]
   endif

//   oCol:bEditValue   := FieldWBlock( cName, nSelect )
   oCol:bEditValue   := { |x| If( x == nil, ( oCol:oBrw:cAlias )->( FieldGet( nFld ) ), ;
                                ( oCol:oBrw:cAlias )->( FieldPut( nFld, x ) ) ) }

   nLen              := aFldInfo[ 3 ]
   nDec              := aFldInfo[ 4 ]

   if Len( aFldInfo[ 2 ] ) == 1
      oCol:cDataType      := aFldInfo[ 2 ]
      if oCol:cDataType == "I"
         oCol:cDataType := 'N'
         if aFldInfo[ 3 ] == 2
            nLen        := 6
         else
            nLen        := 13
         endif
         nDec           := 0
      elseif oCol:cDataType == 'Y'
         oCol:cDataType := 'N'
         nLen           := 15
         nDec           := 2
      elseif oCol:cDataType == "U"
         oCol:cDataType := 'C'
      endif
   else
      // ADT table
      oCol:cDataType    := ValType( ( cAlias )->( FieldGet( nFld ) ) )
      do case
         case oCol:cDataType == 'N'
            do case
               case "DOUBLE" $ aFldInfo[ 2 ] .or. "MONEY" $ aFldInfo[ 2 ]
                  nLen           := 15
                  nDec           := 2
               case AScan( { "AUTOINC", "ROWVERSION" }, aFldInfo[ 2 ] ) > 0
                  nLen           := 15
                  nDec           := 0
               otherwise
                  nLen           := 15
                  nDec           := 0
            endcase
#ifdef __XHARBOUR__
         case oCol:cDataType == 'D'
            if 'TIME' $ aFldInfo[ 2 ]
               oCol:cDataType    := 'T'
               oCol:cEditPicture := '@T'
            endif
#endif
         case oCol:cDataType $ "CM"
            if aFldInfo[ 2 ] = "IMAGE"
               oCol:bStrData     := { || "<Image>" }
            elseif aFldInfo[ 2 ] = "RAW"
               oCol:bStrData     := { || "<Binary>" }
            endif
         otherwise
            // nothing to do
      endcase
   endif

   // oCol:adjust() will set bstrdata

   do case
   case oCol:cDataType == 'N'
      oCol:cEditPicture   := NumPict( nLen, nDec, .T., lThouSep )
   case oCol:cDataType  == 'D'
      oCol:cEditPicture   := '@D'
#ifdef __XHARBOUR__
      if hb_IsDateTime( (cAlias)->( FieldGet( nFld ) ) )
//         oCol:bStrData     := { || TTOC( (cAlias)->( FieldGet( nFld ) ) ) }
         oCol:cEditPicture := '@T'
      endif
#endif
   endcase

   oCol:bOnPostEdit  := { |o,x,n| If( n != VK_ESCAPE .and. Eval( o:oBrw:bLock ), ;
          (Eval( o:bEditValue, x ), o:oBrw:lEdited := .t. ), ) }

   if lAutoSort
      if (cAlias)->( OrdNumber( oCol:cHeader ) ) > 0
         oCol:cSortOrder   := oCol:cHeader
      endif
   endif

return oCol
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 94
Joined: Thu May 11, 2006 10:00 PM

Re: XBROWSE Y TABLA ADT

Posted: Fri Feb 13, 2009 01:20 PM

Gracias Antonio lo probaremos el problema se daba en las tablas ADT en campos, propios de ADT que no reconocia.-

Saludos,

GUSTAVO PREDIGER

Continue the discussion