How to Assign Database Location Generically in Data Env

Last reviewed: January 2, 1998
Article ID: Q128996
3.00 5.00 WINDOWS

The information in this article applies to:

  • Microsoft Visual FoxPro for Windows, versions 3.0, 5.0

SUMMARY

The Data Environment contains information about all the tables, views, and relationships that interact with a form. In the Form Designer, when a table is added to the data environment, the database property of a cursor is updated with the location and name of the DataBase container (.DBC), and the path written in the DataBase property is set by default as an absolute path.

If the database cannot be found when the form is opened, the error "Error instantiating cursor object. Cannot find ..<database>" is displayed.

The sample code provided in this article modifies the path information written in the Database property to fit your needs.

MORE INFORMATION

When a table is added to the Data Environment in the Form Designer, a cursor object is created. If the table belongs to a DBC, the DataBase property of the cursor is updated with the full path name to the DBC. However, the absolute path to a DBC might need to be modified in a distributed application. For example, multiple users can open databases with the same name that are placed in different locations.

If you need to reference a different database than the one specified in the Database property of the Cursor object, you can use the SET PATH command, before the program calls the form, to set a path to the location of the database. If the database specified in the DATABASE property of the Cursor cannot be found, Visual FoxPro will search along the path.

Another alternative is to update the DATABASE property at runtime. The following example adds flexibility to your code by updating the path information in the Database property of the cursor object. This code can update the location of different databases referenced in the Data Environment. As this sample only references one directory, you will need to modify it if you need to open databases in several directories.

To use this example:

  1. Create two variables that will be available to the form - Data_Drive. This variable contains the drive letter and a colon.

           Data_Drive = "C:"
    

    - Data_Path. This variable contains the relative path with a backslash

         as the last character.
    

           Data_Path = "\VFP\SAMPLES\DATA\"
    

  2. Place the following code in the BeforeOpenTables Event of the DataEnvironment. The WAIT WINDOW commands are for illustrating purposes, and you can remove them.

          IF !EMPTY(DATA_PATH) and !EMPTY(DATA_DRIVE)
    
            * Make a list of all the cursors in the Data Environment
             =AMEMBERS(A_Cursors,THISFORM.dataenvironment,1)
             =ASORT(A_Cursors, 2)
             nStartpos=ASUBSCRIPT(A_Cursors, ASCAN(A_Cursors, "Object"),1)
             FOR I = nstartpos TO ALEN(A_cursors,1)
               IF A_Cursors(i,2) = "Object"
                cObjClass = "THISFORM.DATAENVIRONMENT."+a_cursors(i,1)+".class"
                  IF EVAL(cObjClass)="Cursor"
                   cObjName="THISFORM.DATAENVIRONMENT." ;
                        + A_Cursors(i,1)+".DATABASE"
                   WAIT WINDOW cObjName
                   Data_Name=EVAL(cObjName)
                   WAIT WINDOW "This is Data_Name : "+ Data_Name
                   * Modify the path to the database
                   NewDataPath=ALLTRIM(data_drive)+ ALLTRIM(data_path) ;
                        + ALLTRIM(SUBSTR(Data_Name, RAT("\",Data_Name)+1))
                   WAIT WINDOW newdatapath
                   * Evaluate the cursor object
                   oRef = EVAL( "THISFORM.DATAENVIRONMENT."+a_cursors(i,1) )
                   *Modify the Database property with the new path
                   oRef.Database = newdatapath
    
                  ENDIF
                  ELSE
                   EXIT
               ENDIF
             ENDFOR
          ENDIF
    


Additional reference words: 5.00 3.00 VFoxWin
KBCategory: kbprg
KBSubcategory: FxprgGeneral
Keywords : FxprgGeneral kbprg
Version : 3.00 5.00
Platform : WINDOWS


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.

Last reviewed: January 2, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.