FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour bug en la funcion FieldName() xharbour y TDATABASE
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
bug en la funcion FieldName() xharbour y TDATABASE
Posted: Wed Mar 25, 2015 03:37 PM
Amigos del foro:

Manejo ADS + xharbour y tengo una consulta asi :

Code (fw): Select all Collapse
SELECT nroautoriz autorizacion, nrofactura factura FROM ftcompra


El nombre del primer campo, resultado de la consulta, tiene 12 caracteres

Si este resultado lo manejo con TDataBase(), tira este error:

Code (fw): Select all Collapse
Error description: Error BASE/1004  Message not found: TDataBase:AUTORIZACION


es porque en la clase TDataBase() se tiene este codigo
Code (fw): Select all Collapse
      for n = 1 to ( ::cAlias )->( FCount() )
         cCol  := ( ::cAlias )->( FieldName( n ) ) //<- aca el ERRROR!!!
         AAdd( ::aFldNames, cCol )
#ifdef USE_HASH
         ::hFlds[ cCol ] := n
#endif


La funcion ( ::cAlias )->( FieldName( 1 ) ) retorna "autorizacio" una cadena de 11 digitos (ni 10, ni 12), por lo tanto el HASH de la clase TDataBase() falla.

Para corregir el problema se debe usar el metodo ::FieldName() de la misma clase, que usa el arreglo ::aStruct creado con ( ::cAlias )->( DbStruct() )
Code (fw): Select all Collapse
      for n = 1 to ( ::cAlias )->( FCount() )
         cCol  := ::FieldName( n ) //<- CORECCION!!!
         AAdd( ::aFldNames, cCol )
#ifdef USE_HASH
         ::hFlds[ cCol ] := n
#endif


La pregunta: es error de xHarbour ???


Rolando
Cochabamba, Bolivia
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: bug en la funcion FieldName() xharbour y TDATABASE
Posted: Wed Mar 25, 2015 04:29 PM

Rolando,

Prueba a cambiar esta línea:

cCol := ( ::cAlias )->( FieldName( n ) )

por

cCol := ( ::cAlias )->( DbStruct()[ n, 1 ] )

si asi funciona, entonces sería problema de xharbour

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Re: bug en la funcion FieldName() xharbour y TDATABASE
Posted: Wed Mar 25, 2015 06:09 PM

Antonio:

Hice el cambio y funciona!!!

Entonces el problema es en xHarbour.

Sin embargo prefiero hacerlo asi:

cCol := ::FieldName( n )

porque le da mas claridad al codigo (segun yo)

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: bug en la funcion FieldName() xharbour y TDATABASE
Posted: Wed Mar 25, 2015 06:27 PM

Si, estoy de acuerdo contigo :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: bug en la funcion FieldName() xharbour y TDATABASE
Posted: Thu Mar 26, 2015 06:27 AM

Thanks.
I made the correction this way in database.prg:
cCol := ::aStruct[ n, 1 ]
I think this works too.
The fix will be available from next release.

Regards



G. N. Rao.

Hyderabad, India
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: bug en la funcion FieldName() xharbour y TDATABASE
Posted: Wed Apr 01, 2015 08:49 PM

Hola

si te pasas en algun momento a harbour vas a tener problemas con los nombres de los campos mayores a 10 caracteres

tuve ese problema y la solucion fue cambiar los largos de los nombres de los campos

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl

Continue the discussion