FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour MS Access problem
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
MS Access problem
Posted: Thu Oct 13, 2011 05:03 PM
To All

I am putting together a major application with a MS Access backend .. I have a strange problem..

I have a xbrowse property table that when you double click .. the detail screen opens six tables which in turn I view thru panels ..

Where I am having problems is as I open and close the detail records from the master Property table ( about 10 times ) .. the related six tables fail to open always at the forth table. I have temporarily rem'd out the forth table and again after a few open and closes .. the forth table refuses to open...

The only way I can get the tables to re-open is to quit the Master Property table and re-open the Property table and once again the relational tables open.

Unfortunitly I do not know if this is a timing issue with Access or resource problem ? When I close the detail screen I am closing all the relational tables and I know they are all closing properly ..

Any Ideas would be appreciated !

Thanks
Rick Lipkin

Code (fw): Select all Collapse
//-------------------------------
FUNC _PropView( cMODE,oRsProp,oWnd,oBtn1,oBtn2,oBtn3,oBtn4,oBtn5,oBtn6,oBtn7,oBtn8,oBtn9,oBtn10,oBrw )

LOCAL SAYING,cDEFA
LOCAL cTITLE, lOK1
LOCAL oIco,oBrush

LOCAL oRsOwn,oERR,cSQL,cPROPEID,oRsDwell,oRsRes,oRsVeh,oRsPet,oRsBoat
LOCAL cEID

// will always be in view or edit


IF cMODE = "A"
   cMODE := "V"
ENDIF

IF oRsProp:EOF
   SAYING := "SORRY ... Before you can EDIT or View a record"+chr(10)
   SAYING += "You have to ADD one First"+chr(10)
   MsgInfo( SAYING )
   _CleanUP()
   RETURN(NIL)
ENDIF

IF xWRITE = 'Y' .or. xSUPER = 'Y'
ELSE
   SAYING := "You have READ ONLY Rights Here"
   MsgInfo( SAYING )
   cMODE := "V"
ENDIF

cDEFA := SET(7)
lOK   := .F.
lOK1  := .F.

// relational key

cPROPEID := oRsProp:Fields("propeid"):Value

// open Owner table

cSQL := "SELECT * from OWNER where PROPEID = '"+cPROPEID+"' order by CurrentOwner,LastName"

oRsOwn := TOleAuto():New( "ADODB.Recordset" )
oRsOwn:CursorType     := 1        // opendkeyset
oRsOwn:CursorLocation := 3        // local cache
oRsOwn:LockType       := 3        // lockoportunistic

TRY
   oRsOwn:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening OWNER table" )
   _CleanUP()
   RETURN(.F.)
END TRY

SysReFresh()

// open dwelling table

cSQL := "SELECT * from DWELLING where PROPEID = '"+cPROPEID+"'"

oRsDwell := TOleAuto():New( "ADODB.Recordset" )
oRsDwell:CursorType     := 1        // opendkeyset
oRsDwell:CursorLocation := 3        // local cache
oRsDwell:LockType       := 3        // lockoportunistic

TRY
   oRsDwell:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening DWELLING table" )
   oRsOwn:Close()
   _CleanUP()
   RETURN(.F.)
END TRY

SysReFresh()

// open resident table

cSQL := "SELECT * from RESIDENT where PROPEID = '"+cPROPEID+"' order by ResidentSort,LastName,FirstName"

oRsRes := TOleAuto():New( "ADODB.Recordset" )
oRsRes:CursorType     := 1        // opendkeyset
oRsRes:CursorLocation := 3        // local cache
oRsRes:LockType       := 3        // lockoportunistic

TRY
   oRsRes:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening RESIDENT table" )
   oRsOwn:Close()
   oRsDwell:Close()
   _CleanUP()
   RETURN(.F.)
END TRY

// open pets table .... dies here

cSQL := "SELECT * from PETS where PROPEID = '"+cPROPEID+"'"

oRsPet := TOleAuto():New( "ADODB.Recordset" )
oRsPet:CursorType     := 1        // opendkeyset
oRsPet:CursorLocation := 3        // local cache
oRsPet:LockType       := 3        // lockoportunistic

TRY
   oRsPet:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening PETS table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   _CleanUP()
   RETURN(.F.)
END TRY

// open vehicle table

cSQL := "SELECT * from VEHICLE where PROPEID = '"+cPROPEID+"'"

oRsVeh := TOleAuto():New( "ADODB.Recordset" )
oRsVeh:CursorType     := 1        // opendkeyset
oRsVeh:CursorLocation := 3        // local cache
oRsVeh:LockType       := 3        // lockoportunistic

TRY
   oRsVeh:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening VEHICLE table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   oRsVeh:CLose()
   _CleanUP()
   RETURN(.F.)
END TRY

// open boats table

cSQL := "SELECT * from BOATS where PROPEID = '"+cPROPEID+"'"

oRsBoat := TOleAuto():New( "ADODB.Recordset" )
oRsBoat:CursorType     := 1        // opendkeyset
oRsBoat:CursorLocation := 3        // local cache
oRsBoat:LockType       := 3        // lockoportunistic

TRY
   oRsBoat:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening VEHICLE table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   oRsVeh:CLose()
   oRsPet:Close()
   _CleanUP()
   RETURN(.F.)
END TRY




Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: MS Access problem
Posted: Thu Oct 13, 2011 05:39 PM
Rick:

I have a couple ideas, lets try the first one

Pls close the table before open it again.

Code (fw): Select all Collapse
IF oRsPet <> NIL
    IF oRsPet:State() = adStateOpen
        oRsPet:Close()
    ENDIF
ENDIF

cSQL := "SELECT * from PETS where PROPEID = '"+cPROPEID+"'"

oRsPet := TOleAuto():New( "ADODB.Recordset" )
oRsPet:CursorType     := 1        // opendkeyset
oRsPet:CursorLocation := 3        // local cache
oRsPet:LockType       := 3        // lockoportunistic

TRY
   oRsPet:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening PETS table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   _CleanUP()
   RETURN(.F.)
END TRY


Regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem
Posted: Thu Oct 13, 2011 06:09 PM

Armando

Your suggestion made sense .. but it had no effect .. the magic number seems to be 7 opens and closes and then the 4th table or so refuses to open.

I have had timing issues with Access during the data conversion with multiple records being added and updated .. I had to put SysWait() in between the oRs:Update()s to keep the program from failing ..

I feel certain the tables are closed .. I just think the IO on the Access table is just too much and the .mdb just can not keep up ..

What looks promising ( so far ) is just opening up all the tables in the very beginning and using oRs:Filter conditions to give me my relational records... I would rather not do that, but this problem seems like a IO timing issue with Access.

Any other suggestions would be VERY welcome!

Rick Lipkin

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: MS Access problem
Posted: Thu Oct 13, 2011 06:37 PM
Rick: :-)

Rick Lipkin wrote:
What looks promising ( so far ) is just opening up all the tables in the very beginning and using oRs:Filter conditions to give me my relational records... I would rather not do that, but this problem seems like a IO timing issue with Access.
Rick Lipkin


That was my second one idea. in fact I do that way but with MySql, I have a PRG with ten tables and not problem at all.

Best regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 883
Joined: Thu Dec 24, 2009 12:46 AM
Re: MS Access problem
Posted: Thu Oct 13, 2011 07:15 PM
It may not have anything to do with this, but do you have set properly the number of files that (x)Harbour can handle???

Code (fw): Select all Collapse
sethandlecount( 40 )


EDITED:
Also check this page:

http://www.geeksengine.com/article/how-to-change-timeout-value-for-access-sql.html

=====>

Bayron Landaverry
xBasePHP.com
(215)2226600 Philadelphia,PA, USA
MayaBuilders@gMail.com
Guatemala

FWH25.06--Harbour 3.0.0--BCC7.7--UEstudio 10.10
Windows 10

FiveWin, One line of code and it's done...

Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem
Posted: Thu Oct 13, 2011 09:07 PM

Bayron

I appreciate your suggestion .. the queries are all ADO and just open tables passing the foreign key .. nothing very difficult.

So far the 'open all' tables using filter conditions seem to have stabilized the intermittent errors .. I hate to keep tables open and only open and close what I need .. when I need it. So often pc's lock up for various reasons and depending on how bad they crash .. so goes your tables be it .dbf or .mdb.

I would MUCH prefer Sql server .. however, this project will be for a small group of users on a peer to peer network..

Rick

Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem
Posted: Fri Oct 14, 2011 02:35 PM

Bayron

Thanks for your second suggestion .. setting the handle count had no effect .. It just seems there is a limit on how many times ( usually 10 opens and closes ) Access will allow .. Darnedest thing I have ever seen ..

I have built my whole program around Access and in the final testing .. you can only open and close 10 records that open multiple and close tables.

Rick Lipkin

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: MS Access problem
Posted: Fri Oct 14, 2011 02:50 PM
I have built my whole program around Access and in the final testing .. you can only open and close 10 records that open multiple and close tables.

Mr Rick
This is a surprising news to me also.

In that case,

#1. Can you try data shaping? Not sure how it works with Access though. But the main table and all linked tables are just one recordset with child chapters.

or

#2. You may not need to show all the child tables at the same time on the screen. You may keep opening and closing what child table you need to show on the screen.
Regards



G. N. Rao.

Hyderabad, India
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem
Posted: Fri Oct 14, 2011 04:55 PM
Rao

I am working thru changes to this program to open all tables with the initial master Property xbrowse. When I click into the detail .. originally I opened up all the detail tables then the details screen would populate the panels and when a tab was selected .. the browses were all keyed up.

When the details screen closed all the detail tables would close and return control back to the Master Property table.

Then once again the open and close cycle would start when you clicked on the Property details .. open all the tables ... then close them down. On the 10th iteration of opening and closing .. the forth ( or so ) table would fail in the try\catch break point and return me to the master Property table. Close the master property table and reopen it .. would fix the problem til you cycled thru the same process 10 times.

When I go thru the valid close .. all the tables get closed and the object reference gets nil'd out .. so I do not see this as a memory leak.

I had to switch gears and open all the tables at once with the master Property table .. then use a filter condition to simulate the scoping of my foreign key on the related tables. So far that has worked just fine .. I have been able to cycle thru the master\detail as many times as I wish ..

However, now I am dealing with rewriting the concurrency and workstation visibility with stale buffered up recordsets. I did not have to deal with that because I was always opening up a fresh recordset with each time I looked at the detail.

Within the detail are xbrowses cued up with multiple residents, vehicles, etc .. and you can drill farther into the xbrowses to get to the individual data.

As it turns out you can not issue a ReQuery from the the action trigger pre or post because xbrowse was in focus and re-shuffling the deck with a fresh recordset causes xbrowse to break with all kinds of bookmark problems.

What I have done is when I drill to my individual data from xbrowse is issue the Requery from the form level save the primary key, do a oBrw:Refresh then find the row .. at that point I can reissue a oBrw:ReFresh and return back to xbrowse and the rows are repopulated ..

Here is the requery code when I go into the form .. which detects if that row was possibly deleted by another user or the data had changed

All this work is because Access does not respect the ReSync() method ..

Just thought I would share this code .. I think these ideas can help other ADO users deal with their concurrency and workstation visibility as well.

Rick Lipkin

Code (fw): Select all Collapse
//-------------------------------
FUNC _ResView( cMODE,oRsRes,oRsProp,oBrw )

LOCAL SAYING,cDEFA
LOCAL cTITLE, lOK1,oBTN1,oBTN2,oBTN3

cDEFA := SET(7)

