Hi Folks,
Please check the following scenario:
This is an intermittent problem for some users but not all users. The
common points are:
"Restricted" Domain Users running my application on Windows XP or Windows 7.
My application is installed in "C:\Program Files\My Application" on XP, and
in "C:\My Application" on Windows 7.
The simplified code below describes a process that runs in a tight loop to
create temporary tables, uses them to print a report (one report per loop),
closes and erases those tables, and loops again. The reports are identical
except for the data in them. There can be any number of reports; typically
the number ranges between 30 and 100 per run.
I know those locations are not supposed to be writeable, but I explicitly
grant "Modify" permission to the users. This enables them to do things like
create subdirectories and new files, modify existing files, and delete
files, in those locations. This works at least some of the time for all
users, but at some times, for some users, the following happens:
LoopMethod
Method1
oktocontinue = .T.
* Close a bunch of temporary tables. (They ARE tables, not cursors.)
IF Method2() = .F.
* Display some error message.
oktocontinue = .F.
ENDIF
IF oktocontinue = .T.
* Erase the temporary tables.
Method3()
* Code to re-create the just-closed and erased tables and
populate them
* with new data.
* These are FREE tables created in the local working directory.
* At this time EXCLUSIVE is OFF, but it shouldn't matter.
These tables
* are only being accessed by my code in this one location
at this one
* time. I never use USE AGAIN. I never use multiple
datasessions. I
* never use multiple aliases for the same table.
* etc. etc.
ENDIF
RETURN oktocontinue
EndMethod1
Method2
IF USED("sometable1")
SELECT sometable1
USE
ENDIF
IF USED("sometable2")
SELECT sometable2
USE
ENDIF
IF USED("sometable3")
SELECT sometable3
USE
ENDIF
IF USED("sometable1") OR USED("sometable2") OR USED("sometable3")
* This never happens. It ought to mean the tables are
closed, right? Which
* means, since only this single process touches them, nobody
and nothing
* should have any kind of lock on them, right?
RETURN .F.
ELSE
RETURN .T.
ENDIF
EndMethod2
Method3
ERASE sometable1.* && BANG!! Error 1705 "File access denied."
ERASE sometable2.*
ERASE sometable3.*
EndMethod3
EndLoopMethod
Can anyone explain this? What am I missing here?
Thanks for any help.
Ken Dibble
www.stic-cil.org
_______________________________________________
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.