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.
FCOUNT()
, FLDCOUNT()
, FIELD()
, FSIZE()
FCOUNT()
and FLDCOUNT()
return the number of fields in a table. FIELD()
returns the name of a specified field in a table. FSIZE()
is confused: It is two different functions, depending on the setting of—ugh!—SET COMPATIBLE
. Generally speaking, we avoid these commands altogether, and let AFIELDS()
give us all the information at once.
nFieldCount = FCOUNT( [ cAlias | nWorkarea ] )
nFieldCount = FLDCOUNT( [ cAlias | nWorkarea ] )
cFieldName = FIELD( nField, [ cAlias | nWorkarea ] )
* With SET COMPATIBLE OFF:
nFieldSize = FSIZE( cFieldName, [ cAlias | nWorkarea ] )
* With SET COMPATIBLE ON:
nFileSize = FSIZE( cFileName )
Parameter |
Value |
Meaning |
cAlias |
Character |
The alias of the table about which information is returned. |
Omitted |
If nWorkarea is also omitted, use current work area. |
|
nWorkarea |
Numeric |
The number of the work area containing the table about which information is returned. |
Omitted |
If cAlias is also omitted, use current work area. |
|
nFieldCount |
Numeric |
Number of fields in the specified table. |
nField |
Numeric |
Number of the field to return, based on physical order of the table. |
cFieldName |
Character |
The field's name. |
nFieldSize |
Numeric |
Size of the field (SET COMPATIBLE OFF). |
cFileName |
Character |
The name of the file. |
nFileSize |
Numeric |
Size of the file (SET COMPATIBLE ON). |
FCOUNT() and FLDCOUNT() do not report on hidden, system fields (see "DBF, FPT, CDX, DBC—Hike!"). If you use one of them with FSIZE() to try to calculate the size of a table, you'll come out with the wrong number if any of the fields are nullable. You need to use RECSIZE() or AFIELDS() to test for this, and while you're at it, you can use the return value of AFIELDS() for a better FCOUNT() and the sum of the AFIELDS() size values for a better FSIZE(). |
FLDCOUNT()
is a totally undocumented clone of FCOUNT()
, added in FoxPro 2.6 as part of the dBase IV compatibility campaign. We recommend you avoid it, if for no other reason than to take pity on the poor soul who has to maintain your code. After all, it might be you.
FIELD()
returns the name of the field based on its order within the table. Because fields within a table can be rearranged quite easily, you’ll not want to hardcode field-order numbers into your code. Instead, FIELD()
could prove valuable in a black-box looping structure where you’re scanning for certain field names. However, AFIELDS()
provides a lot more information in an easily manipulated array and tends to be the function we prefer to use.
FSIZE()
is a horror show. Fox Software and Ashton-Tate each went its own way with this function—it’s one of the few that is affected by the dreaded SET COMPATIBLE
command. If SET COMPATIBLE
is OFF or FOXPLUS, FSIZE()
returns the field size of the specified field. If FSIZE()
is called with SET COMPATIBLE
STUPID, er, we mean, ON or DB4, it returns the size of the specified file. Our advice: Leave COMPATIBLE SMART (FoxPlus) and use ADIR()
to get file sizes.
SET COMPATIBLE FOXPLUS
USE HOME() + "LABELS"
nFieldSize = FSIZE("Name", "Labels") && returns 24
SET COMPATIBLE DB4
nFileSize = FSIZE(HOME()+"Labels") && returns 6622
? FCOUNT("LABELS") && seven
? FIELD(3, "LABELS") && returns "NAME"