IF cMODE = "E" .or. cMODE = "A"
   IF xSUPER = 'Y' .or. xWRITE = 'Y'
   ELSE
      SAYING := "You have READ ONLY Rights Here"
      MsgInfo( SAYING )
      cMODE := "V"
   ENDIF
ENDIF

IF oRsRes:EOF .and. cMODE <> "A"
   SAYING := "SORRY ... Before you can EDIT or VIEW a record"+chr(10)
   SAYING += "You have to ADD one First"+chr(10)
   MsgInfo( SAYING )
   _CleanUP()
   RETURN(.F.)
ENDIF

// test for concurrency
// and workstation updates
If cMode = "V" .or. cMode = "E"

   cEID  := oRsRes:Fields("ResidentEid"):Value
   cNAME := alltrim( oRsRes:Fields("FirstName"):Value)+" "+;
            alltrim( oRsRes:Fields("LastName"):Value)

   oRsRes:ReQuery()

   try
     oRsRes:MoveFirst()
   catch
     Saying := "Sorry .. there was a problem Accessing your record"+chr(10)
     Saying += "For Resident "+cNAME+CHR(10)
     Saying += "Check the transaction log to see if someone else"+chr(10)
     Saying += "Deleted your record before you did"+chr(10)
     MsgInfo( saying )
     oBrw:ReFresh()
     Return(.f.)
   End Try

   oRsRes:Find( "ResidentEid = '"+cEID+"'" )

   if oRsRes:eof
      Saying := "Sorry .. there was a problem Accessing your record"+chr(10)
      Saying += "For Resident "+cNAME+CHR(10)
      Saying += "Check the transaction log to see if someone else"+chr(10)
      Saying += "Deleted your record before you did"+chr(10)
      MsgInfo( saying )
      oRsRes:MoveFirst()
      oBrw:ReFresh()
      Return(.f.)
   Endif

   oBrw:ReFresh()

Endif

cDEFA := SET(7)
lOK   := .F.

IF cMODE = "A"

   cFirstName         := space(30)
   cMiddleInitial     := space(2)
   cLastName          := space(30)
   dDob               := ctod("")
   cResidentEmail     := space(50)
   cMaleFemale        := space(1)
   cPhoneType         := space(15)
   cAltPhone          := space(13)
   cResidentComments  := space(200)
   cResidentType      := "OWNER         "
   nRad_ResidentOrder := 1
   xUPDATED           := 1

ELSE

   cFirstName         := oRsRes:Fields("FirstName"):Value
   cMiddleInitial     := oRsRes:Fields("MiddleInitial"):Value
   cLastName          := oRsRes:Fields("LastName"):Value
   dDob               := if(empty(oRsRes:Fields("dob"):Value),ctod("00/00/0000"),oRsRes:Fields("dob"):Value )
   cResidentEmail     := oRsRes:Fields("ResidentEmail"):Value
   cMaleFemale        := oRsRes:Fields("MaleFemale"):Value
   cPhoneType         := oRsRes:Fields("PhoneType"):Value
   cAltPhone          := oRsRes:Fields("AltPhone"):Value
   cResidentComments  := oRsRes:Fields("ResidentComments"):Value
   cResidentType      := oRsRes:Fields("ResidentType"):Value
   nRad_ResidentOrder := oRsRes:Fields("ResidentOrder"):Value
   xUPDATED           := oRsRes:Fields("updated"):Value

ENDIF






Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem ( solved )
Posted: Sat Oct 15, 2011 04:27 PM
Rao and All

Playing with this code again last night .. I changed the location
of my table variable oRs objects to the top of my calling program as
static rather than local to the program where the tables are created.

Apparently the local oRs variables defined in the program eventually lost their scope.. and the program just 'breaks'.

That seems to have cured the problem.

Thanks for everyones help and advice !
Rick Lipkin

Code (fw): Select all Collapse
STATIC oYrbuilt,oModel,oBedrms,oCBXFire,oLastpaint,oPainter
STATIC oLastroof,oRoofcolor,oRoofmfr,oRoofer,oStrcomm,oPaintColor
STATIC cYrbuilt,cModel,cBedrms,lCBXFire,cLastpaint,cPainter
STATIC cLastroof,cRoofcolor,cRoofmfr,cRoofer,cStrcomm,cPaintColor
STATIC yUPDATED

STATIC oRsOwn,oRsRes,oRsPet,oRsVeh,oRsBoat,oRsDwell // moved here to static


#INCLUDE "FIVEWIN.CH"
#include "xbrowse.ch"

//-------------------------------
FUNC _PropView( cMODE,oRsProp,oWnd,oBtn1,oBtn2,oBtn3,oBtn4,oBtn5,oBtn6,oBtn7,oBtn8,oBtn9,oBtn10,oBrw )

LOCAL SAYING,cDEFA
LOCAL cTITLE, lOK1
LOCAL oIco,oBrush
LOCAL cPROPEID
LOCAL cEID

// moved these to top as static
* LOCAL oRsOwn,oERR,cSQL,cPROPEID,oRsDwell,oRsRes,oRsVeh,oRsPet,oRsBoat 


// will always be in view or edit

IF cMODE = "A"
   cMODE := "V"
ENDIF

IF oRsProp:EOF
   SAYING := "SORRY ... Before you can EDIT or View a record"+chr(10)
   SAYING += "You have to ADD one First"+chr(10)
   MsgInfo( SAYING )
   _CleanUP()
   RETURN(NIL)
ENDIF

IF xWRITE = 'Y' .or. xSUPER = 'Y'
ELSE
   SAYING := "You have READ ONLY Rights Here"
   MsgInfo( SAYING )
   cMODE := "V"
ENDIF

cDEFA := SET(7)
lOK   := .F.
lOK1  := .F.

// relational key

cPROPEID := oRsProp:Fields("propeid"):Value

cSQL := "SELECT * from OWNER where PROPEID = '"+cPROPEID+"' order by CurrentOwner,LastName"

oRsOwn := TOleAuto():New( "ADODB.Recordset" )
oRsOwn:CursorType     := 1        // opendkeyset
oRsOwn:CursorLocation := 3        // local cache
oRsOwn:LockType       := 3        // lockoportunistic

TRY
   oRsOwn:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening OWNER table" )
   _CleanUP()
   RETURN(.F.)
END TRY

SysReFresh()

// open dwelling table

cSQL := "SELECT * from DWELLING where PROPEID = '"+cPROPEID+"'"

oRsDwell := TOleAuto():New( "ADODB.Recordset" )
oRsDwell:CursorType     := 1        // opendkeyset
oRsDwell:CursorLocation := 3        // local cache
oRsDwell:LockType       := 3        // lockoportunistic

TRY
   oRsDwell:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening DWELLING table" )
   oRsOwn:Close()
   _CleanUP()
   RETURN(.F.)
END TRY

SysReFresh()

// open resident table

cSQL := "SELECT * from RESIDENT where PROPEID = '"+cPROPEID+"' order by ResidentSort,LastName,FirstName"

oRsRes := TOleAuto():New( "ADODB.Recordset" )
oRsRes:CursorType     := 1        // opendkeyset
oRsRes:CursorLocation := 3        // local cache
oRsRes:LockType       := 3        // lockoportunistic

TRY
   oRsRes:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening RESIDENT table" )
   oRsOwn:Close()
   oRsDwell:Close()
   _CleanUP()
   RETURN(.F.)
END TRY

// open pets table

cSQL := "SELECT * from PETS where PROPEID = '"+cPROPEID+"'"

oRsPet := TOleAuto():New( "ADODB.Recordset" )
oRsPet:CursorType     := 1        // opendkeyset
oRsPet:CursorLocation := 3        // local cache
oRsPet:LockType       := 3        // lockoportunistic

