Stored Procedure in MS Access
Unlike other objects in Access, stored procedures have no interface and cannot be created or run through the Access User Interface. The way to get them into your database is to simply code them.
When a stored procedure is added to an Access Database, the Jet Engine reworks the stored procedure syntax into a query object.
To create the stored procedure, execute the following SQL statement against the database:
"CREATE PROC procProductsList AS SELECT * FROM Products;"
The statement: "CREATE PROC procCustomerList" is the part that actually creates the stored procedure. The part following "AS" can be any valid SQL Statement.
Often in a stored procedure you'll want to pass a value to be used in the query. Consider that you may want to delete a record based on a particular ProductID. The following stored procedure shows how to do just that:
"CREATE PROC procProductsDeleteItem(inProductsID LONG)" & _ "AS DELETE FROM Products WHERE ProductsID = inProductsID;"
On the first line, notice the parenthesis right after the CREATE PROC declaration. There is a parameter defined as a Long value. This is where you add the variable to delete the record in question.
The next two statements show how to create an add and an update stored procedure for the Products table respectively. Note that not all fields are included for the sake of brevity:
"CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " & _ "inSupplierID LONG, inCategoryID LONG) " & _ "AS INSERT INTO Products (ProductName, SupplierID, CategoryID) " & _ "Values (inProductName, inSupplierID, inCategoryID);"
"CREATE PROC procProductsUpdateItem(inProductID LONG, " & _ " inProductName VARCHAR(40)) " & _ "AS UPDATE Products SET ProductName = inProductName " & _ " WHERE ProductID = inProductID;"
Notice that a comma separates each parameter when more than one is specified.
Limitations
There are some limitations you may encounter here, especially if you're used to the power of SQL Server.
- Output parameters cannot be used.
- Don't use the @ character. The @ character is often used in Transact SQL (SQL Server), where it represents a local variable. Access doesn't always convert this character and will sometimes leave it out. This can cause esoteric bugs which can lead to premature hair loss.
- Temporary tables are not available in Access.
- I suspect many of the options available in Transact SQL are not available in Access as it's not Transact SQL compatible.
Alok Kumar 2 years ago
Nice article. It really gave us a lot of information. We were trying to get information on some subject which is related to this to an extent for last couple of days