Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to close all tables opened in a routine?
Message
 
 
To
13/04/2008 11:10:59
Mike Yearwood
Toronto, Ontario, Canada
General information
Forum:
Visual FoxPro
Category:
Other
Environment versions
Visual FoxPro:
VFP 9 SP1
Miscellaneous
Thread ID:
01310216
Message ID:
01310316
Views:
19
Thank you, Mike. But the key also, as Jim said, if you don't need any other tables and cursors. In my case, even though I have a private data session, I have a bunch of cursors open and they need to remain open.

>You might want to consider an object with a private data session. Once released the opened tables would be closed. You could make that object a reusable class.
>
>
LOCAL m.loQuery, m.lnBefore, m.lnAfter, m.lcResult
>m.loQuery = CREATEOBJECT('sesCustomQuery')
>*m.lnBefore and m.lnAfter are just here to show zero
>*effects from running the query.
>m.lnBefore = AUSED(laBefore)
>m.lcResult = m.loQuery.ReturnValueFromQuery()
>m.lnAfter = AUSED(laAfter)
>?m.lnBefore,m.lnAfter,m.lcResult
>RETURN
>
>DEFINE CLASS sesCustomQuery as Session
>DataSession = 2
>
>PROCEDURE ReturnValueFromQuery
>SELECT TOP 1 cust_id FROM (HOME()+"SAMPLES\DATA\CUSTOMER.DBF") CUSTOMERS ORDER BY cust_id INTO CURSOR temp
>RETURN temp.cust_id
>ENDPROC
>ENDDEFINE
>
>
>
>>Yes, this method will work better as the first one was closing all open tables. Thank you very much.
>>
>>>OR
>>>
>>>AUSED(laCurrAliases)
>>>
>>>*-- Execute a Sql Select that opens one or more tables
>>>*** select * from mytable1 join mytable2 .. join mytable3.. etc.
>>>
>>>lnallAliases = AUSED(laArr)
>>>
>>>FOR lnLoop = 1 TO m.lnallAliases
>>>    IF ASCAN(laCurrAliases,m.laArr[m.lnLoop,1])# 0
>>>       LOOP
>>>    ENDIF
>>>    USE IN (m.laArr(m.lnLoop,1))
>>>NEXT
>>>
>>>
>>>>Thank you, Vladimir.
>>>>
>>>>>Try this:
>>>>>
*-- bookmark selected area
>>>>>lcSelect = ALIAS()
>>>>>
>>>>>*-- Execute a Sql Select that opens one or more tables
>>>>>*** select * from mytable1 join mytable2 .. join mytable3.. etc.
>>>>>
>>>>>lnOpenDbfs = AUSED(laArr)
>>>>>
>>>>>FOR lnLoop = 1 TO m.lnOpenDbfs
>>>>>
>>>>>    IF m.laArr[m.lnLoop,1] = m.lcSelect
>>>>>       LOOP
>>>>>    ENDIF
>>>>>
>>>>>    USE IN (m.laArr(m.lnLoop,1))
>>>>>NEXT
>>>>>
>>>>>
>>>>>>Good morning,
>>>>>>
>>>>>>I would like to find a way to close all tables that are opened in a routine.
>>>>>>
>>>>>>Here is an example.
>>>>>>
>>>>>>
>>>>>>*-- bookmark selected area
>>>>>>nSelect = select()
>>>>>>
>>>>>>*-- Execute a Sql Select that opens one or more tables
>>>>>>select * from mytable1 join mytable2 .. join mytable3.. etc.
>>>>>>
>>>>>>*-- Close all tables opened in the above SQL Select.
>>>>>>
>>>>>>*-- I believe I need to know the highest SELECT() at this
>>>>>>point and scan it backwards until coming to nSelect.
>>>>>>But how to determine currently highest SELECT()?
>>>>>>
>>>>>>
>>>>>>
>>>>>>Or if you think or can suggest a better method to accomplish it, I would appreciate it.
"The creative process is nothing but a series of crises." Isaac Bashevis Singer
"My experience is that as soon as people are old enough to know better, they don't know anything at all." Oscar Wilde
"If a nation values anything more than freedom, it will lose its freedom; and the irony of it is that if it is comfort or money that it values more, it will lose that too." W.Somerset Maugham
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform