Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Error File is Not Open
Message
From
15/09/2015 15:24:48
 
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01624619
Message ID:
01624648
Views:
50
>>>Hi,
>>>
>>>I have trapped (using Try / Catch) an error "File is not open" in the following section of the code:
>>>
>>>
>>>IF SELECT("V_WO_NUM") > 0 
>>>	SELECT V_WO_NUM
>>>	INDEX ON FIELD1 TAG FIELD1
>>>	INDEX ON FIELD2 TAG FIELD2
>>>	INDEX ON FIELD3 TAG FIELD3
>>>	INDEX ON FIELD4 TAG FIELD4
>>>	INDEX ON FIELD5 TAG FIELD5
>>>	INDEX ON FIELD6 TAG FIELD6
>>>	SET ORDER TO TAG FIELD3
>>>ENDIF 
>>>
>>>
>>>Before the above code the cursor V_WO_NUM is created by SQL SELECT (getting data from a VFP table).
>>>
>>>What could possible be wrong with the above (not one time but almost every other day) that it causes the problem? And I could never duplicate this error on my PC.
>>
>>The SQL SELECT that creates the V_WO_NUM cursor may be creating a filtered result set rather than an actual cursor. IF that's the case the cursor will have no presence in the file system, so any attempt to INDEX it will fail.
>>
>>You can address this by adding NOFILTER to the end of the SELECT that creates the cursor. That will force the cursor to actually exist in cases where it otherwise might not.
>>
>>As for it happening on one machine but not another - ironically, it will tend to happen more often on machines that have more available RAM and other resources. It may also happen more often on machines working against smaller data sets or cursors.
>
>Actually I thought about the NOFILTER too but could not explain it to myself (as well as you did) logically. I will add the NOFILTER to my SQL Select. Can you think of how I can force the program on my computer to have this error? That is, is it possible for me to change my SQL Select (for testing) so that no cursor will be created?
>Thank you!

I don't know of any way to reliably cause a filtered result set. They *tend* to be caused by simple SELECTS from single tables, without any JOINS or complex WHERE clauses. Possible examples:
SELECT * FROM SomeTable INTO CURSOR V_WO_NUM
SELECT Col1, Col5 FROM SomeTable INTO CURSOR V_WO_NUM
If you're purposely running your environment with low settings of SYS( 3050 ) you could try bumping them up to, say, 500000000 for both foreground and background. You could also try using smaller test data.
Regards. Al

"Violence is the last refuge of the incompetent." -- Isaac Asimov
"Never let your sense of morals prevent you from doing what is right." -- Isaac Asimov

Neither a despot, nor a doormat, be

Every app wants to be a database app when it grows up
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform