Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
CursorSource in DataEnvireonment
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Divers
Thread ID:
00252319
Message ID:
00252571
Vues:
8
Hi Bruce.

>In my application the database opened could be in one of many company subdirectories, so the path cannot be specfied ahead of time.

Here's what I do:

- Set the AutoOpenTables of the DataEnvironment to .F. so it doesn't automatically open the tables.

- Put the following code into the Load method of my form base class:
with This
  do case
    case type('.DataEnvironment') <> 'O' or ;
      .DataEnvironment.AutoOpenTables
    case type('oApp.Name') = 'C' and ;
      pemstatus(oApp, 'SetDataDirectory', 5)
      oApp.SetDataDirectory(.DataEnvironment)
      .DataEnvironment.OpenTables()
    otherwise
      .DataEnvironment.OpenTables()
  endcase
endwith
- My application object (instantiated into oApp) has the following code in its SetDataDirectory method:
lparameters toDE
local laObjects[1], ;
  lnObjects, ;
  lcDirectory, ;
  lcCommon, ;
  lnI, ;
  loObject, ;
  lcDatabase, ;
  lcTable

* Get a list of the members of the DataEnvironment, and get
* the data directory from the cDataDir property.

lnObjects   = amembers(laObjects, toDE, 2)
lcDirectory = This.cDataDir

* Look at each member object, but only process cursors.

for lnI = 1 to lnObjects
  loObject = evaluate('toDE.' + laObjects[lnI])
  if upper(loObject.BaseClass) = 'CURSOR'
    lcDatabase = loObject.Database

* If this is a free table, adjust the CursorSource property.

    if empty(lcDatabase)
      lcTable = loObject.CursorSource
      loObject.CursorSource = lcDirectory + ;
        substr(lcTable, rat('\', lcTable) + 1)

* This cursor is part of a database, so change the database property.

    else
      loObject.Database = lcDirectory + ;
        substr(lcDatabase, rat('\', lcDatabase) + 1)
    endif empty(lcDatabase)
  endif upper(loObject.BaseClass) = 'CURSOR'
next lnI
- oApp also has a property, cDataDir, which contains the directory for the current data set.

Of course, you can adapt this to your own needs: SetDataDirectory can exist in some other object or even be a standalone PRG.

Doug
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform