Access SQL Data Types and Field Definitions
When designing tables in Microsoft Access using SQL, choosing the correct data type is critical. The right data type optimizes storage, ensures data integrity, and improves query performance. In this tutorial, we will explore Access SQL Data Types and field definitions.
What are Access SQL Data Types?
A data type is an attribute that specifies the type of data that an object can hold: integer data, character data, monetary data, date and time data, etc. When executing CREATE TABLE statements, every column must have a designated data type.
Why is it important?
Assigning correct data types:
- Saves memory: A Boolean field uses far less space than an Integer.
- Prevents errors: Stops users from entering text into a date field.
- Enhances performance: Indexes search much faster on appropriate numeric data types.
Syntax
Data types are declared immediately after the column name in a DDL query:
CREATE TABLE TableName (
ColumnName1 DataType1,
ColumnName2 DataType2(Size)
);
Common Access SQL Data Types
| SQL Keyword | Access Equivalent | Description |
|---|---|---|
| VARCHAR(n) | Short Text | Variable-length string up to 255 characters. |
| LONGTEXT | Long Text (Memo) | Large blocks of text up to 1 gigabyte. |
| INTEGER | Long Integer | Standard whole numbers between -2B and 2B. |
| DATETIME | Date/Time | Date and time combinations. |
| CURRENCY | Currency | Monetary values with 4 decimal places of precision. |
| YESNO | Yes/No | Boolean values (True/False, 1/0). |
| AUTOINCREMENT | AutoNumber | Unique sequential numbers managed by Access. |
Examples
Here is an SQL statement that creates a table utilizing multiple data types:
CREATE TABLE Products (
ProductID AUTOINCREMENT PRIMARY KEY,
ProductName VARCHAR(100) NOT NULL,
Price CURRENCY,
StockLevel INTEGER,
LaunchDate DATETIME,
IsActive YESNO
);
Practical VBA Examples
You can automate table creation with these field definitions using VBA:
Option Explicit
Sub DefineDataTypesTable()
Dim db As DAO.Database
Dim strSQL As String
Set db = CurrentDb()
strSQL = "CREATE TABLE Invoices (" & _
"InvoiceID AUTOINCREMENT PRIMARY KEY, " & _
"ClientName VARCHAR(150), " & _
"AmountDue CURRENCY, " & _
"IsPaid YESNO, " & _
"DueDate DATETIME);"
db.Execute strSQL, dbFailOnError
MsgBox "Table created with defined data types!", vbInformation
Set db = Nothing
End Sub
Code Explanation
The VBA macro builds a DDL command containing various data types. ClientName is capped at 150 characters. AmountDue uses the highly precise CURRENCY type suitable for financial arithmetic. IsPaid relies on the efficient YESNO bit-level storage.
Common Errors
- Data Type Mismatch (Error 3421): Occurs when trying to insert string data into an Integer or Date column.
- Text Too Long: Trying to insert more characters into a VARCHAR field than its defined limit (e.g., > 255).
Best Practices
- Always use
CURRENCYfor money to avoid floating-point rounding errors. - Use
AUTOINCREMENTfor synthetic primary keys. - Avoid using
LONGTEXTunless strictly necessary due to performance overhead during text searching.
Related Topics
- Data Validation Rules in Access
- VBA Data Types Overview
Frequently Asked Questions About Access SQL Data Types
What is the Access SQL data type for text?
You should use VARCHAR(n) for short text up to 255 characters, and LONGTEXT for larger text blocks like notes or descriptions.
How do I create an AutoNumber field using SQL?
Use the AUTOINCREMENT data type keyword in your CREATE TABLE statement to generate an AutoNumber field in Microsoft Access.
Which data type is best for money values?
The CURRENCY data type is strictly recommended for financial data because it prevents the rounding anomalies associated with standard floating-point numbers.
Can I change a data type later?
Yes, you can use the ALTER TABLE TableName ALTER COLUMN ColumnName NewDataType syntax to change types, provided existing data can be implicitly converted.
What is the difference between INTEGER and LONG in Access SQL?
In Access DDL SQL, INTEGER actually refers to a Long Integer (4 bytes). For a short 2-byte integer, use the SMALLINT keyword.
Conclusion
Selecting the appropriate Access SQL data type guarantees optimal system resource usage and strong data integrity. By explicitly defining lengths and types, you protect your database against bad data entry and ensure queries run rapidly.
Read More
Crosstab Queries with TRANSFORM and PIVOT in Access SQL
Parameter Queries in Access SQL with QueryDef and VBA
UNION and UNION ALL Queries in Access SQL
Subqueries in Access SQL with IN, EXISTS, and Correlation
Aggregate Functions, GROUP BY, and HAVING in Access SQL
Update and Delete Data in Access SQL with VBA Safely
SQL in Microsoft Access Tutorial: Types of JOINs (Inner, Left, Right) and Joining Multiple Tables