FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Intermittant ADO xBrowse error on valid close
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Intermittant ADO xBrowse error on valid close
Posted: Thu Jul 09, 2009 07:21 PM
To All

Receiving a strange intermittant run-time error 'recordcount' ADO from xBrowse FWH 904 on a 'valid' close ... here is the code and error:

Code (fw): Select all Collapse
IF oRsVEH:eof
   oRsVEH:MoveFirst()
ENDIF

cTITLE := "SELECT * from VEHICLES where AGENCY = '"+xAGENCY+"'"

nWd := GetSysMetrics(0) * .79
nHt := GetSysMetrics(1) * .8

lOK := .F.
DEFINE ICON oICO RESOURCE "KEY"

DEFINE WINDOW oWnd1                        ;
      FROM 10,10 to nHt, nWd PIXEL         ;
      TITLE cTITLE                         ;
      MENU BuildMenu(oRsVEH)               ;
      ICON oICO                            ;
      NOMINIMIZE                           ;
      NOZOOM                               ;
      MDICHILD

@ 0, 0 xBROWSE oBrw of oWnd1               ;
       RECORDSET oRsVeh                    ;
       COLUMNS 'VNUMBER',                  ;
              'TYPE',                      ;
              'LICENSE',                   ;
              'AGENCY',                    ;
              'MEMO',                      ;
              'MAKE',                      ;
              'TYPE',                      ;
              'YEAR',                      ;
              'PROG',                      ;
              'MOTORPOOL',                 ;
              'REGION',                    ;
              'LASTSERVCE',                ;
              'NEXTSERVCE',                ;
              'NEXTMILAGE',                ;
              'SERIALNUMB',                ;
              'ACTIVE',                    ;
              'READONLY'                   ;
       COLSIZES 48,50,80,50,70,120,120,55,95,95,140,80,80,80,190,80,80  ;
       HEADERS "Vnum",                     ;
               "Type",                     ;
               "License",                  ;
               "Agency",                   ;
               "See Memo",                 ;
               "Make",                     ;
               "Model",                    ;
               "Year",                     ;
               "Program",                  ;
               "Mtrpool",                  ;
               "Location",                 ;
               "LastServ",                 ;
               "NextServ",                 ;
               "NextMilage",               ;
               "Serial#",                  ;
               "Act",                      ;
               "ReadOnly"                  ;
       AUTOSORT AUTOCOLS LINES CELL

       oBrw:bClrStd := {|| {CLR_BLACK, if( oRsVeh:Fields("readonly"):Value = 'Y', RGB(179,203,204), CLR_WHITE ) } }

       oBrw:CreateFromCode()
       oWnd1:oClient := oBrw

       oBrw:aCols[2]:bEditValue := { |x|DispType( oRsVeh) }
       oBrw:aCols[5]:bEditValue := { |y|DispMemo( oRsVeh) }

       oBrw:bLDblClick := { |nRow,nCol | _VehView( "V", oRsVeh ) }
       oBrw:bKeyDown   := { |nKey| _Manual( nKey,oRsVeh ) }

ACTIVATE WINDOW oWND1 ;
         ON INIT( oBrw:SetFocus(), .F. ) ;
         VALID ( IIF( !lOK, _VehClose(.T., oRsVEH), .F. ))

RETURN( .T. )

//------------------------
static FUNCTION _VehClose( lCLEAN, oRsVEH )

IF lCLEAN = .T.
   lOK := .T.

   VEHNUM := oRsVEH:Fields("LICENSE"):Value
   FERASE( "C:\DBOVL\VEHNUM.MEM" )
   SAVE All like VEHNUM to C:\DBOVL\VEHNUM.MEM

  * oBRW:cALIAS:=NIL
   oRsVEH:CLose()
   _CleanUP()
   SysReFresh()
ENDIF

RETURN(.T.)


Error file

Code (fw): Select all Collapse
Application
===========
   Path and name: J:\VEHICLE\VEH32.EXE (32 bits)
   Size:   946,176 bytes
   Time from start: 6 hours 16 mins 38 secs 
   Error occurred at: 07/09/2009, 14:53:57
   Error description: Error ADODB.Recordset/6  DISP_E_UNKNOWNNAME: RECORDCOUNT
   Args:

Stack Calls
===========
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => SYSREFRESH(0)
   Called from: VEHBROW.PRG => _VEHCLOSE(273)
   Called from: VEHBROW.PRG => (b)_VBROW(240)
   Called from: .\source\classes\MDICHILD.PRG => TMDICHILD:END(262)
   Called from: .\source\classes\WINDOW.PRG => TMDICHILD:SYSCOMMAND(2325)
   Called from:  => TWINDOW:HANDLEEVENT(0)
   Called from: .\source\classes\MDICHILD.PRG => TMDICHILD:HANDLEEVENT(324)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => WINRUN(0)
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE(952)
   Called from: MAIN.PRG => MAIN(381)

System
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Intermittant ADO xBrowse error on valid close
Posted: Thu Jul 09, 2009 07:38 PM

Please remove SysRefresh(). By the time SysRefresh() is called, the recorset is already closed but the window and browse are not yet closed.

Regards



G. N. Rao.

Hyderabad, India
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Intermittant ADO xBrowse error on valid close
Posted: Thu Jul 09, 2009 08:27 PM
Rao

Thanks for the quick responce .. I had that statement in the old twbrowse as well and was getting similar errors during a valid close ..

Code (fw): Select all Collapse
//------------------------
static FUNCTION _VehClose( lCLEAN, oRsVEH )

