Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Select statement leaves table in use.
Message
De
25/01/2009 08:33:07
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
01376809
Message ID:
01376830
Vues:
13
>>Is there a way from keeping a SQL Select statement from leaving the tables open that is pulls from?
>>
>>I'm annoyed that if the tables are not already opem, it will open them (which is fine), but it leaves the tables open (i.e. USED).
>>
>>I wish it would close them back. Right now, I am doing a USE IN statement on about 4 tables to close them due to having been opended by a SQL Select statement.
>
>Check Class to close any cursors created after it was instantiated FAQ #31943
>
>So, you would instantiate this class before the select, then release it.

This suggestion is the same as I was about to give.

But, two thing should be included.
1) Be sure to remove thea reference to the resulting cursor from the second AUSED array before closing the tables/cursors.
2) The array created by AUSED is order in the order from how they are opened. To prevent any dependencies, close them in reverse order.

See revised code.
Define Class CloseTemp As Custom
	Dimension a1[1]
	nFiles=0

	Procedure Init
		This.nFiles=Aused(atemp)
		If This.nFiles>0
			Acopy(atemp, This.a1)
		Else
			This.a1=""
		Endif

	Procedure Destroy
		For i=Aused(aNow) to 1 Step -1                                  && close in reverse order they were opened.
                        do case
                        case upper(aNow[i,1]) == upper(Alias())               && skip if resulting cursor
                        case Ascan(This.a1, aNow[i,1],-1,-1,1,2+4)=0
				Use In aNow[i,1]
			Endcase 
		Endfor
Enddefine
Here is a sample code as I see what Matt is attempting.
*-- create snapshot of currently open tables.
local loOpen
loOpen = CreateObject("CloseTemp")
*-- perform query
Select * from file1 join file2 on ... into cursor temp
*-- close all files open during the query, but the current cursor.
release loOpen
Greg Reichert
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform