Page 1 of 1

Listbox never hits EOF oLbx:ReFresh()

Posted: Mon Aug 04, 2008 7:04 pm
by Rick Lipkin
In trouble-shooting a particular module .. I have a .dbf table that I use a standard wbrowse listbox. As I run thru the listbox in a do while .not. eof I use the oLbx:ReFresh() method to show the progress of the loop .. for some unknown reason .. the loop never hits the EOF and you have to hit the ESC key to get out of the look.

If I take out the oLbx:ReFresh() .. I do hit the EOF .. but if I leave in the oLbx:ReFresh() .. the record pointer never hit the eof()

FWH 8.07 ...

Here is an abreviated snipit of code

//-----------

oLBX:SetFocus()
SELECT 9

dbGoTop()
oLbx:Upstable()
SysReFresh()

DO WHILE .not. EOF()

SELECT 9
DELETE
SKIP
oLBX:ReFresh() // take this out and the loop hits eof
SysReFresh() //

SELECT 9 // never hits EOF
IF EOF()
msginfo( "eof exit" )
EXIT
ENDIF

ENDDO

oDLG1:End()

SAYING := "Batch Import Completed "
SAYING += ""+STR(nLOADED,4)+" Records Loaded"

MsgInfo( SAYING )

Posted: Mon Aug 04, 2008 7:18 pm
by Rick Lipkin
To All

Seems there has been a change in behavoir .. since I re-compiled this application:

I have to test for EOF first before the oLbx:ReFresh() .. Antonio .. can you look at the Refresh() method and see what has changed ??

Rick Lipkin

DO WHILE .not. EOF()

SELECT 9
DELETE
SKIP

// insert the eof test here before the oLbx:ReFresh()

IF EOF()
EXIT
ENDIF

oLBX:ReFresh()
SysReFresh()

ENDDO

Posted: Mon Aug 04, 2008 7:44 pm
by yury
hello, try this way:

Code: Select all

#include "FiveWin.ch"

Function Act_Lbx()

SET DELETE ON

cFile = 'c:\temp\MyDBF.DBF'

DBUSEAREA(.T.,'DBFNTX',cFile,'temp',.F.)

if NETERR()
   ? 'Error. Abort...' 
   RETURN
endif

bAction = {|| xDel() }

select temp
go top

define dialog oDlg from 01,01 to 32,100 title 'Lines'

@ 01,01 listbox oLbx FIELDS of oDlg SIZE 383,160

oDlg:bStart = {|| EVAL(bAction) } 

activate dialog oDlg

return




Function xDel()

nreg=0

msginfo('Starting...')

while .t.
    Sysrefresh()
   oLbx:GoTop()
   oLbx:Refresh()
   go top
   if eof()
      exit
  else
      delete
      nreg++
   endif   
enddo   

msginfo('Finished ! '+alltrim(str(nreg))+' records deleted...'  )

oDLg:End()

return
attention in SET DELETE ON

regards

Posted: Mon Aug 04, 2008 7:50 pm
by Rick Lipkin
Yury

Thank you for your comments .. the code I was using was working fine under FWH 27 .. I was using the oLbx:Refresh after the record was deleted and then testing for EOF after that event .. something has changed in the ReFresh() method that will not allow EOF to test .T. when the record pointer hits eof .. or ReFresh is moving the record pointer and it never hits eof

Rick

Posted: Tue Aug 05, 2008 4:36 am
by Antonio Linares
Rick,

You could check oBrw:lHitBottom to see if EOF was detected.

Posted: Tue Aug 05, 2008 10:23 am
by Rick Lipkin
Antonio

I will be away from the office today but I will try your suggestion and let you know

Rick