Wiki Home

Solutions To VFP 9 SP 2 Bugs

Namespace: VFP
This page was created so users may post their solutions / workarounds to VFP 9 SP2 Bugs

found here
VFP 9 SP2 Hotfix updated (includes VFP9T.DLL) on MSDN Code Gallery (2009/04/07)
VFP 9 SP2 Hotfix released on MSDN Code Gallery (2009/04/02)
Updated Codeplex location:

FIX: The group header of a data grouping is not printed at the top of a page as expected
Microsoft has released a hotfix to the most serious Report Designer bug in VFP 9 SP2. This is the Data Group bug Cathy Pountney first blogged about here: Gotcha: Serious report bug with Data Groups introduced in VFP 9 SP2.

hotfix file version: 23-Feb-2009

1. Changes to the code in FFC\_reportlistener.vcx breaks SP1 reports that use Doug Hennig's SP-1 hyperlink technique- Fix

Sergey Berezniker sent me this fix for the above bug. This is the code missing from the SP2 classes:

<!--------- Add this --------- -->
<xsl:when test="string-length(@href) &gt; 0">
  <A href="{@href}">
  <xsl:call-template name="replaceText"/>

<!-------------- Before this  ---------- -->
      <xsl:call-template name="replaceText"/>

-- Bernard Bout

2. Web Services Registration - If field returns NULL then error registering Web Service - _w3sutils.vcx _webservices.addfoxcode.

The bug occurs when you want to register a web service. It says that a field cannot accept a null. The table involved is foxws3.dbf. This does not happen with the same web service in either VFP8 or VFP9 Sp1 but does in SP2. I posted the fix for this on the UT which is here below:

a. Open the class HOME()+"ffc\_ws3utils.vcx" and select the _webservices class for editing
b. Open the method "addfoxcode"
c. Scroll down till you see this code:
lcServiceDoc = ""
THIS.cWSname = loService.Name
lcWSName = THIS.cWSname
lcServiceDoc = loService.Documentation  <<<--- this is the culprit

The above marked line sometimes returns a null and this is stored in lcServiceDoc, later on causing an error.

d. Change this offending line to:
lcServiceDoc = NVL(loService.Documentation,"")

-- Reported by Bernard Bout
3. Workaround for Data Group bug

try Cathy's solution [2007.12.04]
4. Groups in VFP Reports

try Bo Durban's workaround published on UT [2008.01.30] is a technique of addressing the issue programatically by using the Report Listener class. It needs more testing, but it seems to work on a few of my reports I tested. (I know it is not ideal, but I think it is better than staying on SP1)

DEFINE CLASS rlFixGroup AS ReportListener

Groups = NULL

FUNCTION BeforeReport()
  LOCAL loData AS Object
  LOCAL lnCnt
  ** Stuff all of our group bands into a collection
  This.Groups = CREATEOBJECT("Collection")
  SELECT frx
  lnCnt = 0
  SCAN FOR INLIST(objcode,3,5)  && GroupHeader, GroupFooter
    CASE objcode = 3   && GroupHeader
      lnCnt = lnCnt + 1
      loData = CREATEOBJECT("Empty")
      ADDPROPERTY(loData,"expr", frx.expr)
      ADDPROPERTY(loData,"currentvalue", "")
      ADDPROPERTY(loData,"applyfix", .F.)

    CASE objcode = 5   && GroupFooter
      ** For our footer band, just use the header band but add
      ** it to the collection again so we can reference it by its key
      FOR EACH loData IN This.Groups
        IF loData.groupno=lnCnt
          lnCnt = lnCnt - 1
  SET DATASESSION TO (This.CurrentDataSession)


FUNCTION BeforeBand(nBandObjCode, nFRXRecNo)
  IF INLIST(nBandObjCode,3,5)
    WITH This.Groups(ALLTRIM(STR(nFRXRecNo)))
    CASE nBandObjCode = 3   && GroupHeader
      ** First time through this grouping?
      ** Just add our expression value to the groups object

      IF EMPTY(.CurrentValue)
        .CurrentValue = EVALUATE(.expr)
      ** Is the group expr value different?
      ** If so, our BUG had occured:
      ** Skip back 1 record and set a flag
      IF .CurrentValue != EVALUATE(.expr)
        SKIP -1
        .ApplyFix = .T.
    CASE nBandObjCode = 5   && GroupFooter
      ** Reset the group expr value if our page footer occurs
      .CurrentValue = ""

FUNCTION AfterBand(nBandObjCode, nFRXRecNo)
  IF INLIST(nBandObjCode,3)   && GroupHeader
    WITH This.Groups(ALLTRIM(STR(nFRXRecNo)))
      ** Our BUG occured, set the record pointer back
      IF .ApplyFix
        SKIP 1
        .ApplyFix = .F.


5. FIX: The toolbar on an SDI form is disabled in Visual FoxPro 9.0 Service Pack 2
A supported hotfix is now available from Microsoft. However, it is intended to correct only the problem that is described in this article. Apply it only to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next Visual FoxPro 9.0 service pack that contains this hotfix. To resolve this problem immediately, contact Microsoft Customer Support Services to obtain the hotfix.

hotfix file version: 03-Mar-2008;EN-US;948528
6. FIX: Records from another user session that violate the criteria for a parent table are displayed in the browse window for a child table in a Visual FoxPro 9.0 Service Pack 2 multiuser environment

hotfix file version: 03-Jun-2008

7. Really fixed VFP9 SP2 helpfile:

Rick Schummer blogged about

Community managed Visual FoxPro 9 SP2 Help file corrected, supported, and enhanced. Creative Commons licensing.
8. Gap with multiple data groups on reports

A gap is printed when multiple data groups exist on a report and one is marked to reprint when the data group overflows to the next print.

Cathy Pountney developed neat workaround, please read her post here:
Windows Vista border issue and SP2
Official response: but this is not an SP2 issue - there's nothing we can do about this in our SP.

Response to "there's nothing we can do":
( Topic last updated: 2015.05.31 11:59:08 AM )