Page 1 of 1

Controlar Error ADODB.RecordSet:FIELDS/9 - Solucionado

Posted: Wed Sep 04, 2024 8:12 pm
by leandro
Hola buenas tardes para todos, debido al cambio de mes a septiembre, hay momentos en los que la app a estado devolviendo el siguiente error:

Code: Select all | Expand

Application
===========
   Path and name: C:\dlyma\hymlyma.exe (32 bits)
   Size: 9,103,872 bytes
   Compiler version: xHarbour 1.3.0 Intl. (SimpLex) (Build 20231104)
   FiveWin  version: FWH 23.10
   C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
   Windows 10 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 2 mins 23 secs 
   Error occurred at: 15/08/2024, 09:25:28
   Error description: Error ADODB.RecordSet:FIELDS/9  El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual.: VALUE
   Args:

Stack Calls
===========
   Called from:  => TOLEAUTO:VALUE( 0 )
   Called from: z:\prg\R32_fact.prg => SERVICIONOTARIAS( 16197 )
   Called from: z:\prg\R32_fact.prg => (b)FFACTURAS( 501 )
   Called from: .\source\classes\TIMER.PRG => TIMEREVENT( 73 )
   Called from: .\source\classes\WINDOW.PRG => (b)TWINDOW:TWINDOW( 724 )
   Called from:  => TMDIFRAME:TIMER( 0 )
   Called from:  => TMDIFRAME:HANDLEEVENT( 0 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3651 )
   Called from:  => TRACKPOPUP( 0 )
   Called from: .\source\classes\MENU.PRG => TMENU:ACTIVATE( 1796 )
   Called from: z:\prg\R32_fact.prg => MMONITOREO( 17191 )
   Called from: z:\prg\R32_fact.prg => (b)MONITOREARSERVICIO( 17039 )
   Called from: .\source\classes\WINDOW.PRG => TCONTROL:RBUTTONDOWN( 2180 )
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:RBUTTONDOWN( 5516 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1861 )
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:HANDLEEVENT( 12566 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3651 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1113 )
   Called from: z:\prg\R32_menu.prg => VTNAPRINCIPAL( 1002 )
   Called from: z:\prg\R32_menu.prg => MAIN( 153 )

 
y se genera debido a que se hace una consulta sobre un filtro de una variable que no existe, alguien sabe como controlarlo?, para informarle al usuario que debe ajustar el filtro y que la aplicación no se reviente.

De antemano gracias.

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Wed Sep 04, 2024 8:39 pm
by nageswaragunupudi
How are you setting the filter?
Can we see the code?

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Fri Sep 06, 2024 9:00 am
by leandro
Mr. Rao gracias por responder

El código es bastante largo, pero publico aquí la forma como se genera el recorset de la consulta y el refresh que se hace

Así esta definido el xbrowse

Code: Select all | Expand


Local cFechaIni := "2024-08-01" //Definida en un archivo de tipo .ini
Local cFechaFin := "2024-08-31" //Definida en un archivo de tipo .ini

cVar := "SELECT * FROM facturas .... WHERE fecha>='"+cFechaIni+"' AND fecha <='"+cFechaFin+"'......."
oRsFtr := AdoExecute( oCnFtr, { |oCn| FW_OPENRECORDSET(oCn,cVar,adLockOptimistic,adOpenKeyset) } )

...

oWChPq:oMsgbar:cMsgDef = "Facturas de Venta"
oBrwFt := TXBrowse():New( oWChPq )
oBrwFt:nRowDividerStyle         := LINESTYLE_LIGHTGRAY
oBrwFt:nColDividerStyle         := LINESTYLE_LIGHTGRAY
oBrwFt:nHeaderLines             := 1
oBrwFt:lColDividerComplete      := .t.

....

oCol          = oBrwFt:AddCol()
oCol:bStrData = { || If( oRsFtr:Eof, Space( nWidth ), if(cvaltochar( oRsFtr:Fields( "nivel1" ):Value)="001","Radicada",)) }
oCol:cHeader  = "Trazabilidad"
oCol:nWidth   = 75
oCol:nHeadStrAlign = AL_LEFT
oCol:nDataStrAlign = AL_LEFT    
oCol:oHeaderFont = oFont    
oCol:lHide = .T.
oCol:bClrStd      = {|| {CLR_BLACK, if(cvaltochar( oRsFtr:Fields( "nivel1" ):Value)="001",;
                                    nRGB(255,226,125),nRGB(255,255,255)) }  }
oCol:bClrSelFocus = {|| {CLR_WHITE, if(cvaltochar( oRsFtr:Fields( "nivel1" ):Value)="001",;
                                    nRGB(255,201,14),nRGB(51,153,255)) }  }

...

Muchas mas columnas

....

oBrwFt:SetADO( oRsFtr )
oBrwFt:CreateFromCode() 

 
Asi hacemos el llamado de nuevo al recorset

Code: Select all | Expand


//refrescamos la ventana
oRsFtr:requery()
oBrwFt:goBottom()
oBrwFt:refresh()    

....

nLn := 1
nCnLnIm := len(aInFaim)
While nLn <= nCnLnIm 

    cFcId := aInFaim[nLn]["id_factura"] //Recuperamos id de la factura para buscar dentro del recorset
            
    oBrwFt:goTop()
    oRsFtr:Find("ll_itemfa="+alltrim(cFcId)) //AL buscar aquí no encuentra el id dentro del rango y se revienta 
    oBrwFt:refresh()

        nLn++
EndDo
 
De antemano gracias

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Fri Sep 06, 2024 7:12 pm
by Armando
Estimado Leandro:

Si en el SELECT tienes JOINs revisa que _ del JOIN existan y tengan valor

Saludos

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Sat Sep 07, 2024 10:54 am
by leandro
Armando buenos días, gracias por responder

Lo que pasa es que queremos poder controlar ese error como tal, sabemos que hay otra forma de informarle al usuario que cometió un error, ya que las variables de los filtros estan en un archivo .ini le puedo decir al usuario que su consulta no esta dentro del rango de fecha que desea buscar; pero lo que realmente queremos es poder controlar ese error en especifico, que se genera al no poder encontrar el elemento buscado o llegar al fin de recorset, no se que es lo que lo genera.

Saludos

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Mon Sep 09, 2024 3:50 am
by nageswaragunupudi

Code: Select all | Expand

 oRsFtr:Find("ll_itemfa='"+alltrim(cFcId) + "'")
Safest way:

Code: Select all | Expand

cSql     := "ll_itemfa== ?"
cFime    := FW_AdoApplyParams( cSql, { cFcId } )
TRY
oRs:Find( cFind )
if oRs:Eof()
   lFound := .f.
   oRs:MoveLast()
else
   lFound := .t.
endif 
CATCH
   lFound := .f.
END
? lFound
 

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Wed Sep 18, 2024 3:59 pm
by leandro
Que pena Mr. Rao, no había visto esta respuesta, estaba ocupado con el tema del webinar y la migración a 64 bits, intentando.

Apenas tenga resultado comento.

Re: Controlar Error ADODB.RecordSet:FIELDS/9

Posted: Tue Oct 01, 2024 3:58 pm
by leandro
Excelente Mr. Rao, problema solucionado :D

Como siempre muchísimas gracias por la ayuda.