Microsoft Access_ Use ADO to Execute SQL Statements

download Microsoft Access_ Use ADO to Execute SQL Statements

of 8

Transcript of Microsoft Access_ Use ADO to Execute SQL Statements

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    1/18

    You are here: Home  Excel VBA  Microsoft Access: Use ADO to Execute SQL statements

    Excel Tips

    Excel Functions

    Excel VBA

    Excel Pivot Tables

     

    EXCEL VBA

    Microsoft Access: Use ADO to Execute SQL

    statements

     

    User Rating: / 2

    Poor Best

    D et a i l s

     

    Microsoft Access: Use ADO to Execute SQL statements

     

    Microsoft Access: ActiveX Data Objects (ADO), Connect with

    Access Databases from Excel using VBA.Part 2 of 4

     

    Microsoft Access: ActiveX Data Objects (ADO), Connect with Access

    Databases from Excel using VBA:

     

    1. Microsoft Access: ActiveX Data Objects Library (ADO).2. Microsoft Access: Use ADO to Execute SQL statements.

    3. Import or Export Data from Access to Excel using ADO.

    4. Microsoft Access: ActiveX Data Objects Extensions (ADOX).

     

    ---------------

    Also Read:

    Microsoft Access: Data Access Objects Library (DAO), Connect with Access

    Databases from Excel using VBA.

     

    Use ADO to Execute SQL statements to Manage your Database 

    You can use ADO to execute SQL commands to manipulate data and manage

    your database. Using SQL requires that the data should be entered as per the table

    structure, the columns sequence and their data type. SQL, stands for Structured

    Excel & VBA Solutions

    Search...

    Excel &

    VBA

    HOME EXCEL MODELS SERVICES FEEDBACK

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    2/18

    Query Language, is a computer language, and SQL statements are used to store,

    retrieve and manipulate data in a relational database ex. Access Database.

     

     A relational database has multiple tables, each table comprising of columns (fields)

    and rows wherein data can be grouped using common attributes, and from which

    data can be easily retrieved. The multiple tables relate to and work with each other 

    through certain key fields (like unique "ID Nos") viz. a separate table is created for 

    vendor-details and another table for purchase-orders wherein vendor details are not

    repeated each time a purchase order is made and they are related with each other 

    through a unique "Vendor ID" column which is present in both tables. Whereas flatfile databases contain a single table of data with fields representing all parameters

    viz. a single table will contain details of vendors and purchase orders made, and

    with each purchase order the vendor details also get repeated resulting in

    duplication. Flat file databases though easier to maintain, are far less robust and

    flexible.

     

     A Database Management System (DBMS) is a program which manages data in

    databases, the manner in which data is created, stored, modified and accessed. A

    Relational Database Management System (RDBMS) is the DBMS in respect of a

    relational database. Microsoft Access is a popular RDBMS which supports creating

    relational databases.

    Other examples of DBMS are MySQL, Microsoft SQL Server, Oracle, etc. 

    In SQL, you can use DDL or DML statements. DDL (stands for Data Definition

    Language) statements are used to make structural changes, to define the database

    structure and objects like tables and columns. Examples of some often used DDL

    commands are CREATE TABLE, DROP TABLE and ALTER TABLE. DML

    statements are used to managing and manipulating data within the database

    structure and deal with inserting, updating, deleteing and retrieving database

    information like records in tables. Examples of often used DML commands are

    include INSERT, SELECT, UPDATE and DELETE.

     

    SQL Commands explained: 

    The SQL SELECT Statement (the most commonly used SQL command) selects

    data from a database, specifying column(s) headings, table(s) from which columns

    are to be selected, and the criteria for selection. SELECT * is used to select all

    columns from a table. The FROM clause in a SELECT statement specifies the Table

    from which columns are to be selected. The WHERE clause in a SELECT statement

    specifies the criteria for selection. Syntax: SELECT column_name FROM

    table_name [WHERE clause]. You can also add other optional clauses, viz.

    GROUP BY, HAVING and ORDER BY.

     

    Use the INSERT command to insert a new row/record at the end of a table.

     

    DELETE removes a specified row(s) from a table (in the DELETE statement, FROMclause is required and WHERE clause is optional).

     

    TRUNCATE TABLE deletes all the rows from the table (does not have the WHERE

    clause), and the table structure remains.

     

    UPDATE modifies values of records in a table.

     

    CREATE TABLE creates a table with the specified fields.

     

    DROP TABLE deletes all rows and the table structure is removed from the

    database.

     

    ALTER TABLE is used to add, remove or modify columns in a table.

     

    Using the ADO connection Execute method to execute the

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    3/18

    specified query and SQL statements 

    Execute Method (ADO Connection): The Execute method on the specified ADO

    connection object, executes the SQL statement passed in the CommandText

    argument. Note that Recordset object returned by the method is a read-only,

    forward-only cursor. Syntax: Set recordset = connection.Execute

    (CommandText, RecordsAffected, Options).

     

    CommandText is a string value, and is an SQL statement, stored procedure, or 

    provider-specific text. RecordsAffected is an optional Long variable which indicatesthe number of records affected by the method. Options is an optional Long value

    which determines how the CommandText argument is evaluated:

    adCmdUnspecified - indicates that the CommandText property is unspecified;

    adCmdText - evaluates CommandText as a textual definition of a command or 

    stored procedure call; adCmdTable - evaluates CommandText as a table name

    whose columns are all returned by an SQL query; adCmdStoredProc - evaluates

    CommandText as a stored procedure name; adCmdUnknown (default) - type of 

    command in the CommandText argument is not known; Values of adCmdFile or 

    adCmdTableDirect are not to be used with the Execute Method.

     

    Example 2: Use ADO with SQL statements.Refer to Images 3a & 3b, as mentioned in the code.

     

    Image 3a

     

    Image 3b

     

    Sub automateAccessADO_2()

    'In this example we show how to use ADO with SQL statements:

    '1. Add and delete records using the ADO connection Execute method to

    execute SQL statements;

    '2. Select Records/Fields conditionally, using the ADO Recordset Open Method

    with SQL statements.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

     

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    4/18

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    Dim strSQL As String

    'instantiate an ADO object using Dim with the New keyword:

    Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------------

    'CREATE AND DELETE RECORDS

    'Besides using ADO by itself for entering data (viz. using the AddNew

    method of the Recordset object) as shown earlier, you can also use ADO

    with SQL statements.

    'Refer Image 3a for SalesManager Table in MS Access file

    SalesReport.accdb; Image 3b shows the SalesManager Table after adding new record (before it is deleted).

    'add new records in the SalesManager Table using SQL INSERT INTO

    statements, by specifying both the column names and the values to be

    inserted. The Execute method on the specified ADO connection object,

    executes the SQL statement passed in the CommandText argument:

    connDB.Execute "INSERT INTO SalesManager (EmployeeId, FirstName,

    Surname, JoinDate) VALUES (2, 'Mary', 'Smith', '6/20/2009')"

    'alternatively add a new record by specifying only the column values to be

    inserted:

    'connDB.Execute "INSERT INTO SalesManager VALUES (2, 'Mary',

    'Smith', '6/20/2009')"

    'delete records in the SalesManager Table:

    strSQL = "DELETE FROM SalesManager WHERE FirstName = 'Mary'"

    connDB.Execute CommandText:=strSQL

    'Value of 0 will be returned which indicates that the recordset is closed,

    because it was never opened (value of 1 indicates that the recordset is

    open):

    MsgBox adoRecSet.State

    '--------------------

    'SELECT RECORDS / FIELDS CONDITIONALLY

    'Refer Image 3a for SalesManager Table in MS Access file

    SalesReport.accdb, for below codes.

    'select a specific field (FirstName), basis numeric reference:

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    5/18

    strSQL = "SELECT FirstName FROM SalesManager WHERE

    EmployeeId = 18"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic

    'returns "Tracy":

    MsgBox adoRecSet.Fields("FirstName")

    adoRecSet.Close

    'select a specific field (FirstName), basis text reference:

    strSQL = "SELECT FirstName FROM SalesManager WHERE SurName ='Green'"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic

    'returns "Sam":

    MsgBox adoRecSet.Fields("FirstName")

    adoRecSet.Close

    'select multiple fields, basis numeric reference:

    strSQL = "SELECT FirstName, SurName, JoinDate FROM SalesManager 

    WHERE EmployeeId = 18"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic'returns "Tracy Murray 7/16/2011":

    MsgBox adoRecSet.Fields("FirstName") & " " &

    adoRecSet.Fields("SurName") & " " & adoRecSet.Fields("JoinDate")

    adoRecSet.Close

    'select a specific field, basis multiple criteria (delimit date values by the

    datetime delimiter "#"):

    'to select a range between two dates, the BETWEEN operator has been

    used in the WHERE clause.

    strSQL = "SELECT EmployeeId FROM SalesManager WHERE SurName

    = 'Green' and JoinDate between #08/3/2012# and #10/3/2013#"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic'returns "56":

    MsgBox adoRecSet.Fields("EmployeeId")

    adoRecSet.Close

    'select all fields, basis text reference:

    strSQL = "SELECT * FROM SalesManager WHERE SurName = 'Kelly'"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic

    'returns "35 David Kelly 1/24/2010":

    MsgBox adoRecSet.Fields("EmployeeId") & " " &

    adoRecSet.Fields("FirstName") & " " & adoRecSet.Fields("SurName") & "

    " & adoRecSet.Fields("JoinDate")adoRecSet.Close

    'select all fields, basis criteria specified using the Like operator:

    'The Like operator compares two strings, if the value in the string matches

    the pattern, it returns True. The percent sign (%) indicates zero or more

    characters after J ie. the criteria is if the first name starts with J:

    'Note that in the WHERE clause of SQL statement, percent (%) is used

    as a wild character instead of an asterisk (*), indicating zero or more

    characters after J. In the WHERE clause of SQL statement, use

    underscore (_) to indicate a single character.

    strSQL = "SELECT * FROM SalesManager WHERE FirstName Like 'J%'"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic'return all instances where criteria (WHERE FirstName Like 'J%') is

    met - "Mason" & "Davis":

    Do While Not adoRecSet.EOF

    MsgBox adoRecSet.Fields("Surname")

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    6/18

    adoRecSet.MoveNext

    Loop

    adoRecSet.Close

    '------------------

    'close the objects

    connDB.Close

    'destroy the variablesSet adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    Example 3: Edit Records, using ADO with SQL statements.Refer to Images 4a & 4b, as mentioned in the code.

     

    Image 4a

     

    Image 4b

     

    Sub automateAccessADO_3()

    'In this example we show how to Edit Records, using ADO with SQL

    statements:

    'Refer Image 4a for SalesManager Table in MS Access file SalesReport.accdb

    before edit, and Refer Image 4b after edit.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    Dim strSQL As String

    'instantiate an ADO object using Dim with the New keyword:

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    7/18

    Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------

    'SEARCH RECORDS BASIS SPECIFIED CRITERIA AND EDIT THEM

    'select all fields, basis JoinDate criteria:

    strSQL = "SELECT * FROM SalesManager WHERE JoinDate >= #01/01

    /2010#"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic

    'return all instances where criteria (WHERE JoinDate >= #01/01

    /2010#) is met, and marks their FirstName & Surname with "M":

    Do While Not adoRecSet.EOF

    adoRecSet.Fields("FirstName") =

    adoRecSet.Fields("FirstName") & " - M"

    adoRecSet.Fields("Surname") = adoRecSet.Fields("Surname")

    & " - M"

    adoRecSet.MoveNextLoop

    '------------------

    'close the objects

    adoRecSet.Close

    connDB.Close

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    Use the OpenSchema Method to access information about

    database tables and columns 

    The OpenSchema Method returns a Recordset object containing schema

    (structure) information about the database, like the tables and columns in the

    database and the supported data types. Syntax: Set recordset =

    connection.OpenSchema(QueryType, Criteria, SchemaID). 

    The first argument in the OpenSchema Method which is a must, is the type of 

    schema required which is a SchemaEnum value (ie. an enumerated value) which

    specifies the type of Recordset returned by the method. Examples include

    adSchemaTables which returns the tables defined in the catalog, and

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    8/18

    adSchemaColumns which returns the columns of tables defined in the catalog.

     

    To limit the results of the schema query, use the Criteria argument (this is the

    second parameter in the OpenSchema Method, and is optional) which specifies an

    array of values (ie. query constraints).

    Query constraints (ie. criteria) in the SchemaEnum of adSchemaTables are:

    TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE.

    Query constraints (ie. criteria) in the SchemaEnum of adSchemaColumns are:

    TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.

     The third argument of SchemaID is used only if the first argument is set to

    adSchemaProviderSpecific.

     

    Example 4: Use the OpenSchema Method to access information

    about the database tables and columns.Refer to Image 5, as mentioned in the code.

     

    Image 5

     

    Sub automateAccessADO_4()

    'Use the OpenSchema Method to access information about the database

    tables and columns.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    'instantiate an ADO object using Dim with the New keyword:Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    9/18

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------

    'ACCESS INFORMATION ABOUT THE DATABASE TABLES AND

    COLUMNS

    'Refer Image 5 for SalesManager Table in MS Access file

    SalesReport.accdb which also contains another Table named

    Performance.

    'code to get names of all tables in a database - returns table names

    'Performance' & 'SalesManager':

    'query constraint of TABLE_TYPE is specified as "TABLE"

    Set adoRecSet = connDB.OpenSchema(adSchemaTables, Array(Empty,

    Empty, Empty, "TABLE"))

    Do While Not adoRecSet.EOF

    MsgBox adoRecSet.Fields("TABLE_NAME").Value

    adoRecSet.MoveNext

    Loop

    adoRecSet.Close

    'alternate code to get names of all tables in a database - returns tablenames 'Performance' & 'SalesManager':

    Set adoRecSet = connDB.OpenSchema(adSchemaTables)

    Do While Not adoRecSet.EOF

    If adoRecSet.Fields("TABLE_TYPE") = "TABLE" Then

    MsgBox adoRecSet.Fields("TABLE_NAME").Value

    End If 

    adoRecSet.MoveNext

    Loop

    adoRecSet.Close

    'to get names of all fields of a specified table ("SalesManager"):

    'Field Names returned are: EmployeeId, FirstName, Surname & JoinDate.

    Set adoRecSet = connDB.OpenSchema(adSchemaColumns, Array(Empty, Empty, "SalesManager", Empty))

    Do While Not adoRecSet.EOF

    MsgBox adoRecSet.Fields("COLUMN_NAME").Value

    adoRecSet.MoveNext

    Loop

    adoRecSet.Close

    '--------------

    'close the objects

    connDB.Close

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    Create a database table using ADO, with SQL statements 

    Note that ADO does not by itself support creating database tables, which is actually

    done with ADOX. However, you can create a database table in ADO using SQL.

     

    SQL CREATE TABLE statement creates a table with the specified fields. SQL

    INSERT INTO statement inserts a new row/record at the end of the table.

     

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    10/18

    While using the SQL CREATE TABLE statement, you specify the Table Name, Field

    Names and their Data Types. Commonly used data types for fields include: TEXT

    (SIZE) for Text Field; CHAR (SIZE) for Text Field; SHORT for Numbers-Integer;

    LONG for Numbers-Long; SINGLE for Numbers-Single; DOUBLE for Numbers-

    Double; CURRENCY for Currency; DATE for Date/Time; DATETIME for Date/Time;

    YESNO for Boolean values; and so on.

     

    Use the CONSTRAINT clause in SQL statements, to create a constraint on one or 

    more fields:

    Specifying the PRIMARY KEY (can be only one in a Table) reserved worddesignates a field(s) as a primary field whose values will be unique and cannot

    be Null.

    Specifying NOT NULL for a field will necessitate the new record to have valid

    data in that field. A table column, by default, can have a NULL value ie. a field

    can contain no value.

    Specifying the UNIQUE reserved word will not allow a same value in that field,

    for two records in the table.

     

    Example 5: Create a New Database Table using ADO, with SQL

    statements.Refer to Image 6, as mentioned in the code.

     

    Image 6

     

    Sub automateAccessADO_5()

    'Create a new database table using ADO with SQL statements.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    'instantiate an ADO object using Dim with the New keyword:

    Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    11/18

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------

    'CHECK IF THE NEW TABLE NAME IS PRE-EXISTING IN DATABASE,

     AND DELETE IF FOUND

    'check if the table named SalesManager exists in database, and delete if 

    found:

    Set adoRecSet = connDB.OpenSchema(adSchemaTables, Array(Empty,

    Empty, Empty, "TABLE"))

    Do While Not adoRecSet.EOF

    If adoRecSet.Fields("TABLE_NAME").Value = "SalesManager"

    Then

    connDB.Execute "DROP TABLE SalesManager"

    End If 

    adoRecSet.MoveNext

    Loop

    adoRecSet.Close

    '--------------

    'CREATE A NEW TABLE IN DATABASE

    'Refer Image 6

    'Create a table named SalesManager, with field names and their data

    types (viz. the field named FirstName is of Text data type and can hold 40

    characters).

    'add a PRIMARY KEY CONSTRAINT named 'pk_EI' for the column

    'EmployeeID' of the 'SalesManager' table; also add a UNIQUE

    CONSTRAINT named 'un_FN' for the column 'FirstName' of the

    'SalesManager' table.

    connDB.Execute "CREATE TABLE SalesManager(EmployeeId LONG,

    FirstName Text(40), Surname Char(50) NOT NULL, JoinDate Date, Sales

    Double, CONSTRAINT pk_EI PRIMARY KEY (EmployeeID),

    CONSTRAINT un_FN UNIQUE (FirstName))"

    'Populate the table using SQL INSERT INTO statements, without

    specifying the column names but only their values:

    connDB.Execute "INSERT INTO SalesManager VALUES (256, 'Mary',

    'Lange', '7/24/2008', 15678.58)"

    connDB.Execute "INSERT INTO SalesManager VALUES (587, 'Harry',

    'Davis', '7/16/2011', 14673.26)"connDB.Execute "INSERT INTO SalesManager VALUES (01, 'James',

    'Bond', '3/11/2009', 12589)"

    'Populate the table using SQL INSERT INTO statements, by specifying

    both the column names and the values to be inserted:

    connDB.Execute "INSERT INTO SalesManager (EmployeeId, FirstName,

    Surname, JoinDate, Sales) VALUES (445, 'John', 'Morgan', '1/24/2010',

    12432.20)"

    connDB.Execute "INSERT INTO SalesManager (EmployeeId, FirstName,

    Surname, JoinDate, Sales) VALUES (25, 'Dane', 'Large', '10/3/2012',

    9876.5)"

    '--------------

    'close the objects

    connDB.Close

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    12/18

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    ADO Find Method - Find or Locate a specific Record Find Method (ADO) searches for a row, in a set of records, basis specified criteria.

    Syntax: Find (Criteria, SkipRows, SearchDirection, Start).

     

    Criteria specifies the criteria for finding the record. This argument is rquired whle all

    others are optional. Note that only one criteria is supported by the ADO Find

    method.

     

    SkipRows specifies the number of records to be skipped, where the deafult value is

    0 wherein the current record is not skipped.

     

    Use the default SearchDirection value of adSearchForward to search forward from

    the current record, and if a match is not found the position of the record pointer is atEOF ie. after the last record in the set of records. To search backward, use the value

    of adSearchBackward and if a match is not found the position of the record pointer 

    is at BOF ie. before the first record in the set of records.

     

    Start argument sets a current row position before starting a search. Default value of 

    adBookmarkCurrent indicates the current record, value of adBookmarkFirst

    indicates the first record and value of adBookmarkLast indicates the last record.

     

    Note: On a match being found, the found record becomes the the current row

    position, and because the search starts from the current row, you must either skip a

    record OR move to the next record to do a new find for the next match.

     

    Example 6: Using the Find method to find or locate a specific

    record(s).Refer to Image 7, as mentioned in the code.

     

    Image 7

     

    Sub automateAccessADO_6()

    'Using the Find method to find or locate a specific record(s).

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.xLibrary from the list.

    '--------------

    'DIM STATEMENTS

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    13/18

    Dim strMyPath As String, strDBName As String, strDB As String

    'instantiate an ADO object using Dim with the New keyword:

    Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------

    'USE FIND METHOD

    'Refer Image 7 to view the SalesManager Table in MS Access file

    "SalesReport.accdb"

    'open Recordset ie. SalesManager Table:

    adoRecSet.Open Source:="SalesManager", ActiveConnection:=connDB,

    CursorType:=adOpenKeyset, LockType:=adLockOptimistic

    'note that only one criteria is supported by the ADO Find method:

    adoRecSet.Find "EmployeeID > 8", , adSearchForward

    Do While Not adoRecSet.EOF

     

    'using an IF statement, for search with an additional criteria of 

    FirstName starting with J within the Search criteria of 

    EmployeeID > 8:

    'Note that the J* indicates all words starting with the letter J

    followed by zero or more characters in the IF statement, but in

    the WHERE clause of an SQL statement it will be used as J%

    (percent is used as a wild character instead of an asterisk,

    indicating zero or more characters after J) viz. "FirstName LIKE

    'J%'".

    If adoRecSet.Fields("FirstName") Like "J*" Then'2 records are found using the Find Method: John Mason,

    Employee Id:12; Jim Davis, Employee Id:21.

    MsgBox adoRecSet.Fields("FirstName") & " " &

    adoRecSet.Fields("Surname") & ", Employee Id:" &

    adoRecSet.Fields("EmployeeId")

    i = i + 1

    End If 

    'on a match being found, the found record becomes the the current

    row position, and because the search starts from the current row,

    you must either skip a record OR move to the next record to do a

    new find for the next match:

    adoRecSet.MoveNextadoRecSet.Find "EmployeeID > 8", , adSearchForward

    'OR skip 1 row:

    'adoRecSet.Find "EmployeeID > 8", 1, adSearchForward

     

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    14/18

    Loop

    '2 records are found

    MsgBox "Records found: " & i

    '--------------

    'close the objects

    connDB.Close

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    ADO Filter Property to FilterRecords 

    Filter database table records, using the Filter Property (ADO) on a recordset. Use

    a filter when you want to screen out selective records in a table. Syntax:recordset.Filter = Criteria.

     

    The Criteria string contains clauses in the format of "FirstName = 'Jim'" where

    FirstName is the Column or Field Name, = is the Operator, and Jim is the Field

    Value. The Criteria string can have multiple conditions or clauses.

    The following operators can be used: , =, , =, or LIKE.

     

    For field values: use single quotes for strings; "#" for date values; you can use wild

    cards asterisk (*) and percent (%), provided they are the last character in the string,

    for the LIKE operator.

     

    Example 7: Filter Records using the ADO Filter Property.Refer to Image 7, as mentioned in the code.

     

    Sub automateAccessADO_7()

    'Filter database table records, using the Filter Property (ADO) on a recordset.

    Use a filter when you want to screen out selective records in a table.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    'instantiate an ADO object using Dim with the New keyword:

    Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    15/18

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For 

     Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------'FILTER RECORDS

    'Refer Image 7 to view the SalesManager Table in MS Access file

    "SalesReport.accdb", used for below filter criteria.

    'Place the filter BEFORE opening the recordset.

    'You can use wild cards asterisk (*) and percent (%), provided they are

    the last character in the string, for the LIKE operator.

    'Examples of 5 valid filter criteria have been given below.

    'adoRecSet.Filter = "FirstName = 'Jim' OR EmployeeID > 35"

    'adoRecSet.Filter = "FirstName LIKE 'J*'"

    'adoRecSet.Filter = "Surname LIKE '%a%'"'adoRecSet.Filter = "(FirstName = 'Jim' AND EmployeeID > 18) OR

    (Surname = 'Green' AND EmployeeID > 35)"

    adoRecSet.Filter = "(FirstName = 'Jim') OR (Surname = 'Green' AND

    EmployeeID > 35)"

    'Incorrect use of OR: you are not allowed to group clauses by the OR

    operator and then group these to another clause with the AND operator,

    in the following manner:

    'adoRecSet.Filter = "(FirstName = 'Sam') AND (FirstName = 'Jim' OR

    EmployeeID > 35)"

    adoRecSet.Open Source:="SalesManager", ActiveConnection:=connDB,

    CursorType:=adOpenKeyset, LockType:=adLockOptimistic 

    Do While Not adoRecSet.EOF

    MsgBox adoRecSet.Fields("FirstName") & " " &

    adoRecSet.Fields("Surname") & ", Employee Id:" &

    adoRecSet.Fields("EmployeeId")

    i = i + 1

    'on a match being found, the found record becomes the the

    current row position, and because the search starts from the

    current row, you must move to the next record to find the next

    match:

    adoRecSet.MoveNext

    Loop

    MsgBox "Records found: " & i

    '--------------

    'close the objects

    connDB.Close

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub 

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    16/18

    Example 8: Using ADO with SQL Statements to: Add, Delete

    and Modify Columns in an Existing Table; Add and Delete

    Constraints on Columns.Refer to Images 8a & 8b, as mentioned in the code.

     

    Image 8a

     

    Image 8b

     

    Sub automateAccessADO_8()

    'Using ADO with SQL Statements to: Add, Delete and Modify Columns in an

    Existing Table; Add and Delete Constraints on Columns.

    'To use ADO in your VBA project, you must add a reference to the ADO Object

    Library in Excel (your host application) by clicking Tools-References in VBE,

    and then choose an appropriate version of Microsoft ActiveX Data Objects x.x

    Library from the list.

    '--------------

    'DIM STATEMENTS

    Dim strMyPath As String, strDBName As String, strDB As String

    Dim strSQL As String

    'instantiate an ADO object using Dim with the New keyword:Dim adoRecSet As New ADODB.Recordset

    Dim connDB As New ADODB.Connection

    '--------------

    'THE CONNECTION OBJECT

    strDBName = "SalesReport.accdb"

    strMyPath = ThisWorkbook.Path

    strDB = strMyPath & "\" & strDBName

     

    'Connect to a data source:

    'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS

     Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For  Access 2007 (.accdb database) use the ACE Provider:

    "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the

     Access .mdb & .accdb files.

    connDB.Open ConnectionString:="Provider =

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    17/18

    Microsoft.ACE.OLEDB.12.0; data source=" & strDB

    '--------------

    'ADD, DELETE OR MODIFY COLUMNS IN AN EXISTING TABLE USING

    THE SQL 'ALTER TABLE' STATEMENT.

    'Refer Image 8a to view the SalesManager Table in MS Access file

    "SalesReport.accdb" before running below code

    'Run the ADO connection Execute method, to ALTER TABLE, without

    opening the recordset. SQL command ADD COLUMN adds a newcolumn at the end of the existing columns - in below code we are adding

    3 columns named Telephone, City & ZipCode.

    strSQL = "ALTER TABLE SalesManager ADD COLUMN Telephone

    char(15), COLUMN City Text(30), COLUMN ZipCode char(6)"

    connDB.Execute CommandText:=strSQL

    'modify/enter column values after opening recordset - refer Image 8b

    which shows table after entering values as below:

    strSQL = "SELECT * FROM SalesManager WHERE EmployeeId = 12"

    adoRecSet.Open Source:=strSQL, ActiveConnection:=connDB,

    CursorType:=adOpenDynamic, LockType:=adLockOptimistic

      With adoRecSet

    .Fields("Telephone") = "421-1234567"

    .Fields("City") = "New York"

    .Fields("ZipCode") = "10453"

    .Update

    End With

    adoRecSet.Close

    'Run the ADO connection Execute method, to ALTER TABLE, without

    opening the recordset.

    'delete the Telephone column in the SalesManager Table:

    strSQL = "ALTER TABLE SalesManager DROP COLUMN Telephone"

    connDB.Execute CommandText:=strSQL

    'change the data type of the ZipCode column in the SalesManager Table:

    strSQL = "ALTER TABLE SalesManager ALTER COLUMN ZipCode

    Long"

    connDB.Execute CommandText:=strSQL

    'delete the City & ZipCode columns in the SalesManager Table:

    strSQL = "ALTER TABLE SalesManager DROP COLUMN City, ZipCode"

    connDB.Execute CommandText:=strSQL

    '-------------

    'ADD AND DELETE CONSTRAINTS ON COLUMNS

    'add a PRIMARY KEY CONSTRAINT named 'pk_EI' for the column

    'EmployeeID' of the 'SalesManager' table:

    strSQL = "ALTER TABLE SalesManager ADD CONSTRAINT pk_EI

    PRIMARY KEY (EmployeeID)"

    connDB.Execute CommandText:=strSQL

     

    'drop the existing PRIMARY KEY CONSTRAINT named 'pk_EI' from the

    'SalesManager' table:

    strSQL = "ALTER TABLE SalesManager DROP CONSTRAINT pk_EI"connDB.Execute CommandText:=strSQL

    'add a UNIQUE CONSTRAINT named 'un_FN' for the column 'FirstName'

    of the 'SalesManager' table:

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...

    f 18 2/06/2014 7:45 PM

  • 8/9/2019 Microsoft Access_ Use ADO to Execute SQL Statements

    18/18

    strSQL = "ALTER TABLE SalesManager ADD CONSTRAINT un_FN

    UNIQUE (FirstName)"

    connDB.Execute CommandText:=strSQL

    'drop the existing CONSTRAINT named 'un_FN' from the 'SalesManager'

    table:

    strSQL = "ALTER TABLE SalesManager DROP CONSTRAINT un_FN"

    connDB.Execute CommandText:=strSQL

    '--------------

    'close the objects

    connDB.Close

    'destroy the variables

    Set adoRecSet = Nothing

    Set connDB = Nothing

    End Sub

     

    < Prev Next >

     

    Contact

     About Us

    Testimonials

     

     © 2014 GlobaliConnect.com. All rights reserved.

    ↑↑↑

    Monday, 02 June 2014 Template designed by LernVid.com

    rosoft Access: Use ADO to Execute SQL statements http://www.globaliconnect.com/excel/index.php?option=com_content...