KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q162076: HOWTO: Converting VFP Files from Version 3.0 to 5.0 and Back

Article: Q162076
Product(s): Microsoft FoxPro
Version(s): 3.00 3.00b 5.00
Operating System(s): 
Keyword(s): kb3rdparty kbdisplay kbprogramming kbtool kbvfp
Last Modified: 09-AUG-1999

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual FoxPro for Windows, versions 3.0, 3.0b, 5.0 
-------------------------------------------------------------------------------

SUMMARY
=======

Running or modifying Visual FoxPro 3.0 forms, class libraries, database
containers, report/label files, programs, or menu files in Visual FoxPro 5.0
causes any program code to be recompiled under Visual FoxPro 5.0. This may
render some of these items no longer able to be run or modified under Visual
FoxPro 3.0. Attempting to run or modify forms, classes, database containers, or
report/label files in Visual FoxPro 3.0 after they have been recompiled under
Visual FoxPro 5.0 yields an error similar to the following:

  Error loading file - Methods - record number <n>. Object file <drive
  and directory>\<filename> was compiled in a previous version of
  FoxPro.

  -or-

  Object file <drive and directory>\<filename> was compiled in a
  previous version of FoxPro.

You can take steps to allow the running or modifying of files containing Visual
FoxPro 5.0-compiled code under Visual FoxPro 3.0. This article explains the
basics of conversion, and the steps you can take to "go back," if desired.

MORE INFORMATION
================

Converting with a Project
-------------------------

1. Opening a Visual FoxPro 3.0 project in Visual FoxPro 5.0 invokes the
  Converter and converts the project. Because the structure of the project file
  itself is different in Visual FoxPro 5.0, the project file cannot be reopened
  in Visual FoxPro 3.0 after conversion. It is highly recommended to accept the
  "Backup files" option to allow the Converter to create backup files for all
  converted files--the "Backup files" check box in the Converter dialog box is
  selected by default. Unless you specify a different directory, these backup
  files, including the project's .pjx and .pjt files, are placed in a
  subdirectory of the project's home directory called \Old.

2. It is important to note that some default property values have changed from
  Visual FoxPro 3.0 to Visual FoxPro 5.0. These include the FontBold and
  FontSize properties of the Label control, for example. These changes were
  made for compatibility with Windows interface standards. Upon conversion,
  these properties continue to have default values, but these default values
  are different under Visual FoxPro 5.0.

  If you wish to retain the Visual FoxPro 3.0 defaults for these properties, you
  must do the following:

  a. Forms or class libraries containing these controls must be converted by
     converting a project that contains them.

  b. The "Retain Visual FoxPro 3.0 default property values" check box must be
     selected in the Converter dialog box.

3. Upon conversion, any Visual FoxPro 3.0 .dbc, .vcx, .scx, .frx, or .lbx files
  (database containers, class libraries, forms, reports, and labels,
  respectively) within the project that contains procedure or method code are
  automatically recompiled. If .dbc files contain no stored procedures, or
  .vcx, .scx, .frx, or .lbx files contain no method code, recompiling is
  unnecessary and does not occur.

4. Upon conversion, all .prg and .mpr files (programs and menu programs) are
  automatically recompiled.

Converting Individual Components (.vcx, .scx, .dbc, .frx, or .lbx Files)
------------------------------------------------------------------------

1. If a Visual FoxPro 3.0 .dbc, .vcx, .scx, .frx, or .lbx file (database
  container, class library, form, report, or label, respectively) is opened,
  modified, or run in Visual FoxPro 5.0, the file is automatically recompiled
  under Visual FoxPro 5.0 if it contains any method or procedure code. No
  changes other than recompiling should occur. If a .dbc file contains no
  stored procedures, or if .vcx, .scx, .frx, or .lbx files contain no method
  code, recompiling is unnecessary and does not occur.

  The .dbc file is an exception under one specific circumstance: If the .dbc is
  first opened shared under Visual FoxPro 3.0, the compiled stored procedure
  code within the .dbc will not be overwritten if subsequently opened shared
  from Visual FoxPro 5.0. In this case, the stored procedures are compile and
  stored locally in a temp file on the 5.0 machine. Note that opening a .dbc
  shared within Visual FoxPro 5.0 that has not been opened in Visual FoxPro 3.0
  will still result in a recompile.

2. Menus need no conversion; the .mpx file is re-created transparently when the
  .mpr file is run. Program (.prg) files also behave like this--they are
  transparently recompiled and an .fxp file created for the appropriate Visual
  FoxPro version. If the .mpr or .prg does not exist, and the .mpx or .fxp is
  run, the following error occurs:

  Object file <path\filename> was compiled in a previous version of
  FoxPro

  For more information about the Converter, view the Visual FoxPro 5.0 Help
  File's Converter Help topic.

3. Individual files may be explicitly recompiled under Visual FoxPro 5.0
  (without opening, modifying, or running) by executing the following commands
  from within a program file or from the Command window:

  Programs:

        COMPILE <.prg or .mpr filename>

  Database containers:

        COMPILE DATABASE <Database container (.dbc) name>

  Forms:

        COMPILE FORM <form (.scx) name>

  Class Libraries (this command is new to Visual FoxPro 5.0):

        COMPILE CLASSLIB <Class library (.vcx) name>

  Reports or labels (these commands are new to Visual FoxPro 5.0):

        COMPILE REPORT <report (.frx) name>
        COMPILE LABEL <label (.lbx) name>

  For more information, view the Visual FoxPro 5.0 Help File for the above
  commands.

Going Back to Visual FoxPro 3.0 from Visual FoxPro 5.0
------------------------------------------------------

1. There is no conversion for Visual FoxPro 5.0 project files back to Visual
  FoxPro 3.0. However, the converter places, unless the Converter dialog box
  "Backup files" check box is unselected, a copy of the project files
  (.pjx/.pjt files, along with all other converted files) in a subdirectory of
  the project's home directory called \Old. Original, unconverted versions of
  all converted files may be found there.

2. Databases (.dbc files) containing stored procedure code may be recompiled
  back to Visual FoxPro 3.0 format by running the COMPILE DATABASE <database
  name> command within Visual FoxPro 3.0. Attempting to open or modify
  within Visual FoxPro 3.0 a .dbc file that was compiled in Visual FoxPro 5.0
  gives an error like the following:

  Object file <drive and directory>\<filename>.DBC was compiled in a
  previous version of FoxPro.

3. Forms (.scx files) containing method code may be recompiled back to

Visual FoxPro 3.0 format by running the COMPILE FORM <form name> command
within Visual FoxPro 3.0. Attempting to run or modify within Visual FoxPro 3.0
an .scx file, which was compiled in Visual FoxPro 5.0 gives an error such as the
following:

  Error loading file - Methods - record number 3. Object file <drive and
  directory>\<filename>.scx was compiled in a previous version of
  FoxPro.

4. Class libraries (.vcx files) containing method code may be recompiled back to
  Visual FoxPro 3.0 format by running the COMPILE FORM <classlib name
  including .vcx extension> command within Visual FoxPro 3.0. The COMPILE
  CLASSLIB command is not available in Visual FoxPro 3.0, so COMPILE FORM must
  be used, with the .vcx extension explicitly included with the file name.
  Attempting to instantiate or modify within Visual FoxPro 3.0 a class
  contained in a .vcx file that was compiled in Visual FoxPro 5.0 gives an
  error such as the following:

  Object file <drive and directory>\<filename>.vcx was compiled in a
  previous version of FoxPro.

5. Program and generated menu files (.prg and .mpr files) are automatically
  recompiled into their respective .fxp and .mpx files. If the .mpr or .prg
  does not exist, and the .mpx or .fxp is run, the following error occurs:

  Object file <path\filename> was compiled in a previous version of
  FoxPro

6. There is no COMPILE REPORT command under Visual FoxPro 3.0. Report and label
  files containing compiled code can be recompiled to Visual FoxPro 3.0 format
  with the following program. Copy the code below into a .prg file and run the
  .prg from the Command window, passing the report or label file to be
  converted as a parameter (see Usage and Example below in the comment section
  in the program header).

  ******************************************************************
  *                           CONVREPO.PRG
  *
  * Program to compile Visual FoxPro 5.0 .frx or .lbx file to run under
  * Visual FoxPro 3.
  * This is necessary only if the report or label contains code in
  * any of its DataEnvironment methods.
  *
  * Usage: DO CONVREPO WITH <.frx or .lbx file including extension>
  *
  * Example:  DO CONVREPO WITH "myreport.frx"
  *
  ******************************************************************

  LPARAMETER lcFrxName
  LOCAL lcAlias, lcTmpFile
  IF (TYPE('lcFrxName') = "C" AND UPPER('frx')$UPPER(lcFrxName)) OR ;
        (TYPE('lcFrxName') = "C" AND UPPER('lbx')$UPPER(lcFrxName))

     IF NOT FILE(lcFrxName)
        =MESSAGEBOX('The file '+ UPPER(lcFrxName) + ' does not ' + ;
           'exist in the default directory. '+ CHR(13)+ ;
           'Please pass a valid report '+ ;
           'or label filename, including extension, to this program!' ;
           ,48, "Report/Label Code Compiler")
        RETURN
     ENDIF

     USE (lcFrxName)
     lcAlias = ALIAS()
     * Look for any Data Environment object's records
     SCAN FOR NAME='dataenvironment' ;
           OR NAME='cursor' ;
           OR NAME='relation'
        IF !EMPTY(TAG)                          && Is there any code?
           lcTmpFile = SYS(3)
           COPY MEMO TAG TO (lcTmpFile+'.PRG')  && Copy to temp .prg
           COMPILE (lcTmpFile)                  && Compile it
           APPEND MEMO tag2 ;
              FROM (lcTmpFile+".FXP") OVERWRITE && Write it back to .frx/.lbx
           ERASE (lcTmpFile+".PRG")             && Delete temp files
           ERASE (lcTmpFile+".FXP")
        ENDIF
     ENDSCAN
     USE IN (lcAlias)
     SET MESSAGE TO "Recompile completed"
     WAIT "" TIMEOUT 2
     SET MESSAGE TO
  ELSE
     =MESSAGEBOX('Please pass a report or label filename, '+ ;
        'including extension, to this program!' ,48, ;
        "Report/Label Code Compiler")
     RETURN
  ENDIF
  RETURN
  *
  * End of CONVREPO.PRG
  *
  **************************************************************

Attempting to run or modify within Visual FoxPro 3.0 a report or label file that
was compiled in Visual FoxPro 5.0 gives an error such as the following:

  Error loading file - Methods - record number 8. Object file <drive and
  directory>\<filename>.FRX was compiled in a previous version of
  FoxPro.

REFERENCES
==========

Visual FoxPro 5.0 Help

(c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Jim
Saunders, Microsoft Corporation


Additional query words: compatibility backward screens

======================================================================
Keywords          : kb3rdparty kbdisplay kbprogramming kbtool kbvfp 
Technology        : kbVFPsearch kbAudDeveloper kbVFP300 kbVFP300b kbVFP500
Version           : 3.00 3.00b 5.00
Issue type        : kbhowto

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.