Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.
ADD TABLE
, REMOVE TABLE
These commands provide a programmatic way to control what tables are in a database. ADD TABLE
adds an existing table to the current database, while REMOVE TABLE
removes a table from the database, leaving it a FREE TABLE
.
ADD TABLE TableName | ?
[ NAME LongName ]
TableName is the filename of the table (DBF) to add to the current database. If you specify ? instead, the standard Open File dialog appears and you can choose a table to add. (Choosing a file other than a table leads to an error message.)
The table to add must not be open. Presumably, this is because the “backlink” to the DBC must be added to the table header, and this kind of change requires exclusive access. (See “DBC, DBF, FPT, CDX—Hike!” in Section 2 for more on this.)
Only Visual FoxPro tables can be added to a database. FoxPro 2.x tables aren’t eligible. If the specified table is not a Visual FoxPro table, you’re prompted to permit conversion. If you don’t allow it, the table isn’t added. Even SET SAFETY
OFF doesn’t dispense with this dialog, so be sure you’ve got Visual FoxPro tables if you’re adding to a database in an application. (You can open the files and test them with the SYS(2029).) The dialog that appears is sure to result in support calls otherwise.
The NAME clause lets you specify a “long name” for the table. This is a more readable and possibly longer than eight-character name by which the table can be referenced. You can even use names with embedded spaces if you want, but if you do so, you’ll have to surround the name with quotes every time you refer to it. We don’t recommend using embedded spaces.
The database must be open. There’s no way to automatically open it or to be prompted as part of this command. If more than one database is open, the table is added to the current database (either the last one opened or the one most recently chosen with SET DATABASE
, whichever comes later).
In VFP 7, the BeforeAddTable and AfterAddTable events of the database fire if Database Events
are turned on. BeforeAddTable fires after the Open File dialog (if you specified ?) but before the conversion dialog if you’re adding a FoxPro 2.x table.
OPEN DATABASE Test
ADD TABLE Test1
ADD TABLE ?
REMOVE TABLE TableName | ?
[ DELETE ] [ RECYCLE ]
TableName is the table to be removed from the database. If the table has a long name, you must use it in the REMOVE TABLE
command. The DBF name is not recognized. If the long name has embedded spaces, you need to surround it with quotes.
If you specify ? instead, you’re prompted with a list of tables in the database and can choose one to delete.
The specified table must not be open to remove it. Again, this is probably because the header must be changed. Once the table is removed, it’s a FREE TABLE
and can be added to another database (unless you add the DELETE clause, discussed below).
In versions prior to VFP 7, if SAFETY is ON, a warning dialog appears, reminding you that removing a table from its database loses all long names. Oddly, though, you’re not warned about all the other stuff you lose, such as rules, triggers, persistent relations and so forth. Frankly, we think they’re far more important than long names. On the other hand, because indexes involving long field names don’t get fixed either, and that makes it impossible to open the table, we can sort of see why they point it out. We’re very glad that VFP 7 shows a warning pointing out all the problems rather than just picking on one.
A table that’s the “one” side of a one-to-many persistent relationship can’t be removed from a database. First you must delete the relationship (using ALTER TABLE
or the Database Designer).
The DELETE clause lets you remove the table and discard it in one step. If you specify DELETE, the table is deleted from the disk as well. This pretty much duplicates what DROP TABLE
does. If you specify the RECYCLE clause, the table and its associated files aren’t deleted from disk, but are placed in the Windows Recycle Bin instead.
Although it seems like the RECYCLE clause shouldn't be legal if the DELETE clause isn't specified, it is. It just doesn't do anything. |
In VFP 7, the BeforeRemoveTable and AfterRemoveTable events of the database fire if Database Events
are turned on. BeforeRemoveTable fires after the Remove dialog (if you specified ?) but before the dialog warning about losing information.
Alter Table, AfterAddTable, AfterRemoveTable, BeforeAddTable, BeforeRemoveTable, Create, Create Database, Create Table, Drop Table, Set Safety, Sys(2029)