Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to close all tables opened in a routine?
Message
From
13/04/2008 11:33:07
 
 
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:
01310245
Views:
16
As long as you don't need any of the tables or cursors in the current data session.

>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.
Jim Nelson
Newbury Park, CA
Previous
Reply
Map
View

Click here to load this message in the networking platform