TRY
   oRsPet:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening PETS table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   _CleanUP()
   RETURN(.F.)
END TRY

// open vehicle table

cSQL := "SELECT * from VEHICLE where PROPEID = '"+cPROPEID+"'"

oRsVeh := TOleAuto():New( "ADODB.Recordset" )
oRsVeh:CursorType     := 1        // opendkeyset
oRsVeh:CursorLocation := 3        // local cache
oRsVeh:LockType       := 3        // lockoportunistic

TRY
   oRsVeh:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening VEHICLE table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   oRsVeh:CLose()
   _CleanUP()
   RETURN(.F.)
END TRY

// open boats table

cSQL := "SELECT * from BOATS where PROPEID = '"+cPROPEID+"'"

oRsBoat := TOleAuto():New( "ADODB.Recordset" )
oRsBoat:CursorType     := 1        // opendkeyset
oRsBoat:CursorLocation := 3        // local cache
oRsBoat:LockType       := 3        // lockoportunistic

TRY
   oRsBoat:Open( cSQL,xCONNECT )
CATCH oErr
   MsgInfo( "Error in Opening VEHICLE table" )
   oRsOwn:Close()
   oRsDwell:Close()
   oRsRes:CLose()
   oRsVeh:CLose()
   oRsPet:Close()
   _CleanUP()
   RETURN(.F.)
END TRY
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: MS Access problem
Posted: Sat Oct 15, 2011 04:44 PM

Rick:

I am glad to hear that.

Regards

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Re: MS Access problem
Posted: Sun Oct 16, 2011 03:00 PM
Rick,

Playing with this code again last night .. I changed the location
of my table variable oRs objects to the top of my calling program as
static rather than local to the program where the tables are created.


I'm not even sure why that would work unless your entire program is in one PRG. Static vars are visible only in the PRG where they are defined. Are you passing these vars to other functions in other PRGs?


Regards,
James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: MS Access problem
Posted: Sun Oct 16, 2011 03:43 PM

James

This particular .prg just opens the details screen that contains all my folders and relational tables .. the Master property table contains my primary key and I pass the Property table to this module .. open my relational tables and pass the relational tables ( defined with local oRs variables ) downstream to other programs as needed.

I really did not see any difference defining my table oRs variables local to where I initialize and open them, pass them as parameters downstream .. and that worked perfectly till I just happen to start stressing the Property to detail code.

Since they were defined local .. when the detail function returned back and quit .. so did the scope of the local table variables.. seemed clean and tidy. Only when I began opening and closing several properties did I notice the detail function always seem to break after the 10th time and always after the forth table opened .. no matter what table was forth.

I just figured Access was having some IO problems and eventually 'broke' .. again, since the table variables were local .. when the detail returned back to the Property master table .. the scope of the variables were released and not a memory issue.. Only when I open and close the detail down multiple times did the program 'break'

Literally bugged the ( &&$$$%% censored ) out of me. So I decided to open all my tables at one time when the Master property table opened up and use a filter condition to scope my foreign keys in my tables .. and that worked .. I opened and closed about 50 or so records with their detail and the application was very stable.

Obviously I had to go back and re-write my table visibility because all my records are buffered up when the Master property screen comes up .. which presented a challenge of forcing requery() ..

I decided there had to be some crazy reason why consistently the relational table creation function broke in the same place .. had to be a reason. For 'hoots and grins' .. I decided to move the local variables in my static function to the top of the calling .prg and define them as static .. and MUCH to my amazement .. the program quit failing .. of course, now that the variables were static .. I had to NIL them out in the valid close.

Based on that seemingly ( wasn't going to make any difference ) change .. I just concluded .. for some odd strange reason .. the local table variables that were always re-initialized each time I went to the detail .. somehow just lost their visibility .. I can not understand it .. makes no sense, but moving the table oRs variable declaration to the top of the calling program as Static .. seems to have fixed my problem..

Go figure

Rick Lipkin

Continue the discussion