Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Processing loop runs out of memory or handles or somethi
Message
From
07/10/2013 02:26:57
 
 
To
06/10/2013 23:01:02
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01584860
Message ID:
01584870
Views:
72
This message has been marked as a message which has helped to the initial question of the thread.
>I am processing 105 tables in a loop to create pipe separated text files to bulk insert to SQL
>
>Win 7 64 , 8gb ram. I make sure i boot clean and I'm seeing over 4gb available RAM. 30+ gb free on drive with VFP. Data files being processed are on another drive on the same box. Results going into directory on same drive as VFP.
>
>Below is the code. running the project in dev I crash with "there is not enough memory to complete this operation" though it seems to complete the operation as the tablesql has all the records and all the textfiles get created.
>
>I assume I am running out of file handles but I see available RAM going down to about 1.1 gb.
>
>Each trip through the outer loop) representing 1 table is independant so is there some way to release memory or file handles used by the processing in the loop before going on to the next one?
>
>Suggestions appreciated.
>
In addition to Hilmar's suggestion to close the table and the cursor (lcalias/lcname ) before ENDIF/ENDFOR && tablescan

Either or both of
(1) Reduce the foreground and background buffer size - sys(3050, ...). Set them to 256 Mb
(2) =sys(1104) before ENDIF/ENDFOR && tablescan (after closing the table and the cursor)

ps:
No need to test IIF(N < lnflds,',','')+lf
Always add , and lf

You can drop the last ones just after ENDFOR && field scan

pps:

Add an OTHERWISE with error condition to the CASE fieldscan. You're not testing all field types

>
>
>USE tablesql IN 0 EXCLUSIVE
>SELECT tablesql
>DELETE ALL
>PACK
>PACK memo
>
>lcexppath = 'c:\users\public\sql\'
>
>lcpath=ADDBS(THIS.oparentbizobj.getfield("cpath_to_vfp"))+"convert"
>SET DEFAULT TO (lcpath)
>
>lcsql = "SELECT  "
>
>lcdbc="inmatetrustfund.dbc"
>
>* ITERATE TABLES
>
>OPEN DATABASE (lcdbc) EXCLUSIVE
>
>ntables= ADBOBJECTS(latables,"TABLE")
>
>FOR i=1 TO ALEN(latables,1)
>
>	lcdbf=latables(i)
>	lcalias=JUSTSTEM(lcdbf)
>	
>	SELECT tablesql
>	APPEND BLANK
>	REPLACE tablename WITH lcalias
>
>	WAIT WINDOW lcalias NOWAIT
>	
>	IF UPPER(lcalias) <> "SYSSETUP"
>		USE (lcdbf) IN 0 EXCLU
>
>		SELECT (lcalias)
>
>		=AFIELDS(laflds)
>		lnflds = ALEN(laflds,1)
>		mcnt = 1
>
>*   SCAN FIELDS
>
>		FOR N=1 TO lnflds
>
>			lcfld=ALLTRIM(laflds(N,1))
>			lctype=laflds(N,2)
>			lnsize=laflds(N,3)
>			llnct=laflds(N,6)
>
>			WAIT WINDOW lcalias + SPACE(10)+lcfld NOWAIT
>
>			SELECT (lcalias)
>
>			DO CASE
>
>			CASE INLIST(lctype,"D","T")
>				
>				lcsql = lcsql + " NVL(TTOC("+lcfld+",3),[1800-01-01])" + IIF(N < lnflds,',','')+lf
>
>			CASE (lctype="C" )
>
>				 lcsql = lcsql + " "+lcfld+ IIF(N < lnflds,',','')+ lf
>
>		 	CASE INLIST(lctype,'I','N','Y')
>
>			       lcsql = lcsql + " "+lcfld+IIF(N < lnflds,',','')+lf
>
>			 CASE (lctype = "L")
>
>				lcsql = lcsql + " IIF("+lcfld+"=.t.,1,0) "+IIF(N < lnflds,',','')+lf
>
>			CASE (lctype = "M")
>
>				 lcsql = lcsql + " IIF(LEN(ALLTRIM("+lcfld+")) < 220, STRTRAN("+lcfld+",CHR(13)+CHR(10),'@@'),'MCOL+"+ALLTRIM(STR(mcnt))+"') "+ IIF(N < lnflds,',','')+lf
>
>				  mcnt = mcnt+1
>
>			ENDCASE
>
>		ENDFOR  && field scan
>
>		lcsql = lcsql + " FROM "+ lcalias + " INTO CURSOR C_"+lcalias
>
>		&lcsql
>
>		lcname = "C_"+lcalias
>
>		 SELECT (lcname)
>
>		lcexpstr = [ COPY TO ']+lcexppath+lcname+[' DELIMITED WITH "" WITH CHARACTER '|' ]
>
>		 &lcexpstr
>
>		 SELECT tablesql
>		 LOCATE FOR ALLTRIM(tablename) = lcalias
>		 REPLACE mSQL WITH lcsql
>
>		lcsql = "SELECT " +lf
>
>	ENDIF
>
>ENDFOR && tablescan
>
>CLOSE DATABASE && inmatetrustfund
>
>**********************************************************************************************************************
>
>SET DEFAULT TO (lcdefa)
>
>RETURN
>
>
Gregory
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform