Placing a replicate(chr(0),8) in the importo variable I have the same result.
Looking inside the ADS documentation I found this :
AdsGetLong
Retrieves the long integer value from the given field.
Syntax
UNSIGNED32
AdsGetLong (ADSHANDLE hTable,
UNSIGNED8 *pucFldName,
SIGNED32 *plValue);
Parameters
hTable (I)
Handle of table or cursor.
pucFldName (I)
Name of field to retrieve.
plValue (O)
Return the value.
Special Return Codes
AE_NO_CURRENT_RECORD
Data cannot be retrieved from EOF or BOF.
Remarks
AdsGetLong returns the signed long value stored in the numeric, integer, short integer, double, CurDouble, RowVersion, or auto-increment field. It is possible to either overflow the value or lose decimal precision by using this function. If more precision is desired, use AdsGetDouble. When using this function to retrieve an auto-increment value, be sure to treat the result as an unsigned value. If AdsGetLong is used to retrieve a Money field, the four decimal digits will be rounded to the nearest whole number.
The pucFldName parameter can be passed as the field name itself or as the one-based integer field position. To pass an integer field position for the pucFldName parameter, use the ADSFIELD macro that is defined in ACE.H. For example, to specify the first field in the table, pass ADSFIELD(1) for the pucFldName parameter; to specify the second field in the table, pass ADSFIELD(2) for the pucFldName parameter; etc.