Adolfo wrote:Carlos .. para los nombres de la columnas usa
oRs:Fields( nField ):Name
Puedes Recuperarlas asi.
For n= 1 to ( oRs:Fields:Count )
AADD( oRsNames, oRs:Fields( n-1 ):Name )
Next
Gracias, no me di cuenta que ya estaba en :New().
Más sugerencias.
Después de capturar los nombres de las columnas en el método NEW(), antes del Return Self, añade:
FieldToData( Self )
y añade este código al final de TADOBase.PRG:
/* ******************************* */
//----------------------------------------------------------------------------//
// Es una adaptación del código de TDBF de Manuel Expósito para TADOBase.
// C.Gelabert 13/04/2008
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
// Este función crea un MESSAGE para cada columna.
static function FieldToData( oADODb )
AEval( oADODb:aFldNames, ;
{ | cName, i | GenDataField( oADODb, i ) } ) )
return( oADODb )
//----------------------------------------------------------------------------//
// Se define el MESSAGE de una columna para tomar y dar valores.
static function GenDataField( oADODb, nPos )
Local cNameMethod := oADODb:aFldNames[ nPos ]
//#ifdef __HARBOUR__
local nClassH := oADODb:ClassH
__clsAddMsg( nClassH, cNameMethod, ;
{ | oADODb | oADODb:_FieldGet( nPos ) }, HB_OO_MSG_INLINE )
__clsAddMsg( nClassH, "_" + cNameMethod, ;
{ | oADODb, Val | oADODb:_FieldPut( nPos, Val ) }, HB_OO_MSG_INLINE )
//#else
/* Aquí de momento nada de nada. */
//#endif
return( cNameMethod )
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
/* ******************************* */
Estas funciones lo que hacen es crear un MESSAGE para cada columna con el nombre de ésta.
Esto permite que cuando se realiza:
cDomiciliocliente := oADODb:domicilio (por ejemplo)
se esté invocando al MESSAGE DOMICILIO que ahora existirá realmente, y por tanto la gestión de errores no se utilizará.
En consecuencia se optimiza la ejecución del código.
Espero que funcione, yo no lo he probado.
Si es así podrás eliminar "ERROR HANDLER OnError( )" y el METHOD OnError().
Saludos
Carlos G.