Top 10 Microsoft Access Mistakes (And How to Fix Them)
Even experienced Access developers make these common mistakes. Learn what they are, why they cause problems, and how to fix them in your existing databases.
After years of working with Access databases, certain mistakes appear again and again — in databases built by beginners and experienced developers alike. Here are the ten most common, why they matter, and exactly how to fix them.
Mistake 1: No Primary Keys
The problem: Tables without primary keys cannot enforce uniqueness, cannot be properly related to other tables, and perform poorly in queries.
The fix: Every table must have a primary key. For most tables, an AutoNumber field (integer, automatically incremented) is the right choice. Add one to every table that lacks it.
ALTER TABLE Customers ADD COLUMN CustomerID AUTOINCREMENT PRIMARY KEY;
Mistake 2: Storing Multiple Values in One Field
The problem: Fields like "Colors: Red, Blue, Green" or "Tags: urgent, review, pending" violate first normal form and make filtering, sorting, and reporting extremely difficult.
The fix: Create a separate table for the multi-value data with a foreign key back to the parent table. Use a junction table for many-to-many relationships.
Mistake 3: Using Text Fields for Numbers and Dates
The problem: Storing phone numbers as "555-1234" is fine (text), but storing prices as "19.99" or dates as "09/16/2026" in Text fields breaks sorting, arithmetic, and date calculations.
The fix: Use Number fields for numeric data and Date/Time fields for dates. Use Text only for data that is truly textual (names, descriptions, codes that contain letters).
Mistake 4: No Indexes on Foreign Keys and Filter Fields
The problem: Queries that join tables or filter on unindexed fields perform full table scans — reading every record to find matches. On large tables, this is extremely slow.
The fix: Add indexes to:
- Every foreign key field
- Every field used in WHERE clauses
- Every field used in ORDER BY clauses
- Every field used in JOIN conditions
In Table Design View, set the Indexed property to "Yes (Duplicates OK)" for foreign keys and filter fields.
Mistake 5: No Error Handling in VBA
The problem: VBA procedures without error handling crash with cryptic error messages when anything unexpected happens. Users lose trust; data may be left in an inconsistent state.
The fix: Add On Error GoTo ErrorHandler to every VBA procedure, with a proper error handler at the bottom:
Sub MyProcedure()
On Error GoTo ErrorHandler
' ... your code ...
Exit Sub
ErrorHandler:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical
End Sub
Mistake 6: Storing Calculated Values
The problem: Storing TotalPrice = Quantity * UnitPrice in a field means the stored value can become out of sync with the component values. If Quantity changes, TotalPrice must be manually updated.
The fix: Calculate values in queries, forms, and reports — not in stored fields. The calculation runs on current data every time and is always accurate.
Mistake 7: Using Reserved Words as Field Names
The problem: Field names like Name, Date, Value, Type, Status, Order, and Level are reserved words in Access SQL. Using them causes cryptic query errors.
The fix: Prefix field names with the table abbreviation or use more specific names: CustomerName, OrderDate, ProductType, OrderStatus. Rename existing offending fields and update all queries, forms, and reports that reference them.
Mistake 8: Not Splitting the Database for Multi-User Use
The problem: A single .accdb file on a network share shared by multiple users is slow, prone to corruption, and a single point of failure.
The fix: Split the database into a backend (tables only, on the network) and a frontend (forms, queries, reports, on each user's machine). Use Database Tools → Move Data → Access Database to split.
Mistake 9: Inconsistent Naming Conventions
The problem: Tables named "Customers", "tbl_orders", "PRODUCTS", and "InvoiceData" in the same database make code harder to read and maintain. Forms named "Form1", "Form2", "CustomerForm_new_v3" are impossible to manage.
The fix: Adopt a consistent naming convention and apply it everywhere:
- Tables:
tblCustomers,tblOrders,tblProducts - Queries:
qryActiveCustomers,qryMonthlySales - Forms:
frmCustomers,frmOrderEntry - Reports:
rptMonthlySummary,rptCustomerStatement - Macros:
mcrOpenCustomers - Modules:
modUtilities,modEmailFunctions
Mistake 10: Never Compacting the Database
The problem: Access databases accumulate empty space as records and objects are deleted. Over time, the file bloats, performance degrades, and corruption risk increases.
The fix: Compact the database regularly. Enable automatic compacting: File → Options → Current Database → Compact on Close. For databases in active use, compact manually at least weekly.
Bonus: Not Backing Up
This is not a design mistake — it is an operational one, but it is the most consequential. Access databases are vulnerable to corruption, accidental deletion, and hardware failure. Without a current backup, any of these events means permanent data loss.
The fix: Automate daily backups using a batch script and Windows Task Scheduler. Store backups in at least two locations, including one offsite or in the cloud.
Conclusion
Most of these mistakes are easy to fix once you know to look for them. Audit your existing databases against this list — you will likely find several opportunities for improvement. And for new databases, build these practices in from the start: primary keys on every table, proper data types, indexes on key fields, error handling in all VBA, and a regular backup schedule.
Explore Topics
Written by
MS Access Blog
Content creator and writer sharing insights and stories.