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: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:
01310241
Views:
20
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.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform