bug en la funcion FieldName() xharbour y TDATABASE

Post Reply
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

bug en la funcion FieldName() xharbour y TDATABASE

Post by RSalazarU »

Amigos del foro:

Manejo ADS + xharbour y tengo una consulta asi :

Code: Select all

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: Select all

Error description: Error BASE/1004  Message not found: TDataBase:AUTORIZACION
 
es porque en la clase TDataBase() se tiene este codigo

Code: Select all

      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: Select all

      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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: bug en la funcion FieldName() xharbour y TDATABASE

Post by Antonio Linares »

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
RSalazarU
Posts: 177
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia
Contact:

Re: bug en la funcion FieldName() xharbour y TDATABASE

Post by RSalazarU »

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)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: bug en la funcion FieldName() xharbour y TDATABASE

Post by Antonio Linares »

Si, estoy de acuerdo contigo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: bug en la funcion FieldName() xharbour y TDATABASE

Post by nageswaragunupudi »

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
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: bug en la funcion FieldName() xharbour y TDATABASE

Post by Patricio Avalos Aguirre »

Hola

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

tuve ese problema y la solucion fue cambiar los largos de los nombres de _
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
Post Reply