CLASS TDbOdbcDirect, metodo Eof()

Post Reply
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

CLASS TDbOdbcDirect, metodo Eof()

Post 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.
Last edited by Biel EA6DD on Thu Oct 19, 2006 4:46 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post 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.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post 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
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post 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.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Post Reply