IF lCLEAN = .T.
   lOK := .T.

   VEHNUM := oRsVEH:Fields("LICENSE"):Value
   FERASE( "C:\DBOVL\VEHNUM.MEM" )
   SAVE All like VEHNUM to C:\DBOVL\VEHNUM.MEM

  * oBRW:cALIAS:=NIL
   oRsVEH:CLose()
   _CleanUP()
 *  SysReFresh()
ENDIF

RETURN(.T.)


I previously rem'd out the oBrw:=NIL statement .. I don't know if it is still relevant any more with txbrowse ??

Thanks
Rick Lipkin
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Intermittant ADO xBrowse error on valid close
Posted: Thu Jul 09, 2009 08:45 PM
oBrw:=NIL

Not necessary.
Only thing you should make sure that there is no other statement that results in any screen painting after closing the table
Regards



G. N. Rao.

Hyderabad, India
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Intermittant ADO xBrowse error on valid close
Posted: Fri Jul 10, 2009 07:57 PM
Unfortunitly this error persists ..

Rick Lipkin

Code (fw): Select all Collapse
pplication
===========
   Path and name: J:\VEHICLE\VEH32.EXE (32 bits)
   Size:   946,176 bytes
   Time from start: 0 hours 3 mins 53 secs 
   Error occurred at: 07/10/2009, 15:39:34
   Error description: Error ADODB.Recordset/6  DISP_E_UNKNOWNNAME: RECORDCOUNT
   Args:

Stack Calls
===========
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => DIALOGBOXINDIRECT(0)
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
   Called from: source\rtl\win32ole.prg => TOLEAUTO:RECORDCOUNT(0)
   Called from: .\source\classes\XBROWSE.PRG => (b)TXBROWSE:SETADO(3625)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1284)
   Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(933)
   Called from: .\source\classes\CONTROL.PRG => TXBROWSE:HANDLEEVENT(1423)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => WINRUN(0)
   Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE(952)
   Called from: MAIN.PRG => MAIN(381)
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Intermittant ADO xBrowse error on valid close
Posted: Sat Jul 11, 2009 04:06 AM
oRsVEH:CLose()
_CleanUP()


If an error occurs in the function _CleanUP(), naturally you will get into this kind of situation.
Please Try
Code (fw): Select all Collapse
   _CleanUP()
  oRsVEH:Close()

Closing of Rs or any Table browsed should be the very last statement
Regards



G. N. Rao.

Hyderabad, India
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Intermittant ADO xBrowse error on valid close
Posted: Sun Jul 12, 2009 08:50 PM
Rao

The _Cleanup() function occurs after the oRsVeh:Close()

Code (fw): Select all Collapse
//------------------------
static FUNCTION _VehClose( lCLEAN, oRsVEH )

IF lCLEAN = .T.
   lOK := .T.

   VEHNUM := oRsVEH:Fields("LICENSE"):Value
   FERASE( "C:\DBOVL\VEHNUM.MEM" )
   SAVE All like VEHNUM to C:\DBOVL\VEHNUM.MEM

  * oBRW:cALIAS:=NIL
   oRsVEH:CLose()
   _CleanUP()
  * SysReFresh()
ENDIF

RETURN(.T.)


//---------------------
Static Func _CleanUP()

oWnd1      := NIL
oBRw       := NIL
oRsVEH     := NIL
oSay       := NIL
cSay       := NIL

RETURN(.T.)


Could perhaps oBrw and oWnd1 not be nil'd out and just left alone ??

Rick Lipkin
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Intermittant ADO xBrowse error on valid close
Posted: Sun Jul 12, 2009 09:28 PM
Rao

oRsVeh is defined static at the top of the program .. however I was passing it as a paramter within the same .prg especially to _VehClose() .. then the static oRsVeh was being nilled out in _CleanUP() after the local oRsVeh param was closed in _VehCLose ..


Code (fw): Select all Collapse
//------------------------
static FUNCTION _VehClose( lCLEAN ) //, oRsVEH )

IF lCLEAN = .T.
   lOK := .T.

   VEHNUM := oRsVEH:Fields("LICENSE"):Value
   FERASE( "C:\DBOVL\VEHNUM.MEM" )
   SAVE All like VEHNUM to C:\DBOVL\VEHNUM.MEM
  
  * oBRW:cALIAS:=NIL

  oRsVEH:CLose()
  oRsVeh := NIL

  _CleanUP()

ENDIF

RETURN(.T.)

//---------------------
Static Func _CleanUP()

oWnd1      := NIL
oBRw       := NIL

*oRsVEH     := NIL
*lOK
oSay       := NIL
cSay       := NIL

RETURN(.T.)


I decided to Close the ( static ) recordset and nil out the ( static ) variable at the same time .. strange though, after I nil out the ( static ) oRsVeh and then do a msginfo( oRsVeh ) .. I get all kinds of recordset errors similar to the same previous errors..

However, I am sure the _VehClose is fireing on MDI and windchild close and valid .. so I feel fairly confident the recordset is closing its connection ..

I remmed out the oRsVeh := NIL in the _Cleanup() as it should already be NIL. Hopefully this will stop the intermittant error and possible run-time confusion.

I will put this mod in production and see if it fails.

Rick
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Intermittant ADO xBrowse error on valid close
Posted: Mon Jul 13, 2009 12:09 PM

I don't know why you didn't build a reduced and self-contained sample of the problem. It would be much easier to help you.

EMG

Continue the discussion