ID: Q117836
2.50b 2.50c | 2.50 2.50a 2.50b 2.60 | 2.50 2.50a 2.50b 2.60
MACINTOSH | WINDOWS | MS-DOS
The information in this article applies to:
This article describes how to add fields to a database through a program.
****************************************************************
** Program: ADDFIELD.PRG
** Purpose: Add fields to a table
**
** Parameters:
** 1) numfield = The number of fields to add to the table
**
** NOTE: All new fields are of type character and width 25.
**
** Example of Usage:
** DO addfield WITH 1
****************************************************************
PARAMETER numfield
* Verify that a valid parameter has been passed.
* Store 1 to the number of fields to add if the parameter
* is not numeric.
IF TYPE('numfield')<>'N'
numfield=1
ELSE
* End the program if number passed is not a positive whole number.
IF numfield < 1 OR INT(numfield)<>numfield
WAIT WINDOW "Not a valid number of fields to add"
RETURN
ENDIF
ENDIF
* Environment settings
msafe=SET('SAFETY')
SET SAFETY OFF
mtalk=SET('TALK')
SET TALK OFF
* Prompt for a table to open if one is not open in the
* current work area.
IF !USED()
dbf_file = GETFILE('DBF', 'Select a Database')
IF EMPTY(dbf_file)
WAIT WINDOW "No table open in the current work area" NOWAIT
RETURN
ENDIF
USE (dbf_file)
ENDIF
* Create area containing structure of database and
* adjust length to add or remove fields.
dbf_alias=ALIAS()
=AFIELDS(mystruc)
newlen=FCOUNT()+numfield
DIMENSION mystruc(newlen,4)
* Add new field names, types, and widths to end of array.
IF newlen>FCOUNT()
newname="NEWFIELD"
mcount=0
FOR x=numfield TO 1 STEP -1
DO WHILE ASCAN(mystruc,newname)<>0
mcount=mcount+1
newname="NEWFIELD"+ALLTRIM(STR(mcount))
ENDDO
mystruc(newlen-x+1,1)=newname
mystruc(newlen-x+1,2)="C"
mystruc(newlen-x+1,3)=25
mystruc(newlen-x+1,4)=0
ENDFOR
ENDIF
* Create array containing index tags and expressions.
SELECT (dbf_alias)
mcount=0
DO WHILE !EMPTY(TAG(mcount+1))
mcount=mcount+1
DIMENSION mindex(mcount,2)
mindex(mcount,1)=TAG(mcount)
mindex(mcount,2)=SYS(14,mcount)
ENDDO
morder=SET('ORDER')
* Create a cursor file from updated array and
* add data from table.
CREATE CURSOR temp FROM ARRAY mystruc
APPEND FROM (dbf_alias)
* Re-create database with new structure.
SELECT temp
COPY STRUCTURE EXTENDED TO temp2
SELECT (dbf_alias)
CREATE (DBF(dbf_alias)) FROM temp2
* Re-create indexes, if there were any.
IF TYPE('mindex')<>'U'
FOR mcount2=1 TO mcount
mexpr=mindex(mcount2,2)
mtag=mindex(mcount2,1)
INDEX ON &mexpr TAG &mtag
ENDFOR
SET ORDER TO &morder
ENDIF
* Restore the data and browse.
APPEND FROM DBF('temp')
BROWSE
* Clean up.
CLOSE ALL
DELETE FILE temp2.dbf
SET SAFETY &msafe
SET TALK &mtalk
Additional reference words: FoxMac FoxDos FoxWin 2.50 2.50a
2.50b 2.50c
2.60 table
programmatically
KBCategory:
KBSubcategory: FxprgBrowse
Keywords : kbcode FxprgBrowse
Version : 2.50b 2.50c | 2.50 2.50a 2.50b 2
Platform : MACINTOSH MS-DOS WINDOWS
Last Reviewed: May 22, 1998