CLASS TDbOdbcDirect, metodo Eof()

CLASS TDbOdbcDirect, metodo Eof()

Postby Biel EA6DD » Thu Oct 19, 2006 3:59 pm

En la clase TdbOdbcDirect el metodo Eof es :
Code: Select all  Expand view  RUN
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  Expand view  RUN
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  Expand view  RUN
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: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby Biel EA6DD » Thu Oct 19, 2006 4: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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Postby jlcapel » Fri Oct 20, 2006 5:32 pm

Hola Biel,

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

Code: Select all  Expand view  RUN
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
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby Biel EA6DD » Sun Oct 22, 2006 9: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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Willi Quintana and 62 guests