Microsoft KB Archive/191172

= FIX: Decrease in performance occurs with repeated execution of SELECT-SQL in Visual FoxPro for Windows 5.0 and in Visual FoxPro for Windows 6.0 =

Article ID: 191172

Article Last Modified on 3/10/2005

-

APPLIES TO


 * Microsoft Visual FoxPro 5.0 Standard Edition
 * Microsoft Visual FoxPro 5.0a
 * Microsoft Visual FoxPro 6.0 Professional Edition

-



This article was previously published under Q191172



SYMPTOMS
There is a slow degradation of Visual FoxPro's performance with repeated execution of SELECT-SQL statements. The results returned by SYS(1016) and the time required to process SELECT-SQL statements gradually increase with repeated execution of SELECT-SQL statements.



CAUSE
This is caused by repeated execution of a SELECT-SQL statement containing WHERE and OR clauses, as in the following example: SELECT * ; FROM  ; WHERE .T. ; OR .T. ; INTO CURSOR TEST



RESOLUTION
Here are three ways to workaround this problem:   Use the HAVING clause in the SELECT-SQL statement rather than the WHERE clause. For example: SELECT DISTINCT * ; FROM ; HAVING ; OR ; OR ; ORDER BY ; INTO CURSOR   Use the INLIST function in the SELECT-SQL statement, in place of the OR. For example: SELECT DISTINCT * ; FROM ; WHERE INLIST(eExpression,, ; , ;  , ;  ORDER BY ;  INTO CURSOR ;                      Use a UNION for each OR condition. For example:  SELECT DISTINCT * ;  FROM ;  WHERE ;  UNION SELECT DISTINCT * ;  FROM ;  WHERE ;  UNION SELECT DISTINCT * ;  FROM ;  WHERE ;  INTO CURSOR                     



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

This bug was corrected in Visual Studio 6.0 Service Pack 3.

For more information about Visual Studio service packs, please see the following articles in the Microsoft Knowledge Base:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed



MORE INFORMATION
The amount by which the result returned by SYS(1016) increases is dependent on the version of Visual FoxPro and the number of ORs contained in the SELECT-SQL statement. With Visual FoxPro 5.0, the amount of increase in the result returned by SYS(1016) is 16 times the number of ORs contained in the SELECT-SQL statement. In Visual FoxPro 6.0, the amount of increase in the result returned by SYS(1016) is 24 times the number of ORs contained in the SELECT-SQL statement. This behavior does not occur with Visual FoxPro 3.0.

Steps to Reproduce Behavior
  Create a program named Test.prg using the following code: CLOSE ALL CLEAR ALL OPEN DATABASE "c:\program files\devstudio\vfp\samples\data\testdata" startval=VAL(SYS(1016)) FOR i=1 TO 10 SELECT * FROM customer WHERE .T. OR .T. INTO CURSOR test endval=VAL(SYS(1016)) ? ALLTRIM(STR(endval)) + ; " - " + ALLTRIM(STR(startval)) + ; " = " + ALLTRIM(STR(endval-startval)) startval=endval NEXT </li>  From the Command prompt, type the following: DO TEST </li> Observe that the startval and endval increase and that the difference between endval and startval is 16 in Visual FoxPro 5.0 and 24 in Visual FoxPro 6.0.</li></ol>

Keywords: kbbug kbfix kbsqlprog kbdatabase kbvs600sp3fix KB191172

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.