local laObjects[1], ; lnObjects, ; lcDirectory, ; lcCommon, ; lnI, ; loObject, ; lcDatabase, ; lcTable * Get a list of the members, and get the data directory * from the global gcDataDir variable. lnObjects = amembers(laObjects, This, 2) lcDirectory = gcDataDir * Look at each member object, but only process cursors. for lnI = 1 to lnObjects loObject = evaluate('This.' + 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 lnIThen, when the user selects the desired database, set a global variable called gcDataDir to the directory where the database exists (not including the database name). You can also do this by storing the directory in a property of a global object, such as an application object you may be using.