Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Conditional scan, using if
Message
De
17/02/2014 13:20:54
Mike Yearwood
Toronto, Ontario, Canada
 
 
À
17/02/2014 13:07:00
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01594372
Message ID:
01594503
Vues:
44
>>>And here's another thought..., Depending on when macro expansion takes place, a macro may or may not give better performance. If the macro expansion takes place when the SCAN statement is initially encountered, then we might see an improvement in speed. If the macro expansion takes place at every loop iteration then you'll see a significant degradation in speed.
>>>
>>>
select mytable
>>>cCond = "iif(empty(variable1), field2 = variable2, field1 = variable1)"
>>>scan for &cCond.
>>>    * Code here
>>>endscan
.
>>
>>Macro expansion occurs only at beginning of scan. The IIF inside the condition would still be executing per row. The following moves the IIF out of the scan.
>>
>>if empty(variable1)
>> lccond = "field2 = variable2"
>>else
>> lccond = "field1 = variable1"
>>endif
>>scan for &lccond.
>>...
>>
>>or
>>lcNum=iif(empty(variable1),"2","1")
>>lcCond = "field" + m.lcNum + " = variable" + m.lcNum
>>scan for &lcCond
>
>fully correct on preferring macro expansion to iif() if encountered in SQL or xBase-table-scope identifier "FOR".
>Your solution has the added benefit of being Rushmore optimized if indices exist on field1 or field2.

Yes. That too is true. Thanks
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform