Page 1 of 1

Error ADSADT/5005 Error 5005

Posted: Mon May 09, 2016 9:25 pm
by Vikthor.Thomas
Buen día a tod@s

Estoy realizando una consulta usando Advantage Database versión 10, Harbour 3.2 dev 64 Bits , FWH64.1311

Y obtengo el siguiente mensaje de error :

Error ADSADT/5005 Error 5005: The supplied buffer was insufficient for the information returned. The data may have been truncated.
Le ha sucedido a alguien más ?

La misma consulta usando el ARC finaliza sin presentar problema.

Saludos

Re: Error ADSADT/5005 Error 5005

Posted: Wed May 11, 2016 12:16 pm
by RenOmaS
Hola

Esperimentastes configurar, la data

:CacheSize := 100

Re: Error ADSADT/5005 Error 5005

Posted: Wed May 11, 2016 5:53 pm
by Vikthor.Thomas
En que Objeto está esa data ?

Re: Error ADSADT/5005 Error 5005

Posted: Wed May 11, 2016 7:24 pm
by RenOmaS
Buenas.
en el recordset, antes del open

vea como utiliza fivewin wn adofuncs.prg

Code: Select all

   WITH OBJECT oRs
      if ! Empty( oCn )
         :ActiveConnection    := oCn
      endif
      :Source              := cSql
      :LockType            := nLockType
      :CursorLocation      := 3            // adUseClient
      :CacheSize           := 100
      :CursorType          := nCursorType  // adOpenDynamic
      if nMaxRecords != nil
         :MaxRecords       := nMaxRecords
      endif
      //
      TRY
#ifdef __XHARBOUR__
         if nOpt == nil
            :Open()
         else
            :Open( OleDefaultArg(), OleDefaultArg(), OleDefaultArg(), OleDefaultArg(), nOpt )
         endif
#else
         if nOpt == nil .or. Empty( oCn )
            :Open()
         else
            :Open( :Source, :ActiveConnection, :CursorType, :LockType, nOpt )
         endif
#endif
      CATCH
         if ! Empty( oCn )
            FW_ShowAdoError( oCn )
         endif
         oRs   := nil
      END
   END

Re: Error ADSADT/5005 Error 5005

Posted: Thu May 12, 2016 9:13 pm
by Vikthor.Thomas
Gracias por la respuesta

Alguna otra sugerencia, yo no estoy usando ADO

Code: Select all

cQuery:=alltrim(cQuery)
AdsConnect( cPath )
hAds := AdsConnection()
If hAds == 0
   MsgInfo( "La Sesion SQL no pudo ser iniciada, desconectando...")
   return nil
Endif

ADSCreateSQLStatement( cTable , 2 , hAds )
lSucces := ADSExecuteSQLDirect( cQuery )

 

Re: Error ADSADT/5005 Error 5005

Posted: Fri May 13, 2016 1:25 am
by RSalazarU
Vikthor:

Yo uso ADS en forma extensa, y hasta ahora no e tenido ese mensaje de error (espero no tenerlo nunca).

Por lo que entiendo del mensaje, la cadena/string cQuery es muy grande.

Por que no pruebas dividiéndola.

Otra alternativa seria crear procedimientos almacenados, para que realicen la mayor parte de la tarea.

Aca te dejo una funciones que a mi me ayudan en el trabajo:

Code: Select all

STATIC lError
STATIC nError
STATIC cError

//--------------------------//
Function SQL_Error()
   return lError
//--------------------------//
Function SQL_nError()
   return nError
//--------------------------//
Function SQL_cError()
   return cError
//--------------------------//
Function SQL_nErrorSubCode()
   return if(nError=0,0,Val(SubStr(cError,At("NativeError",cError)+14,4)))

//--------------------------//
//Ejecuta una comando SQL: INSERT, UPDATE, etc..., al final cierra el area
Function SQL_Command(cSql, nConnect)
local nAreaAnterior := Select()
local lOk := .F.

   lError := .F.
   nError := 0
   cError := ""
   DBSelectArea( 0 )
   if ADSCreateSQLStatement('SQL_Command', AdsSetFileType(), nConnect)// 1=ADS_NTX, 2=ADS_CDX, 3=ADS_ADT
      if ADSExecuteSQLDirect( cSql )
         lOk := .T.
      else
         lError  := .T.
         nError := AdsGetLastError(@cError)
         LogFile( ".\sqlerror.log", { "SQL_Command()", "ADSExecuteSQLDirect: "+cError, cSql} )
         if SQL_nErrorSubCode()=2102//Data truncated
            lOk := .T.
         endif
      endif
      DbCloseArea()
      //AdsCloseSQLStatement()
   else
      lError  := .T.
      nError := AdsGetLastError(@cError)
      LogFile( ".\sqlerror.log", { "SQL_Command()", "AdsCreateSqlStatement: "+cError} )
   endif
   DBSelectArea( nAreaAnterior )

   Return lOk

//--------------------------//
//Devuelve una consulta/cursor/tabla SQL: Select * from... , no cierra el area al final 
Function SQL_Cursor(cSql, cAlias, nConnect)
local lOk := .F.

   DEFAULT cAlias := cSAUROGetNewAlias( "SQL" )

   if Valtype(cAlias)="N" //el parametro pasado es una area NO un alias
      if cAlias > 0
         DBSELECTAREA( cAlias ) //Seleccionamos el area especificada
         if Used()
            cAlias:=Alias(cAlias)
            DbCloseArea()         //antes de volverla a abrir la cerramos; porque si la dejamos abierta se produce un error
         else
            cAlias:=cSAUROGetNewAlias( "SQL" )
         endif
      else
         DBSELECTAREA( 0 )
         cAlias:=cSAUROGetNewAlias( "SQL" )
      endif
   else
      DBSELECTAREA( Select(cAlias) ) //Si "cAlias" ya esta abierta en un area, la volveremos a abrir en la misma area.
                                     //Si el alias no esta abierta, Select(cAlias) devuelve 0 y seleccionamos el area 0
      if Used()
         DbCloseArea()         //antes de volverla a abrir la cerramos; porque si la dejamos abierta se produce un error
      endif
   endif

   lError := .F.
   nError := 0
   cError := ""
   if ADSCreateSQLStatement(cAlias, AdsSetFileType(), nConnect)// 1=ADS_NTX, 2=ADS_CDX, 3=ADS_ADT
      if ADSExecuteSQLDirect( cSql )
         lOk := .T.
      else
         lError  := .T.
         nError := AdsGetLastError(@cError)
         LogFile( ".\sqlerror.log", { "SQL_Cursor()", "ADSExecuteSQLDirect: "+cError, cSql} )
         DbCloseArea()
         //AdsCloseSQLStatement()
      endif
   else
      lError  := .T.
      nError := AdsGetLastError(@cError)
      LogFile( ".\sqlerror.log", { "SQL_Cursor()", "AdsCreateSqlStatement: "+cError} )
   endif

   Return lOk

 
Atentamente,

Rolando
Cochabamba, Bolivia

Re: Error ADSADT/5005 Error 5005

Posted: Tue May 17, 2016 2:18 pm
by Vikthor.Thomas
Gracias por responder

La consulta que hago es compleja y ADS la resuelve, el error se produce cuando quiero leer el cursor.
La estructura de datos que genera el cursor tiene un campo tipo "Q" longitud 32, decimals 0.
Usando la clase xBrowse, la información que contiene ese campo no se muestra, en cambio usando las clases xBrowse y/o sBrowse obtengo el error descrito.

Alguna sugerencia ?

Re: Error ADSADT/5005 Error 5005

Posted: Tue May 17, 2016 2:33 pm
by karinha

Re: Error ADSADT/5005 Error 5005

Posted: Tue May 17, 2016 2:54 pm
by karinha
5005 AE_INSUFFICIENT_BUFFER

O buffer fornecido é insuficiente para a informação retornada. Os dados podem ter sido truncado.

El tampón suministrado es insuficiente para la información devuelta. Los datos pueden haber sido truncado.

Re: Error ADSADT/5005 Error 5005

Posted: Tue May 17, 2016 3:30 pm
by Vikthor.Thomas
Gracias a todos por su ayuda.
El error lo he resuelto de la siguiente forma :

Code: Select all

Select cast('2016-01-17' as SQL_DATE) as Fecha, Cast('Inicial' as SQL_CHAR) as Movimiento
Haciendo la declaración de la columna como tipo Caracter, de lo contrario el curso crea un tipo de dato VARCHARFOX

Listo el pollo !!!!
Saludos

Re: Error ADSADT/5005 Error 5005

Posted: Tue May 17, 2016 3:30 pm
by Vikthor.Thomas
Gracias a todos por su ayuda.
El error lo he resuelto de la siguiente forma :

Code: Select all

Select cast('2016-01-17' as SQL_DATE) as Fecha, Cast('Inicial' as SQL_CHAR) as Movimiento
Haciendo la declaración de la columna como tipo Caracter, de lo contrario el curso crea un tipo de dato VARCHARFOX

Listo el pollo !!!!
Saludos