RUNSQL Action in MACRO and VBA
Beginners of Microsoft Access can get confused with the usage of RUNSQL Action in Macro and DoCmd.RUNSQL method of Visual Basic for Applications (VBA). Whether you run this Action in Macro or in VBA you must provide SQL Statement of an Action-Query or Data-Definition Query Types only. If you are not sure which are these types of queries then refer the following list:
|Make-Table||SELECT … INTO|
|Create a table||CREATE TABLE|
|Alter a table||ALTER TABLE|
|Delete a table||DROP TABLE|
|Create an Index||CREATE INDEX|
|Delete an Index||DROP INDEX|
Using SQL Statement of any other Query type in RUNSQL Action will end up in errors. In Macro the length of an SQL statement can be maximum 256 characters or less.
The DoCmd.RUNSQL method of VBA can execute an SQL statement with a maximum length of 32768 characters or less.
Note: You are not allowed to give an existing Query Name as parameter to this command. But, in VBA you can load the SQL Statement of a predefined query into a String Variable and use it as parameter to the DoCmd.RUNSQL command.
Public Function DelRecs() 'Existing Delete Query’s SQL is used in this example Dim db As Database, qryDef As QueryDef Dim strSQL As String 'Read and save the SQL statement from 'Query48' 'and load into strSQL string variable Set db = CurrentDb Set qryDef = db.QueryDefs("Query48") strSQL = qryDef.SQL 'Execute the SQL statement after 'disabling warning messages DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True 'Using DoCmd.OpenQuery Command to run a Delete Query DoCmd.SetWarnings False DoCmd.OpenQuery "Query48", acViewNormal DoCmd.SetWarnings True End Function
The RUNSQL Action of Macro Modifies/Deletes information of several records in one go. Before executing the Action Query Microsoft Access gives out a warning message, appropriate to the action specified, and waits for the User’s response. The User must respond to proceed/cancel the action specified.
Once the procedure is perfected, by test running the Action Query several times, we can ask Microsoft Access to turn OFF the Warning Messages during execution of RUNSQL Action. After the Query running step, give control back to MS-Access by turning ON the Warning Message detection. From that point onward MS-Access will be watching for the unexpected errors in the System and warns the User, as and when it happens.
The SetWarnings Action in Macro and DoCmd.SetWarnings Method in VBA are used for this purpose, when data processing for report involves one or more action query steps are placed in a Macro. Check the image of a Macro, given below in design view, with the SetWarnings settings, before and after the RUNSQL Action in the Macro. The first Action in the Macro is Setwarnings with the Parameter value NO to turn off the Warning Messages, when the RUNSQL Action executes in the next step. The SetWarnings Action with the Parameter value YES turns ON the Warning Messages in step three, so that MS-Access can take care of future unexpected System Errors of any kind, as and when it happens.
Example-2: Create a Table with the Data-definition SQL
Warning:Double-check that you are not using any existing table-name for this sample run.
Public Function DataDefQuery() Dim strSQL As String strSQL = "CREATE TABLE Books (Title TEXT(50) NOT NULL, Author TEXT(50) NOT NULL, PublishDate DATE, Price CURRENCY)" DoCmd.RunSQL strSQL End Function
The OpenQuery Action in Macro and DoCmd.OpenQuery Method of VBA uses the name of a predefined Query (of any type) to open them in any of the following Views:
- Design View
- Datasheet View
- Print Preview
- Pivot Table
- Pivot Chart