Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Any way to speed it up?
Message
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Any way to speed it up?
Environment versions
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01084765
Message ID:
01084765
Views:
55
Hi everybody,

I'm running the following code on 15K cursor and it's taking forever. Do you see ways to improve it?
local loErr, lcBatch_Process_fk, lcUsGrLink_fk, ;
	lcNewStatusCode, lcDept, lnNumber_of_Days, ;
	ltTimeToReschedule, lcTrans_pk, lcTrans_Employees_Queues_pk, lcUser, ;
	lcAction, lcSubAction, lcDetail, lcOldCode, lcUsGrLink

=aused(this.arrOriginallyUsed)

with this
	try
		.CreateLogfile()
** We want to have a clear log of everything
		.WriteToLogFile(chr(13) + chr(10) + replicate("*",75) + chr(13) + chr(10), .t.)
		.WriteToLogFile("Started to run " + this.cSearchType + " Name Search process")

		.OpenSearchTables() && Opens related tables with buffering
		
		lcBatch_Processes_Fk = Get_Batch_Processes_Fk_By_Process_Name('POLICY NUMBER CHECK ')
		lcNewStatusCode = "NSR" && Hard Coded

		if vartype(m.goApp) = "O"
			lcUsGrLink_fk = m.goApp.cUsGrLink
			lcDept = m.goApp.cDept
			.nNumber_of_Days = m.goApp.oSystemParametersRecord.iNum_Days_NS_check
			.nNum_days_ns_Dos = m.goApp.oSystemParametersRecord.iNum_days_ns_dos
			lcUser = m.goApp.cUserID
			lcUsGrLink = m.goApp.cUsGrLink
		else
			lcUsGrLink_fk = Get_System_USGRLink() && This code may produce an error
			lcDept = "O"
			.nNumber_of_Days = 5
			.nNum_days_ns_Dos = 716
			lcUser = GetUserID()
			lcUsGrLink = Get_System_USGRLink()
		endif

		=Get_description_from_Viscodes("STATUS","", m.lcDept, ;
			"cTempInfo",.f., 1, 'cCode_Value = "' + m.lcNewStatusCode + '"')
		lcNewStatusCode = cTempInfo.cVisCodes_pk

		use in select('cTempInfo')

		.SetDateToReschedule(.nNumber_of_Days)
		ltTimeToReschedule = dtot(.dRescheduleDate) + 9 * 3600 && 9am

		select curProcess
		scan for empty(.cError) and not .lStopProcess
			if .CheckRules()
				insert into Scheduled_Processes ;
					(cPROCESS_NAME_FK, cTrans_fk, cUsGrLink_fk, iBatch_Number, ;
					cClient_Code, cDepartment_Code, cProduct_Line_Code, ;
					tDate_Process_Scheduled, iStatus_Flag) ;
					values ;
					(m.lcBatch_Processes_Fk, curProcess.cTrans_pk, m.lcUsGrLink_fk, 0, ;
					curProcess.cClient_Code, curProcess.cDepartment_Code, curProcess.cProduct_Line_Code, ;
					datetime(), 1)
				lcTrans_pk = curProcess.cTrans_pk
				lcTrans_Employees_Queues_pk = curProcess.cTrans_Employees_Queues_pk

				update trans set cStatus_Codes_fk = m.lcNewStatusCode, ;
					tStatus_Date = datetime(), ;
					cLast_Updated_User = m.lcUser, ;
					tLast_Updated_Date = datetime() ;
					where cTrans_pk = m.lcTrans_pk

				update Trans_Status_Codes set ;
					cLast_Updated_User = m.lcUser, ;
					tLast_Updated_Date = datetime(), ;
					iActive_flag = 0 ;
					where cTrans_fk = m.lcTrans_pk

				if _tally = 0 && There were status records already
					lcAction = "AD"
					lcSubAction = ""
					lcDetail = "STATUS WAS ADDED ON " + ;
						transform(datetime()) + " BY " + m.lcUser
				else
					lcAction = "CH" && change
					lcSubAction = "FR"
					if seek(curProcess.cStatus_Codes_fk, "VisCodes", "cViscod_pk")
						lcOldCode = VisCodes.cCode_Description
					else
						lcOldCode = "OLD CODE"
					endif
					lcDetail = "STATUS WAS CHANGED FROM " + m.lcOldCode + ;
						" ON " + transform(datetime()) + " BY " + m.lcUser
				endif

				insert into Trans_Status_Codes ;
					(cTrans_fk, cStatus_Codes_fk, cUsGrLink_fk, tAS_OF_DATE, iActive_flag) ;
					values ;
					(m.lcTrans_pk, curProcess.cStatus_Codes_fk, m.lcUsGrLink, datetime(), 1)

				insert into Trans_Events ;
					(cTrans_fk, cFUNCTION_CODE, cACTION_CODE, cSUBACTION_CODE, cDETAIL_INFO) ;
					values ;
					(m.lcTrans_pk, "ST", m.lcAction, m.lcSubAction, m.lcDetail)

				update Employee_Queue_Schedules set iActive_flag = 0 ;
					where cTrans_Employees_Queues_fk = m.lcTrans_Employees_Queues_pk

				insert into Employee_Queue_Schedules (cTrans_Employees_Queues_fk, ;
					cDIARY_CODE_FK, ;
					tScheduled_Time, iActive_flag, ;
					iACTIVE_AT_DAY_START_FLAG, iSUPERVISOR_ASSIGNED_FLAG) ;
					values ;
					(m.lcTrans_Employees_Queues_pk, null, m.ltTimeToReschedule, 1, 1, 0)
			endif
		endscan

		if empty(.cError) and not .lStopProcess
			.CommitChanges()
		endif

		.WriteToLogFile("Finished to run " + this.cSearchType + " Name Search process" + chr(13) + chr(10))

	catch to loErr
		.CustomError(m.loErr)

	finally
		release loErr
		.CleanUp()
	endtry

endwith

return
If it's not broken, fix it until it is.


My Blog
Next
Reply
Map
View

Click here to load this message in the networking platform