FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour CLASS TDbOdbcDirect, metodo Eof()
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
CLASS TDbOdbcDirect, metodo Eof()
Posted: Thu Oct 19, 2006 03:59 PM
En la clase TdbOdbcDirect el metodo Eof es :
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
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

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



PD
:-) Ya se que debiera usar ADO, estamos en ello.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
CLASS TDbOdbcDirect, metodo Eof()
Posted: Thu Oct 19, 2006 04:22 PM

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/
Posts: 229
Joined: Wed Oct 12, 2005 05:32 PM
CLASS TDbOdbcDirect, metodo Eof()
Posted: Fri Oct 20, 2006 05:32 PM
Hola Biel,

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

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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
CLASS TDbOdbcDirect, metodo Eof()
Posted: Sun Oct 22, 2006 09:20 AM

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/

Continue the discussion