Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to make this code faster
Message
From
02/05/2013 14:11:06
 
 
To
02/05/2013 13:50:07
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows 7
Network:
Windows XP
Database:
Visual FoxPro
Application:
Desktop
Miscellaneous
Thread ID:
01572484
Message ID:
01572529
Views:
38
had thought about scan while, but guessed takano is integer from naming.
as long as there is only (0 and positive) OR only (0 and negative) numbers, setting the rec pointer first and then scan while will be faster.
But that should be checked in code always to be safe, resulting in more fallback code ;-)

As the OP is willing, but inexpirienced, such elaborate hints could work for now, but lead to bad awakenings weeks later, so better KISS and eliminate as much code as possible for clarity ;-)


>Actually, this would be faster (provided takano is not updated inside the scan)
>
>
>SET ORDER TO Takano
>SEEK SPACE(1)
>SCAN WHILE EMPTY(takano)
>  * update code here
>ENDSCAN
>
>
>>>
>>*- updtakastk.prg
>>****
>>Local lcmasterid, lnavgrec1, lnavgrec2, lnavgrec3, lnpackno, lntakano, lntotrec, lntrnno
>>USEFILE('cuttm')
>>USEFILE('cuttct')
>>USEFILE('packtc')
>>lntakano = 0
>>Select cuttm
>>Set Order To takano
>>Select cuttct
>>Set Order To takano 
>>Select packtm
>>Set Order To MASTERID
>>Select packtc
>>Set Order To takano
>>Select cuttct
>>
>>Wait Window 'Working... Please Wait...' At Srows() / 2, Scols() / 2  Nowait
>>
>>Select cuttct
>>Scan for not empty(takano)  && might build a binary index on empty(takano) depending on data size and distribution
>>
>>   lntakano = takano
>>   &&If Not Empty(m.lntakano)
>>      **    Below code taking Maximum time in Coverage result
>>      && Replace packed With ' ', packno With 0, recuttno With 0 In cuttct
>>      If Seek(m.lntakano, 'packtc', 'takano')
>>         &&lcmasterid	= packtc.MASTERID
>>         lnpackno	= Iif(Seek(packtc.MASTERID, 'packtm', 'masterid'), packtm.packno, 0)
>>         **    Below code taking Maximum time in Coverage result
>>         Replace packed With Iif(m.lnpackno <> 0, 'Y', ' '), packno With m.lnpackno, recuttno with 0 && In cuttct
>>      Else
>>         && on first glance always overwritten ??? 
>>         && lntrnno =	Iif(Seek(m.lntakano, 'cuttm', 'takano'), cuttm.trnno, 0)
>>         && Replace packed With Iif(m.lntrnno <> 0, 'Y', ' '), recuttno With m.lntrnno In cuttct
>>
>>         lntrnno =	Iif(Seek(m.lntakano, 'cuttm', 'takano1'), cuttm.trnno, 0)
>>         Replace packed With Iif(m.lntrnno <> 0, 'Y', ' '), recuttno With m.lntrnno, packno with 0 && In cuttct
>>      Endif
>>   &&Endif
>>Endscan
>>Wait Clear
>>
>>
>>setting up relations in advance might not much/more help in this case, as only 1 seek is needed fo each record.
>>do NOT use brute force to clean a record first. unrolling the 2 iif into separate branches of replace might be still better
>>if you can be ****certain**** that cuttm/packno are always #0- test.
Previous
Reply
Map
View

Click here to load this message in the networking platform