Page 1 of 1

CLASS TDbOdbcDirect, metodo Eof()

Posted: Thu Oct 19, 2006 3:59 pm
by Biel EA6DD
En la clase TdbOdbcDirect el metodo Eof es :

Code: Select all

METHOD  Eof() INLINE ( (::cAlias)->(RecCount()) == (::cAlias)->(Recno()) .and. ::hStmt == 0 )
Es un tema de concepto, en xBase Eof era verdadero una vez superado el último registro, tal cual está este metodo, Eof es verdadero cuando estamos en el último registro. Código del tipo

Code: Select all

oDbf:GoTop()
While !oDbf:Eof()
   .... //hago algo
   oDbf:Skip()
End
procesaria todos los registros, menos el ultimo.
Hay algun motivo porque esto sea así, seria mas correcto y dentro de la filosofia xBase que metodo Eof() fuese

Code: Select all

METHOD  Eof() INLINE ( (::cAlias)->(Eof()) .and. ::hStmt == 0 )

PD
:lol: Ya se que debiera usar ADO, estamos en ello.

Posted: Thu Oct 19, 2006 4:22 pm
by Biel EA6DD
Buffff, para que esto funcionase habria que cambiar tambien el metodo Skip, y tendria repercusiones sobre la descarga asincrona de los datos.

Visto lo visto + vale dejarlo como esta.

Posted: Fri Oct 20, 2006 5:32 pm
by jlcapel
Hola Biel,

Estas modificaciones las tengo funcionando 100x100 en mis aplicaciones desde hace tiempo:

Code: Select all

METHOD Eof() INLINE ( (::cAlias)->(Eof()) .and. ::hStmt == 0 )


METHOD Skip( nRecs ) CLASS TDbOdbcDirect

   local nTotal, nRecno

   DEFAULT nRecs := 1

   if ::hStmt == 0 .or. nRecs <= 0
      (::cAlias)->(DbSkip( nRecs ))
      return nil
   endif

   If (::cAlias)->(IndexOrd()) == 0
      nTotal := (::cAlias)->(RecCount())
      nRecno := (::cAlias)->(Recno())

      If ( nRecno + nRecs )<= nTotal
         (::cAlias)->(DbSkip( nRecs ))
      else
         ::Fill( nRecno - nTotal + nRecs )
      Endif
   else
      ::Complete()
      (::cAlias)->(DbSkip( nRecs ))
   endif

return nil

Y sí... deberías plantearte la ìdea de cambiar a Ado. En www.capelblog.com hay dos artículos míos sobre este tema.

Saludos,
José Luis Capel

Posted: Sun Oct 22, 2006 9:20 am
by Biel EA6DD
Hola Jose Luis,
me alegra no ser el único al que le parezca interesnate cambiar el metodo Eof.
Aunque en el post puse "mejor dejarlo tal cual esta", la verdad es que no pude resistirme a cambiarlo. En el metodo skip no lo deje igual que el tuyo(me faltaba probar con open asincrono), el lunes lprobare tal cual lo tienes tu.

Le he dado un vistazo a tu blog, a los articulos sobre Ado, muy buenos, me estan ayudando para poder empezar a dar mis primieros pasos por Ado.