Microsoft KB Archive/185865

= FIX: Printing reports in a loop hangs Visual FoxPro =

Article ID: 185865

Article Last Modified on 2/11/2005

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition
 * Microsoft Visual FoxPro 3.0b Standard Edition
 * 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 Q185865



SYMPTOMS
Printing reports in loops generates an "Internal Consistency" error under Windows 95 and hangs Visual FoxPro under Windows NT 4.0.



CAUSE
This activity causes massive amounts of spooling, which causes a low memory situation because of continuous virtual memory swapping.



RESOLUTION
Create an out-of-process Visual FoxPro OLE server to handle the printing and release the object when the printing is completed. This workaround is available only in versions of Visual FoxPro later than 3.0x.

An example is shown below.

Create an OLE server named "TestPrint" by creating a project, adding the following code to a program file, and compiling the project to an EXE file:

DEFINE CLASS PrintIt AS CUSTOM OLEPUBLIC

WhichData='' WhichReport=''

PROCEDURE PRINTOUT Use (This.WhichData) REPORT FORM (This.WhichReport) to Print Use ENDPROC

ENDDEFINE

In your application, replace the REPORT FORM command with the following lines of code:

Ox=CreateObject("TestPrint.PrintIt") Ox.WhichData ="" Ox.WhichReport="" Ox.PRINTOUT Release OX



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.



MORE INFORMATION
WARNING: Close all running applications and save your data before following this procedure. Note that following these steps may produce lost allocation units, lost clusters, or cross-linked files.

Steps to Reproduce Behavior
 Create a table named Test and insert some records.

CREATE TABLE Test (ID c(4), NAME c(20)) INSERT INTO Test VALUES ("AAA","111") INSERT INTO Test VALUES ("BBB","222") INSERT INTO Test VALUES ("CCC","333")

 Create a Quick Report based on table Test and name the report Test.frx. Place the following code in a program and run the code:

SET SAFETY OFF FOR i=1 TO 5000 ?? i        REPORT FORM Test TO FILE Test.txt ASCII NEXT



The system hangs or crashes after a certain number of iterations.

Additional query words: kbDSE VFP600REL

Keywords: kbbug kbfix kbprint KB185865

-

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

© Microsoft Corporation. All rights reserved.