Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to close all tables opened in a routine?
Message
 
 
To
14/04/2008 09:36:09
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:
01310486
Views:
17
I understand you. But in my case, I need the object that runs a query not to be in a private datasession, as it needs to "see" the cursors created in the calling object, and the other way around. I guess my design is not conducive to have the object that runs a query to be in a private datasession.

>
>I may not be understanding you.
>
>Use table1 in 0
>use table2 in 0
>
>loQuery = CreateObject('myquery')
>
>The myquery object opens whatever tables it wants in its private datasession without affecting your existing open tables. It runs a query and closes those tables. When you get back, the table1 and table2 should still be open. It can re-open table1 and table2 because since they were already open, VFP has no problem opening them with the AGAIN clause. They reopen faster since they're already 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