Knowing When Field-Level Rules Are Checked

Field-level rules are checked when the field's value changes. Unlike triggers, field-level rules fire even if data is buffered. When you work with data in a Browse window, form, or other window, Visual FoxPro checks field-level rules as you move away from the field. If a field value has not been changed, the rule is not checked. This means that you are free to tab through fields without the system validating any of the data.

Field-level Rule Checking

Data entry method Window or command Field-level rule checked
User interface Browse window
Form
Other window
As you move away from the field, if the field value has changed. (If the field value has not been changed, the rule is not checked.)
Commands that do not specify fields APPEND
APPEND GENERAL
APPEND MEMO
BROWSE
CHANGE
DELETE
EDIT
GATHER
As field value changes, in field definition order.
  APPEND BLANK
INSERT
INSERT - SQL
As the record is appended or inserted.
Commands that specify fields UPDATE
UPDATE - SQL
REPLACE
In the order in which fields are specified in the command.

Validating Record-Level Values

You use record-level validation rules to control the type of information a user can enter into a record. Record-level validation rules typically compare the values of two or more fields in the same record to make sure they follow the business rules established for the database. For example, you can use a record-level validation rule to ensure that one field's value is always greater than that of another in the same record.

To create a record-level validation rule and custom error message

  • In the Table tab of the Table Designer, enter the rule and error message you want in the Rule and Message boxes.

    -or-

  • Use the CHECK clause of the CREATE TABLE or ALTER TABLE commands.

For example, you might want to ensure employees are 18 years or older when hired. The following code adds a record-level validation rule and error text for the employee table requiring that the date of hire entered into the hire_date column is greater than or equal to their birth date plus 18 years:

ALTER TABLE employee SET CHECK ;
   hire_date >= birth_date + (18 * 365.25) ;
   ERROR "Employees must be 18 years or older by date of hire"

If the user enters an employee record with an invalid date, Visual FoxPro displays an error with the custom error message you defined, and does not update the record.

You can also use the SET CHECK clause of the ALTER TABLE command to create a record-level validation rule. You should ensure that any rules specified for fields do not conflict semantically with the rules you define for the table. Visual FoxPro makes no attempt to compare the field-level and record-level expressions for consistency.

See Also

Enforcing Business Rules | Record-Level Rule Checking | Working with Tables | Trigger Usage | Creating Triggers | Restricting Access to Fields