Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
How to close all tables opened in a routine?
Message
 
 
À
13/04/2008 11:10:59
Mike Yearwood
Toronto, Ontario, Canada
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Versions des environnements
Visual FoxPro:
VFP 9 SP1
Divers
Thread ID:
01310216
Message ID:
01310316
Vues:
20
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform