Set database to mydatabase Close data Set database to myotherdatabase JH
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Charlie Coleman Sent: Tuesday, October 09, 2007 9:37 AM To: ProFox Email List Subject: Re: Erasing a temporary DBC At 12:46 PM 10/3/2007 +0100, Paul Newton wrote: ... >In my code I am creating a temporary DBC, and subsequently adding and >dropping tables. I am ensuring that none of the tables belonging to >Temp.DBC are open when I am through. Now I want to ERASE the Temp.DBC >(etc) files from disk and cannot do so because I cannot find a way to >close Temp.DBC > >Any suggestions ? > >Also how can I save (and restore) the current database setting (before >and after my code) Sorry this is a response (ong-winded) to an old question. I think the response may address another question someone else had regarding same-named DBC's. Anyway, the short of it is that you can uniquely reference a specific database by prefixing the path location. For example: cDB1 = "g:\production\important\financial.dbc" cDB2 = "c:\temp\blah\blah\financial.dbc" - Note that the name of the DB is "financial" - So you could do something like OPEN DATABASE (cDB1) OPEN DATABASE (cDB2) - At this point, the cDB2 is the 'active' DB - think of it as a sort of 'current work area' that we have with DBFs. If you open tables right now, you'd be opening them from the dbc that is located in c:\temp\blah\blah\ To close a specific database you "SET" (or OPEN) the DB and then issue a close DB. For example OPEN DATABASE (cDB1) OPEN DATABASE (cDB2) ... various code done here... SET DATABASE TO (cDB1) CLOSE DATABASE - At this point, the DB from g:\production\important\ will be closed. And any opened tables belonging to that DB will be closed as well. The DB in c:\temp\blah\blah\ is still open, and any tables opened from that database are still open. - By the way, it appears that the OPEN DATABASE command will work just as well regarding setting the "current" database. In fact, it may be safer to use - if you issue a SET DATABASE TO ... command to a database that is not open, you'll get an error (which you could trap in a TRY...CATCH..., etc, or you use a DBUSED() call, using the full path name before issuing the SET DATABASE command, etc.). Also, the ADATABASES() function comes in handy here. - So, to close down a temporary DBC, keep track of your it's location (and name of course) and then do the SET DATABASE (or OPEN DATABASE), and then follow it immediately with a CLOSE DATABASE command. Ah, now I remember. Someone was asking how to copy tables from 1 DATABASE to another DATABASE of the same name. Here is some code (not tested, and with no error trapping). Note, the code below will probably work as far base as VFP 6. But I'd recommend putting in TRY...CATCH... where appropriate and VFP 8 is where those were added. *-- General process: open source database, create target database, *-- step through tables in source DB and copy to target DB, preserving *-- table indexes, etc m.cSourceDB = "x:\proddata\systemA\famis.dbc" m.cTargetDB = "c:\temp\famis.dbc" m.cTargetPath = ADDBS(JUSTPATH(cTargetDB)) CREATE DATABASE (m.cTargetDB) OPEN DATABASE (m.cSourceDB) *-- Note: the cSourceDB was just opened, so "USE"ing tables will come from there m.nTbls = ADBOBJECTS(_aTbls, "TABLE") FOR m.nCount = 1 TO m.nTbls m.cTblName = _aTbls[m.nCount] USE (m.cTblName) IN 0 ALIAS WORKING SELECT WORKING COPY TO (m.cTargetPath + m.cTblName) ; DATABASE (m.cTargetDB) ; NAME (m.cTblName) WITH CDX USE IN WORKING ENDFOR OPEN DATABASE (m.cTargetDB) CLOSE DATABASE OPEN DATABASE (m.cSourceDB) Note that the above doesn't copy stored procedures, triggers, etc. That is also possible (by opening the DBC as a table and copying the correct records over), but I won't go into that at this point. Also, the above assumes the filename of the tables are the same as the table names stored in the DB. If that is not desired, then you'd have to use the "DBF()" command and add a few more lines of code. Also, some of my conventions may not really be needed. I generally always do a USE .... IN 0 so as to not step on any currently open tables. But if you use private datasessions, then you probably won't need that clause and the subsequent "SELECT WORKING" command. Note that during the copy process you can filter out whatever records/tables you would not want to go into the new DB (various clauses of the COPY TO... and checking table names as they're being stepped through). I've done this quite often for cases where 'publicly available' data was to be a subset of data actually available. HTH -Charlie [excessive quoting removed by server] _______________________________________________ Post Messages to: [email protected] Subscription Maintenance: http://leafe.com/mailman/listinfo/profox OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech Searchable Archive: http://leafe.com/archives/search/profox This message: http://leafe.com/archives/byMID/profox/[EMAIL PROTECTED]@shelbynet.com ** All postings, unless explicitly stated otherwise, are the opinions of the author, and do not constitute legal or medical advice. This statement is added to the messages for those lawyers who are too stupid to see the obvious.

