A validation rule limits or controls what users can enter in a table field or a control (such as a text box) on a form. Microsoft Office Access 2007 provides a number of ways to validate data, and you often use several of those techniques to define a validation rule. You can think of validation rules as a set of layers — you can use some or all of the layers when you need to ensure that your users enter data properly.
- Data types Data types typically provide the first layer of validation. When you design a database table, you define a data type for each field in the table, and that data type restricts what users can enter. For example, a Date/Time field accepts only dates and times, a Currency field accepts only monetary data, and so on.
- Field sizes Field sizes provide another layer of validation. For example, if you create a field that stores first names, you can set it to accept a maximum of 20 characters. Doing so can prevent a malicious user from pasting in large amounts of gibberish text into the field, or it can prevent an inexperienced user from mistakenly entering a first and last name in a field designed only to hold a first name.
- Table properties Table properties provide very specific types of validation. For example, you can set the Required property to Yes and, as a result, force users to enter a value in a field. You can also use the Validation Rule property to require specific values, and the Validation Text property to alert your users to any mistakes. For example, entering a rule such as >100 And <1000 in the Validation Rule property forces users to enter values between 100 and 1,000. A rule such as [EndDate]>=[StartDate] forces users to enter an ending date that occurs on or after a starting date. Entering text such as "Enter values between 100 and 1,000" or "Enter an ending date on or after the start date" in the Validation Text property tells users when they have made a mistake and how to fix the error.
- Input masks You can use an input mask to validate data by forcing users to enter values in a specific way. For example, an input mask can force users to enter dates in a European format, such as 2007.04.14.
You can use some or all of those techniques to validate your data. Some of those features, such as data types, become part of your database by default, but you can use other techniques, such as field properties, validation rules, and input masks, at your discretion. This article explains how to use the Validation Text and Validation Rule properties in table fields, queries, and form controls. A complete discussion of other validation tools, such as data types, field sizes, and input masks, is beyond the scope of this article.
Types of validation rulesYou can create two basic types of validation rules:
- Field validation rules Use a field validation rule to check the value that you enter in a field when you leave the field. For example, suppose you have a Date field, and you enter >=#01/01/2007# in the Validation Rule property of that field. Your rule now requires users to enter dates on or after January 1, 2007. If you enter a date earlier than 2007 and then try to place the focus on another field, Access prevents you from leaving the current field until you fix the problem.
- Record (or table) validation rules Use a record validation rule to control when you can save a record (a row in a table). Unlike field validation rules, record validation rules refer to other fields in the same table. You create record validation rules when you need to check the values in one field against the values in another. For example, suppose your business requires you to ship products within 30 days and, if you don't ship within that time, you must refund part of the purchase price to your customer. You can define a record validation rule such as [RequiredDate]<=[OrderDate]+30 to ensure that someone doesn't enter a ship date (the value in the RequiredDate field) too far into the future.
Where you can use validation rulesYou can define validation rules for tables and for controls on forms. When you define rules for tables, those rules apply when you import data. To add validation rules to a table, you open the table in Design view and set various table properties. To add validation rules to a form, you open the form in Design view and add rules to the properties of individual controls. The steps in the section Validate data during entry in table fields explain how to add validation rules to the properties in table fields. The steps in the section Validate data during entry in forms, later in this article, explain how to add rules to the properties in individual controls.
What you can put in a validation ruleYour validation rules can contain expressions — functions that return a single value. You can use expressions to perform calculations, manipulate characters, or test data. When you create validation rules, you use expressions primarily to test data. For example, an expression can check for one of a series of values, such as "Tokyo" Or "Moscow" Or "Paris" Or "Helsinki". Expressions can also perform mathematical operations. For example, the expression <100 forces users to enter values less than 100. The expression ([OrderDate] - [ShipDate]) calculates the number of days that elapsed between the time an order was placed and the time it shipped. A discussion of expressions and functions is beyond the scope of this article.
Validate data during entry in table fieldsThe steps in this section explain how to create field-level and record-level validation rules, and how to test existing data against a new validation rule. You can enter validation rules for all data types except for the AutoNumber, OLE Object, and Attachment data types, and for Number fields set to ReplicationID.
Validate data in a field- In the Navigation Pane, right-click the table that you want to change, and then click Design View.
- In the Field Name column, select the field that you want to change.
- In the lower section of the table designer, on the General tab, select the Validation Rule property box, and then enter your validation rule. -or-
Click On the Data tab of the property sheet, click next to start the Expression Builder and create your expression.
Enter a rule that applies only to the field. For example, you can enter >0 to force users to enter positive values. Keep in mind that a validation rule for a field does not reference other fields in the table. If the rule does reference other fields, you are creating record-level validation.
- Select the Validation Text property box and enter a validation message. The message you enter depends on your validation rule. Keep the message short and try to explain where the user is going wrong. To continue the example from the previous step, you could use Enter only positive numbers as the validation text.
- Save your work.
Validate data in a record- Repeat steps 1-2 in the previous section to open a table in Design view.
- On the General tab, enter a record-level rule in the Validation Rule property box. -or-
Click next to start the Expression Builder and create your expression. A record-level validation rule references more than one table field. For example, a rule such as [RequiredDate]<=[OrderDate]+30 references two table fields, RequiredDate and OrderDate, and it ensures that users enter ship dates that occur no later than 30 days after an order is entered. For more examples of record-level validation
- Save your changes.
Test your validation rules- Open the table that contains your validation rule in Design View.
- On the Design tab, in the Tools group, click Test Validation Rules.
- Click Yes to close the alert message and start the test.
- If prompted to save your table, Click Yes.
- You might see a variety of other alert messages as you proceed. Read the instructions in each message, and then click Yes or No, as appropriate, to complete or stop the testing.
Test validation rules by using a query Note You can also test your validation rule by writing a query that tests for records that do not conform to your validation rule. The results of such a query show you exactly which records fail to meet your validation requirements. For example, if you set the Required property to Yes or Is Not Null, you test for fields that are null.
- On the Create tab, in the Other group, click Query Design.
Access opens a new query in Design view, and displays the Show Table dialog box.
- In the Show Table dialog box, select the table or tables that you want to use in your query, click Add to add them to the query, and then click Close. The selected tables appear as windows in the upper section of the query designer.
- In each table, double-click the fields that you want to include in your query. -or-
Drag the fields from the table and drop them on a blank cell in the Field row in the lower section of the design grid. Make sure that you add the field that contains your validation rule.
- In the Criteria cell of the field that contains your validation rule, enter the opposite of that rule. For example, if you use BETWEEN 100 AND 1000, enter <100 OR >1000.
- On the Design tab, in the Results group, click Run.
Validate data during entry in formsThe easiest and fastest way to apply a validation rule to a form is to first add the rule to the underlying table field, and then use the automated form-creation tools that Access provides to create a form. For example, on the Create tab, in the Forms group, you can choose to have Access create a simple form, a split form, a multiple-item form, and more. When you use one of those tools, the controls on the form inherit the underlying table properties, including any validation rules and validation text. You can also apply a validation rule to a form control by opening the form in Design view and adding a rule to the Validation Rule property and message text to the Validation Text property of the control. You can add validation rules to some, but not all, form controls. The easiest way to determine if you can add a validation rule to a control is to open the form in Design view and follow the steps in this section. Remember that a control can have a different validation rule than the table field to which the control is bound. When a conflict develops between validation rules, the rule defined for the table field takes precedence. Also, remember that rules in controls and table fields can cancel each other out and thus prevent you from entering any data at all. For example, suppose you apply the following rule to a date field in a table: <#01/01/2007# But you then apply this rule to the form control bound to the table field: >=#01/01/2007# The table field now requires values earlier than the year 2007, but the form control forces you to enter dates after that year, thus preventing you from entering any data at all. If you try to enter data under those conditions, Access tells you to enter dates before and after those specified by the conflicting validation rules, and you find yourself caught in an endless loop. The following steps explain how to add validation rules to controls, and how to lock controls and thus prevent users from altering data.
Create a validation rule- In the Navigation Pane, right-click the form that you want to change, and then click Design View.
- Right-click the control that you want to change, and then click Properties to open the property sheet for the control.
- Click the All tab, and then enter your validation rule in the Validation Rule property box. -or-
Click next to start the Expression Builder and create an expression.
- Enter a message in the Validation Text property box.
- Save your changes.
Lock a control- Follow steps 1-2 in the previous section to open the property sheet for the control that you want to lock.
- Click the All tab, locate the Enabled and Locked property boxes, and then do one of the following:
- To disable the control (make the control appear dimmed and unable to receive focus), set the Enabled property to No.
- To make the data in the control readable, but not allow users to change the data, set the Locked property to Yes. If you set the Enabled property to No and the Locked property to Yes, the control won't appear dimmed, but it won't be able to receive focus.
Validate data during import operationsWhen you add validation rules to a table and you then import data into that table, Access applies your validation rules to the imported data. The same rule applies when you link to data.
Validation rule referenceThe following tables provide reference information for validation rules, including the syntax that the most common rules use, links to information about using wildcard characters in your rules, and examples that you can adapt for use with your data.
Validation rule examplesThe following table provides examples of field-level and record-level validation rules, plus explanatory validation text. You can adapt these examples to fit your content.
Validation rule | Validation text |
---|
<>0 | Enter a nonzero value. | >=0 | Value must be zero or greater. -or- You must enter a positive number. | 0 or >100 | Value must be either 0 or greater than 100. | BETWEEN 0 AND 1 | Enter a value with a percent sign. (For use with a field that stores number values as percentages). | <#01/01/2007# | Enter a date before 2007. | >=#01/01/2007# AND <#01/01/2008# | Date must occur in 2007. | <Date() | Birth date cannot be in the future. | StrComp(UCase([LastName]), [LastName],0) = 0 | Data in a field named LastName must be uppercase. | >=Int(Now()) | Enter today's date. | M Or F | Enter M for male or F for female. | LIKE "[A-Z]*@[A-Z].com" OR "[A-Z]*@[A-Z].net" OR "[A-Z]*@[A-Z].org" | Enter a valid .com, .net, or .org e-mail address. | [RequiredDate]<=[OrderDate]+30 | Enter a required date that occurs no more than 30 days after the order date. | [EndDate]>=[StartDate] | Enter an ending date on or after the start date. |
Syntax for common validation rulesThe expressions in your validation rules don't use any special syntax. The information in this section explains the syntax for some of the more common types of validation rules. As you proceed, remember that expressions and functions can be very complex, and a comprehensive discussion is beyond the scope of this article.
Keep these rules in mind as you create expressions:
- Surround the names of table fields with square brackets, like so: [RequiredDate]<=[OrderDate]+30.
- Surround dates with pound signs (#), like so: <#01/01/2007#
- Surround text values with double quotation marks, like so: IN ("Tokyo","Paris","Moscow"). Also, note that you separate items with commas, and you place lists inside parentheses.
In addition to those rules, the following table shows the common arithmetic operators and provides examples of how you can use them.
Operator | Function | Example |
---|
NOT | Tests for converse values. Use before any comparison operator except IS NOT NULL. | NOT > 10 (the same as <=10). | IN | Tests for values equal to existing members in a list. Comparison value must be a comma-separated list enclosed in parentheses. | IN ("Tokyo","Paris","Moscow") | BETWEEN | Tests for a range of values. You must use two comparison values — low and high — and you must separate those values with the AND separator. | BETWEEN 100 AND 1000 (the same as >=100 AND <=1000) | LIKE | Matches pattern strings in Text and Memo fields. | LIKE "Geo*" | IS NOT NULL | Forces users to enter values in the field. This is the same as setting the Required field property to Yes. However, when you enable the Required property and a user fails to enter a value, Access displays a somewhat unfriendly error message. Typically, your database is easier to use if you use IS NOT NULL and enter a friendly message in the Validation Text property. | IS NOT NULL | AND | Specifies that all the data that you enter must be true or fall within limits that you specify. | >= #01/01/2007# AND <=#03/06/2008# Note You can also use AND to combine validation rules. For example: NOT "UK" AND LIKE "U*".
| OR | Specifies that one or more pieces of data can be true. | January OR February | < | Less than. | | <= | Less than or equal to. | | > | Greater than. | | >= | Greater than or equal to. | | = | Equal to. | | <> | Not equal to. | |
Using wildcard characters in validation rulesYou can use any of the wildcard characters that Access provides in your validation rules. Keep in mind that Access supports two sets of wildcard characters. Access does so because it supports two standards for Structured Query Language (SQL), the language used to create and manage databases: ANSI-89 and ANSI-92. Each of those standards uses a different set of wildcard characters. By default, all .accdb and .mdb files use the ANSI-89 standard; conversely, Access projects use the ANSI-92 standard. If you are new to Access, in an Access project, the tables in your database reside on a computer running Microsoft SQL Server, and the forms, reports and other objects reside on other computers. You can change the ANSI standard for .accdb and .mdb files to ANSI-92
|