Ah. Two (or more) computers are involved. That makes it dicey to delete files except in this case it should work since you have an obvious "master" "slave" thing going. I'm guessing that the Master computer creates the table and the Slave is checking if the tables existe, and when found the report is printed and the Slave erases the tables?

Is there a third system, a server, storing the tables? I still think some file handle is not being released quickly enough by whatever system is actually storing the table(s) that you are trying to share and then delete.

Or I may not grok the configuration correctly.... :)

Mike

-------- Original Message --------
Subject: Re: Unexplained Error 1705 "Access Denied" Errors
From: Ken Dibble <[email protected]>
To: [email protected]
Date: 7/19/2013 12:27 PM

Are you closing the table, SomeTable1, and then trying to erase it within milliseconds? If the tables are located on a server (instead of your local drive) then it is likely that the server is not releasing the handle (flag, marker, user connection) on the file fast enough, and your application is trying to delete a file that the server thinks is still in use. If the SomeTable1 file is located on your local drive, then this probably wouldn't be applicable.

By the way, if you use cursors instead of tables, VFP will take care of the deletion of the files...you just create, use, and when you un-use, they're erased by Foxpro.

This might have been a case of the famous self-referential "Asking the question produces the answer", for which I apologize.

I use tables because in at least some cases the actual printing is done by a separate printing executable. In those cases, asking whether the table is USED() in the application that launches the printing .exe is pointless.

That aside, however, the printing .exe runs REPORT FORM... on a report whose data environment opens the necessary tables. When the printing .exe exits after running the report, it issues CLOSE TABLES ALL.

The printing .exe is called by tools.dll (if installed) or by ShellExecute if necessary. In both cases, it is called in asynchronous mode; that is, it's supposed to pause the calling application until the called (printing .exe) application is finished. Therefore those tables should have been closed before control gets returned to the loop I described earlier.

I cannot be sure whether my problem always and only occurs on systems that are using the separate print .exe. But if it does occur on them, it shouldn't, because the tables should be closed by the print .exe before the calling program tries to erase them.

I suppose I can put the ERASE calls inside a TRY...CATCH inside a DO WHILE loop. DO WHILE loops scare me though.....

Thanks for the help.

Ken Dibble
www.stic-cil.org


[excessive quoting removed by server]

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://mail.leafe.com/mailman/listinfo/profox
OT-free version of this list: http://mail.leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: 
http://leafe.com/archives/byMID/profox/[email protected]
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to