<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Access Team Blog : Engine</title><link>http://blogs.msdn.com/access/archive/tags/Engine/default.aspx</link><description>Tags: Engine</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Beginners guide to ODBC</title><link>http://blogs.msdn.com/access/archive/2009/06/19/beginners-guide-to-odbc.aspx</link><pubDate>Fri, 19 Jun 2009 11:13:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9782786</guid><dc:creator>Clint Covington</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/access/comments/9782786.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9782786</wfw:commentRss><description>&lt;p&gt;The folks @ UtterAccess have produced an useful article titled &lt;a href="http://www.utteraccess.com/forums/showflat.php?Board=53&amp;amp;Number=1843709"&gt;The Beginner’s guide to ODBC&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is an attempt to equip the developers who want to use Access as a front-end client to any RDBMS (Relational DataBase Management System) backend (ie, SQL Server, DB/2, Oracle, MySQL, PostgreSQL) with the right questions to explore and ask during design and development. As we cannot cover every special case or all the nuisances that each developers must deal with, it is hoped that,by reading over this document, you will be better equipped to find the needed answers for your specific case. The article assumes that you are familiar with developing an Access application, understand the fundamentals of data types used in Jet and VBA and know basic SQL and is familiar with Data Access Objects (DAO) library and/or ActiveX Data Objects (ADO) library, but are otherwise new to working with ODBC data sources. The objective is to provide you with a set of questions about design and development and know how to ask them.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The first thing that you should be familiar with is potential issues that can crop up when developing against a RDBMS. This is, in no way, a complete list, but hopefully broad and high-level enough to give you an idea of where to start in investigating or anticipating any problems they that you may encounter in development.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9782786" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category></item><item><title>Accessing external data using the IN clause</title><link>http://blogs.msdn.com/access/archive/2009/03/27/accessing-external-data-using-the-in-clause.aspx</link><pubDate>Fri, 27 Mar 2009 13:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9510012</guid><dc:creator>robcooper</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/access/comments/9510012.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9510012</wfw:commentRss><description>&lt;P&gt;Someone sent us a question the other day about one of my favorite dark corners in Access and we thought it might be interesting to dive into this area a little.&lt;/P&gt;
&lt;P&gt;Microsoft Access SQL supports two uses of the IN keyword. The most commonly used case is as part of the WHERE clause of a SQL statement to provide a list of values used as criteria. Using the Customers table in the Northwind 2007 sample database as an example, this might look something like:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; [&lt;SPAN class=kwrd&gt;First&lt;/SPAN&gt; Name], [&lt;SPAN class=kwrd&gt;Last&lt;/SPAN&gt; Name], [&lt;SPAN class=kwrd&gt;State&lt;/SPAN&gt;/Province]
&lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; [Customers]
&lt;SPAN class=kwrd&gt;WHERE&lt;/SPAN&gt; [&lt;SPAN class=kwrd&gt;State&lt;/SPAN&gt;/Province] &lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; (&lt;SPAN class=str&gt;'WA'&lt;/SPAN&gt;, &lt;SPAN class=str&gt;'CA'&lt;/SPAN&gt;, &lt;SPAN class=str&gt;'NY'&lt;/SPAN&gt;)&lt;/PRE&gt;
&lt;P&gt;This query returns the names of customers that live in WA, CA, or NY. This keyword provides a nice alternative to the OR clause which would require repeating the field name.&lt;/P&gt;
&lt;P&gt;The other use of the IN keyword is as part of the SELECT statement or FROM clause, and is called the &lt;A href="http://msdn.microsoft.com/en-us/library/bb177907.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb177907.aspx"&gt;IN clause&lt;/A&gt;. The IN clause is used to access external data, and can be used in place of linked tables. For example, let's say that you had a SQL Server database that is used as part of an application, but you don't want to maintain a DSN to connect. You could use the IN clause in a query that uses a DSN-less connection to quickly read data from the external table. For example:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; * &lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; ExternalTable
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [ODBC;Driver={&lt;SPAN class=kwrd&gt;SQL&lt;/SPAN&gt; Server}; Server=ServerName; &lt;SPAN class=kwrd&gt;Database&lt;/SPAN&gt;=DatabaseName; Trusted_Connection=Yes]&lt;/PRE&gt;
&lt;P&gt;It is possible to create a linked table that uses a DSN-less connection, but creating the table requires code. Also, unlike a SQL pass-through query, this query is executed by the Access database engine which means that the resultset may also be updateable. Furthermore, there is a certain simplicity or elegance about this technique that I think is cool. Incidentally, there is another syntax for the IN clause, but I prefer this one.&lt;/P&gt;
&lt;P&gt;So far so good, but since the IN clause is part of the FROM clause of a query, it can also be used other places where the FROM clause can be used. For example, in a make table query to create a local copy of data in an external table:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; * &lt;SPAN class=kwrd&gt;INTO&lt;/SPAN&gt; LocalTable
&lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; SourceTable
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [ODBC;Driver={&lt;SPAN class=kwrd&gt;SQL&lt;/SPAN&gt; Server}; Server=ServerName; &lt;SPAN class=kwrd&gt;Database&lt;/SPAN&gt;=D&lt;SPAN class=kwrd&gt;atabaseName&lt;/SPAN&gt;; Trusted_Connection=Yes]&lt;/PRE&gt;
&lt;P&gt;Or, in an append query using the INSERT...INTO statement to move data from the local database into another database. Note that the connection string used in this example is to another Access database.&lt;/P&gt;&lt;PRE class=csharpcode&gt;INSERT &lt;SPAN class=kwrd&gt;INTO&lt;/SPAN&gt; DestinationTable (DestinationField)
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [;&lt;SPAN class=kwrd&gt;DATABASE&lt;/SPAN&gt;= C:\Users\Rob\Documents\Northwind 2007.accdb]
&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; SourceField &lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; SourceTable&lt;/PRE&gt;
&lt;P&gt;You could even use an append query with multiple IN clauses to concatenate two text files:&lt;/P&gt;&lt;PRE class=csharpcode&gt;INSERT INTO [File2.txt] (Field1)&lt;BR&gt;IN '' [TEXT; FMT=Delimited; HDR=YES; DATABASE= C:\Users\Rob\Documents;TABLE=File2.txt]&lt;BR&gt;SELECT Field1&lt;BR&gt;FROM [File1.txt]&lt;BR&gt;IN '' [TEXT; FMT=Delimited; HDR=YES; DATABASE= c:\Users\Rob\Documents;TABLE=File1.txt];&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;These are just a few examples of how you could use the IN clause to quickly work with external data. By using different connection strings for the external data sources, you could do some pretty cool stuff.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9510012" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2003/default.aspx">Access 2003</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>New Access 2007 Technical Article</title><link>http://blogs.msdn.com/access/archive/2008/08/20/new-access-2007-technical-article.aspx</link><pubDate>Wed, 20 Aug 2008 20:03:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8881584</guid><dc:creator>robcooper</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/access/comments/8881584.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=8881584</wfw:commentRss><description>&lt;p&gt;Aleksandar Jak&amp;#353;ić, who is one of the testers on our team, has written an article that shows you how you can use the Access Database Engine from native applications written in C/C++.&lt;/p&gt;  &lt;p&gt;The article shows you how to to the Access Database Engine using C or C++, but has a great discussion of the data stack used by Access and some of the different components of the engine. He also breaks down the different methods for accessing data using native technologies such as DAO, ADO, OLE DB, and ODBC. The article provides great insight about the engine and the mechanisms that are used to connect to it, regardless of whether you are writing native code.&lt;/p&gt;  &lt;p&gt;The article is available on MSDN:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Developing Access 2007 Solutions with Native C or C++&lt;/strong&gt;    &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/cc811599.aspx" href="http://msdn.microsoft.com/en-us/library/cc811599.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc811599.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8881584" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category></item><item><title>Adding multiple attachments from a folder</title><link>http://blogs.msdn.com/access/archive/2008/07/31/adding-multiple-attachments-from-a-folder.aspx</link><pubDate>Fri, 01 Aug 2008 00:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8795280</guid><dc:creator>James K. Rivera</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/access/comments/8795280.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=8795280</wfw:commentRss><description>&lt;P&gt;Rob Cooper recently made a post, &lt;A href="http://blogs.msdn.com/access/archive/2008/07/25/adding-attachments-from-a-folder.aspx" mce_href="http://blogs.msdn.com/access/archive/2008/07/25/adding-attachments-from-a-folder.aspx"&gt;Adding Attachments from a Folder&lt;/A&gt;, which shows how to add a single attachment file per row.&amp;nbsp; But what if you wanted to add more than one file?&amp;nbsp; One (highly contrived) scenario would be to add all of the files in a folder to one row, and do so recursively if requested, similar to Rob's example.&lt;/P&gt;
&lt;P&gt;What follows is some VBA code to do this, which borrows a bit from Rob's post and a bit from &lt;A href="http://blogs.msdn.com/access/archive/2007/08/24/adding-removing-and-saving-files-from-the-new-attachment-field-in-access-2007.aspx" mce_href="http://blogs.msdn.com/access/archive/2007/08/24/adding-removing-and-saving-files-from-the-new-attachment-field-in-access-2007.aspx"&gt;one of my earlier posts&lt;/A&gt;.&amp;nbsp; However, I should point out this (again, highly contrived scenario) is meant only as an example and not something I would recommend doing, because if you are adding more than just a few files you can (ok, WILL) bloat your database very quickly, and in doing so can negatively impact performance and potentially hit the two gigabyte file size limit very quickly (see &lt;A href="http://office.microsoft.com/en-us/access/HA100307391033.aspx" mce_href="http://office.microsoft.com/en-us/access/HA100307391033.aspx"&gt;Access 2007 Specifications&lt;/A&gt; for details on database file size and object limitations).&lt;/P&gt;
&lt;P&gt;First, to use the following sample code you will need to do some setup.&amp;nbsp; Create a new table, add the following fields, and save it as Table1:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Table1&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE class="" border=1 cellSpacing=0 cellPadding=2 width=400&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=200 align=middle&gt;&lt;STRONG&gt;Field Name&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=200 align=middle&gt;&lt;STRONG&gt;Data Type&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=200&gt;ID&lt;/TD&gt;
&lt;TD class="" vAlign=top width=200&gt;Autonumber (Primary Key)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=200&gt;FolderPath&lt;/TD&gt;
&lt;TD class="" vAlign=top width=200&gt;Text&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=200&gt;Files&lt;/TD&gt;
&lt;TD class="" vAlign=top width=200&gt;Attachment&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Addingmultipleattachmentsfromafolder_C2B4/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Addingmultipleattachmentsfromafolder_C2B4/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=image src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Addingmultipleattachmentsfromafolder_C2B4/image_thumb.png" width=244 height=80 mce_src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Addingmultipleattachmentsfromafolder_C2B4/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Next, open the VBE window (ALT+F11) and insert a new module (Insert -&amp;gt; Module), and paste in the following code:&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;' ------------------------------------------------------------------------- &lt;BR&gt;' Procedure : StoreFilesInTable &lt;BR&gt;' Purpose&amp;nbsp;&amp;nbsp; : Adds all files matching the specified file mask from the &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : specified folder to an attachment field. &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Each row in the represents all files stored from the folder. &lt;BR&gt;' Arguments : strFolder - The path to the folder stored in the attachment field. &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : strTable&amp;nbsp; - The name of the table containing the attachment field. &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : strPathField - The name of the field for the archived folder. &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : strAttachmentField - The name of the attachment field. [Files] &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : strPattern - File mask. [*.*] &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : blnIncludeSubfolders - Recurse into subfolders. [False] &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : db1 - The database to operate on.&amp;nbsp; [CurrentDb] &lt;BR&gt;' Comments&amp;nbsp; : The db1 param is included so this can be used to store files in &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : a separate database, since using the attachment field this way &lt;BR&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : can quickly push a database beyond the 2gb file size limit. &lt;BR&gt;' ------------------------------------------------------------------------- &lt;BR&gt;Public Function StoreFilesInTable( _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByVal strFolder As String, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByVal strTable As String, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByVal strPathField As String, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Optional ByVal strAttachmentField As String = "Files", _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Optional ByVal strPattern As String = "*.*", _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Optional ByVal blnIncludeSubfolders As Boolean = False, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Optional ByRef db1 As DAO.Database) &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Const CALLER = "StoreFilesInTable" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; On Error GoTo StoreFilesInTable_ErrorHandler &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim strFilePath As String &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rstParent&amp;nbsp;&amp;nbsp; As DAO.Recordset2 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rstChild&amp;nbsp;&amp;nbsp;&amp;nbsp; As DAO.Recordset2 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fldAttach&amp;nbsp;&amp;nbsp; As DAO.Field2 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' These objects require a reference to the "Microsoft Scripting Runtime" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' but are defined as "Object" instead to use late binding and avoid that. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' If you've added the reference, remove the "Object" and uncomment the &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' following lines to get the intellisense autocomplete for these objects. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim objFso&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As Object ' Scripting.FileSystemObject &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim objFolder&amp;nbsp;&amp;nbsp;&amp;nbsp; As Object ' Scripting.Folder &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim objSubFolder As Object ' Scripting.Folder &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim objFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As Object ' Scripting.File &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' If the user did not specify a database, use the current one. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If db1 Is Nothing Then Set db1 = Application.CurrentDb &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Instantiate the FileSystemObject. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objFso = CreateObject("Scripting.FileSystemObject") &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Make sure the folder path always ends with a "\". &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (Right(strFolder, 1) &amp;lt;&amp;gt; "\") Then strFolder = strFolder &amp;amp; "\" &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Make sure the folder exists. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not objFso.FolderExists(strFolder) Then &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox "Folder does not exist: " &amp;amp; strFolder, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vbExclamation, CALLER &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' It exists, so get the folder object. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objFolder = objFso.GetFolder(strFolder) &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Open the table containing the attachment field &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set rstParent = db1.OpenRecordset(strTable) &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstParent.AddNew &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstParent.Fields(strPathField).Value = objFolder.Path &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Get the first file in this directory. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strFilePath = Dir(strFolder &amp;amp; strPattern) &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Store each file that meets the pattern &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; While (Len(strFilePath) &amp;gt; 0) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set rstChild = rstParent.Fields(strAttachmentField).Value &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstChild.AddNew &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set fldAttach = rstChild.Fields("FileData") &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fldAttach.LoadFromFile strFolder &amp;amp; strFilePath &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstChild.Update &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstChild.Close &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strFilePath = Dir() ' Get the next file &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Commit the new row with the attachments field populated &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' with all of the files from the current folder. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstParent.Update &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Recurse into subfolders if requested. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (blnIncludeSubfolders) Then &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each objSubFolder In objFolder.SubFolders &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StoreFilesInTable objSubFolder.Path, strTable, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strPathField, strAttachmentField, _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strPattern, blnIncludeSubfolders, db1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;/P&gt;
&lt;P&gt;Cleanup: &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rstParent.Close &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set rstParent = Nothing &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Function &lt;BR&gt;StoreFilesInTable_ErrorHandler: &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.Print "Error # " &amp;amp; Err.Number &amp;amp; " in " &amp;amp; CALLER &amp;amp; " : " &amp;amp; Err.Description &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox Err.Description, vbCritical, "Error # " &amp;amp; Err.Number &amp;amp; " in " &amp;amp; CALLER &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GoTo Cleanup &lt;BR&gt;End Function 'StoreFilesInTable&lt;/P&gt;&lt;/CODE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is a short routine to help you test the above code.&amp;nbsp; You will need to change the "&lt;FONT size=2 face="Courier New"&gt;&amp;lt;&lt;EM&gt;YourUserName&lt;/EM&gt;&amp;gt;&lt;/FONT&gt;" to your login name, or just change the whole path in the &lt;FONT size=2 face="Courier New"&gt;strRootFolder&lt;/FONT&gt; string constant to the folder you want to store in the table.&amp;nbsp; Note that I've set the &lt;FONT size=2 face="Courier New"&gt;blnIncludeSubfolders&lt;/FONT&gt; parameter to &lt;FONT size=2 face="Courier New"&gt;False&lt;/FONT&gt; to keep you from inadvertently bloating your database, but you can set it to True if you want to include all of the subfolders, too.&lt;/P&gt;&lt;CODE&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;Sub TestStoreFilesInTable() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Const strRootFolder As String = "C:\Users\&lt;EM&gt;&amp;lt;YourUserName&amp;gt;&lt;/EM&gt;\Pictures\" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StoreFilesInTable strRootFolder, "Table1", "FolderPath", "Files", "*.jpg", False &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox "Done adding files from: " &amp;amp; vbCrLf &amp;amp; strRootFolder &amp;amp; "*.jpg", _ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VbMsgBoxStyle.vbInformation, "TestStoreFilesInTable" &lt;BR&gt;End Sub&lt;/FONT&gt;&lt;/P&gt;&lt;/CODE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8795280" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Attachment/default.aspx">Attachment</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category></item><item><title>Writing a Count(Distinct) Query in Access</title><link>http://blogs.msdn.com/access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx</link><pubDate>Thu, 20 Sep 2007 00:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5001623</guid><dc:creator>robcooper</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/access/comments/5001623.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=5001623</wfw:commentRss><description>&lt;P&gt;We received a question from a reader named Eric week before last about how to write a Count(Distinct) query in Access. In other database applications such as SQL Server, Oracle, and MySQL, the Count(Distinct) aggregate is used to count the number of unique items in a given rowset. For example, consider a table on SQL Server named tblColors, such as:&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class="" cellSpacing=0 bgColor=#ffffff border=1&gt;&lt;FONT face=Calibri color=#000000&gt;&lt;/FONT&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="" borderColor=#000000 bgColor=#c0c0c0&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Color&lt;/FONT&gt;&lt;/TH&gt;
&lt;TH class="" borderColor=#000000 bgColor=#c0c0c0&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Value&lt;/FONT&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Red&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;5&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Green&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;2&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Blue&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;8&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Orange&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Red&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;8&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Green&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;6&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Blue&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;2&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TFOOT&gt;&lt;/TFOOT&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;To get a count of the number of unique colors in the table, you could write a query such as:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;SELECT Count(Distinct Color) AS N FROM tblColors&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;This would return the value 4 as there are four unique colors in the Color field in the table. Unfortunately, the Access Database Engine does not support the Count(Distinct) aggregate. To return this value from an Access table, you would need to use a subquery such as:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;SELECT Count(*) AS N&lt;BR&gt;FROM &lt;BR&gt;(SELECT DISTINCT Color FROM tblColors) AS T;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;Now let's say that you also want to include another aggregate value such as a Sum, and want to group by some value, in this case, Color. On SQL Server, you could write this query as:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;SELECT Color, Sum(Value) AS Total, Count(Distinct Color) AS N&lt;BR&gt;FROM tblColors&lt;BR&gt;GROUP BY Color&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;This provides the following results:&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 bgColor=#ffffff border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="" borderColor=#000000 bgColor=#c0c0c0&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Color&lt;/FONT&gt;&lt;/TH&gt;
&lt;TH class="" borderColor=#000000 bgColor=#c0c0c0&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Total&lt;/FONT&gt;&lt;/TH&gt;
&lt;TH class=style1 borderColor=#000000 bgColor=#c0c0c0 class="style1"&gt;N&lt;/TH&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;Blue&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;10&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;SPAN class=style1&gt;G&lt;/SPAN&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;reen&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;8&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;SPAN class=style1&gt;O&lt;/SPAN&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;range&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR vAlign=top&gt;
&lt;TD class="" borderColor=#d0d7e5&gt;&lt;SPAN class=style1&gt;R&lt;/SPAN&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;ed&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;13&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class="" borderColor=#d0d7e5 align=right&gt;&lt;FONT style="FONT-SIZE: 11pt" face=Calibri color=#000000&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TFOOT&gt;&lt;/TFOOT&gt;&lt;/TABLE&gt;
&lt;P&gt;Now, if you're asking whether or not this should return the value of '1', the answer is yes. As I understand it, the Count(Distinct) here can be used as a test to verify the results of a given query.&lt;/P&gt;
&lt;P&gt;If your data is on a server that supports Count(Distinct), you might be able to use a pass-through query to retrieve the results. If you are working with Access data, this becomes a bit more challenging.&lt;/P&gt;
&lt;P&gt;Since we used subqueries for the previous query, we'll need to do the same here. The trick however is that we need to use two subqueries as shown in the following SQL:&lt;/P&gt;
&lt;P&gt;&lt;CODE&gt;SELECT C.Color, Sum(C.Value) AS Total, T2.N&lt;BR&gt;FROM&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT T.Color, Count(T.Color) AS N &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT DISTINCT Color, Count(*) AS N &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM tblColors GROUP BY Color) AS T &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GROUP BY T.Color) AS T2 &lt;BR&gt;INNER JOIN tblColors AS C&lt;BR&gt;ON T2.Color = C.Color&lt;BR&gt;GROUP BY C.Color, T2.N;&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;You'll recognize the inner-most subquery as the subquery we used in the initial problem. This is then rolled into the outer-most subquery to return the number of colors per group.&lt;/P&gt;
&lt;P&gt;Thanks to Eric for the question and to Michael Tucker on the Access test team for the help!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5001623" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Access Database Engine Redistributable</title><link>http://blogs.msdn.com/access/archive/2007/08/10/access-database-engine-redistributable.aspx</link><pubDate>Fri, 10 Aug 2007 04:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4316073</guid><dc:creator>Zac Woodall</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/access/comments/4316073.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=4316073</wfw:commentRss><description>&lt;P&gt;I was looking for this in search results today and realized that it isn't showing up in the rankings (or maybe it does, but the name isn't very intuitive).&amp;nbsp; The new Access 2007 database engine (which reads and writes .accdb files) is &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&amp;amp;displaylang=en"&gt;available in redistributable format&lt;/A&gt; for those who need to code against the file directly, bypassing Access/VBA.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4316073" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Download/default.aspx">Download</category></item><item><title>New, More Complete Access Overview</title><link>http://blogs.msdn.com/access/archive/2006/07/27/new-more-complete-access-overview.aspx</link><pubDate>Thu, 27 Jul 2006 14:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:680772</guid><dc:creator>Erik Rucker</dc:creator><slash:comments>22</slash:comments><comments>http://blogs.msdn.com/access/comments/680772.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=680772</wfw:commentRss><description>&lt;DIV class=Section3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Way back in October, I posted an overview of Access.&amp;nbsp; We've finally got a complete customer-ready overview for the product that will be going up on the Access site at &lt;A href="http://www.microsoft.com/access" mce_href="http://www.microsoft.com/access"&gt;http://www.microsoft.com/access&lt;/A&gt;.&amp;nbsp; If you'd like a printable version of this paper, it is available &lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/Microsoft%20Office%20Access%20Vision_Final.doc" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/Microsoft%20Office%20Access%20Vision_Final.doc"&gt;here&lt;/A&gt;.&amp;nbsp; This takes longer than you might imagine, so I thought I'd post it here as well.&amp;nbsp; Even though I understand many of you are looking for more technical details, this blog is fairly widely read and I know there are many who would like the high-level story.&amp;nbsp; We'll be back to the technical details in the next post.&lt;/P&gt;
&lt;DIV class=Section3&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180626 name=_Toc138180626&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Executive Summary&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%"&gt;Microsoft&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%"&gt; Office Access has achieved broad success by enabling information workers to perform data-tracking tasks that otherwise would require the time and expertise of professional programmers and database administrators. In addition, professional developers have found that Office Access can save time and meet business requirements for many applications. IT departments can take advantage of Access capabilities by providing support and management of the Access applications being developed in their organizations. Microsoft is making significant investments in Microsoft Office Access 2007, redesigning the user interface and interactive design tools to make them even more approachable to entry level Access users. Integration with Microsoft Windows&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%"&gt; SharePoint&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%"&gt; Services will make Office Access 2007 a great collaboration tool, while enabling the data to be stored on enterprise servers for better manageability.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana"&gt;&lt;BR clear=all&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;A class="" title=_Toc138180627 name=_Toc138180627&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Meeting the Varied Database Needs of an Organization&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;SPAN style="LINE-HEIGHT: 150%"&gt;Relational database technology has had an immense impact&lt;/SPAN&gt; on business in the few decades since it was first developed. The vast majority of business transactions are now recorded, tracked, and analyzed using data stored in relational systems. However, enterprise-level database applications, such as sales accounting, inventory control, and human resources management, represent only a portion of any organization’s total information management requirements.&lt;/P&gt;
&lt;P class=MsoNormal&gt;One way to categorize the data-tracking needs of an organization is according to the number of people who work with the data. Some information is used only by individuals, some is used by small work groups, some by entire departments, and some by larger cross-departmental groups within the organization or in the wider community of partners and customers. The need for data security often varies with the size of the group affected, although some individual or small-group applications can require stringent security.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Another key factor to consider is the impact of an interruption in the availability of the data. Some data needs to be reliably available at all times, and some data can intermittently become unavailable without significantly impacting the mission of the organization.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Microsoft Office Access can play a useful role in meeting a wide range of data-tracking requirements. In some cases, the scalability, availability, reliability, or security requirements may demand a server-based engine such as Microsoft SQL Server&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 150%"&gt;™&lt;/SPAN&gt;. However, even when the data is managed by a non-Access engine, Access forms, reports, and queries can still be useful and safe for creating user interfaces with the data.&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180628 name=_Toc138180628&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Broad Market Success&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;By meeting the needs of a large and diverse population of users, Microsoft Office Access has achieved greater acceptance in the marketplace than any other database product. Information workers with little or no formal training in programming or database design have been successful in using the wizards and graphical tools in Access to develop useful database applications.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&amp;nbsp;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/1%20-%202003%20Form.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/1%20-%202003%20Form.JPG"&gt;&lt;IMG height=221 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/1%20-%202003%20Form%20Thumb.JPG" width=188 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/1%20-%202003%20Form%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 1. Order form in Microsoft Office Access 2003&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Over 1.4 million Access database templates were downloaded from the Microsoft Office Online Web site, &lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://www.office.microsoft.com/" mce_href="http://www.office.microsoft.com/"&gt;www.office.microsoft.com&lt;/A&gt;, in 2004. The MSDN&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; Office Developer Center Access portal logged more than 3 million page views and downloads in 2004, averaging approximately 80,000 unique users per month. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;An independent Web site, &lt;A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="http://www.utteraccess.com/" mce_href="http://www.utteraccess.com/"&gt;www.utteraccess.com&lt;/A&gt;, which provides forums supporting Access, has registered over 90,000 members and has logged over 800,000 posts. On an average day, the Utteraccess.com site records over 500,000 page views, 100 new registered users, and 1,000 new posts.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;A study of small and midsize companies conducted by Crestwood Associates in August 2004, found Access to be the leading database program, with 22 percent of respondents reporting that they used applications built with Microsoft Office Access. This study found that Access was used more than twice as much as the second-place product.&lt;/P&gt;
&lt;H3&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;From Lists to Relational Databases&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Automated spreadsheet applications such as the Microsoft Office Excel&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; spreadsheet software have existed since the beginning of the personal computer to meet the very common need for information workers to visualize and manipulate tabular data. Modern Web-based collaborative applications such as Windows SharePoint Services also support the creation of custom lists that can be created and maintained using browser-based interfaces. Office Excel provides more extensive calculation and charting capabilities, while Windows SharePoint Services makes it easier to share data across teams. Neither product, however, provides the advantages of true relational database storage. For example, set-based relational queries or bulk updates are not directly supported.&lt;/P&gt;
&lt;P class=MsoNormal&gt;As a list-based application becomes more complex, the need emerges to transfer the data to normalized relational tables that can then be queried and manipulated using Structured Query Language (SQL).&lt;/P&gt;
&lt;P class=MsoNormal&gt;When lists evolve to relational data, Office Access enables information workers to quickly establish a database application to track the information with increased efficiency. Several dozen database templates are available from Office Online to provide models for solving common data-tracking tasks. In addition, Access includes wizards and friendly user interface features to ease the creation of relational data structures and the queries, forms, and reports needed to work with the data.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/2%20-%202007%20Form.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/2%20-%202007%20Form.JPG"&gt;&lt;IMG height=227 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/2%20-%202007%20Form%20Thumb.JPG" width=283 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/2%20-%202007%20Form%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 2. New user interface for Office Access 2007&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Microsoft Office Access 2007 has been completely redesigned since Office Access 2003 to further improve the ease of use for information workers who have no coding expertise and very limited database knowledge. The user interface is results-oriented and context-sensitive to expose the features the user needs at the right time. Furthermore, new pre-built solutions (templates) are available and are easily accessible at startup.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138180630 name=_Toc138180630&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Microsoft Office Access, SQL Server, Visual Studio, and the .NET Framework&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal&gt;Microsoft offers a range of products that enable organizations to solve problems by entering, manipulating, and querying relational data. These products include the database engines that directly store and retrieve data, as well as application development tools that enable users to interact with the database engines.&lt;/P&gt;
&lt;P class=MsoNormal&gt;Microsoft Office Access uses a database engine that can store data directly and that can also mediate storage and retrieval of data using other database engines, including Microsoft SQL Server. The Access application development tools can be used either with the Access database engine or directly with the SQL Server database engine.&lt;/P&gt;
&lt;P class=MsoNormal&gt;For most database applications that are used only by individuals or small workgroups, Microsoft Office Access and its database engine can provide valuable solutions while keeping the cost of development low. Users can often solve data-tracking problems using Access, without requiring professional technical support. However, professional design reviews and occasional consultation can significantly improve the quality of Access solutions. For applications requiring greater scalability, availability, or security, SQL Server is an alternative to the built-in database engine of Access for data storage, although Access can still be used to develop user interface objects. &lt;/P&gt;
&lt;P class=MsoNormal&gt;For applications that require a multi-tiered or service oriented architecture, or that require an HTML-based user interface, the Microsoft Visual Studio&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; development system and the Microsoft .NET Framework may be preferred. The .NET Framework is an integral component of the Microsoft Windows operating system that provides a programming model and runtime for Web services, Web applications, and smart client applications.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Office Access allows problems to be solved relatively quickly and effectively by users who understand the problems well, but who often do not have the resources or the time to develop a more extensively architected and engineered solution.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138559780 name=_Toc138559780&gt;&lt;/A&gt;Case Study: Tracking Product Inspections with Microsoft Office Access&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Ken Stewart is the Chief Financial Officer at a company that supplies linens to restaurants and medical clinics. The company has about 150 employees, four of whom work in the accounting department tracking the company’s data. Until two years ago, quality control inspectors were using Excel spreadsheets to record and tally the results of their daily product inspections. They were creating new spreadsheets for each day’s data, recording the number of rejected products and the operators who had worked on them. The accounting department found these spreadsheets hard to summarize into useful reports and noticed that it was easy for the inspectors to make invalid entries in the spreadsheets.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Stewart decided to try using Microsoft Office Access to create a better system, and although he had no prior programming experience, he was able to put together an Access application that solved the problems the accounting department was having. The solution is still in use today. He created data entry forms that helped users ensure that all the required data was entered and formatted properly, and he built reports that summarized the data in useful ways. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Stewart used less than an hour of a consultant’s time to help him organize the data properly into several related tables, and he found that he could create the queries, forms, and reports he needed by using the Access wizards and then modifying a few properties in the graphical designers. When Stewart got stuck trying to do something he couldn’t find explained in the Access help topics, he used Internet searches to locate examples from others who had solved similar problems. He is now considering setting up another Access application to help with the company’s hiring process.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138180631 name=_Toc138180631&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;How Office Access Empowers Information Workers&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Microsoft Office Access provides a highly integrated set of tools that can be used together to create tables for data storage, links to external data sources, queries for retrieving and manipulating data, forms for data entry, reports for aggregating and analyzing data, macros to automate common tasks, and Microsoft Visual Basic&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; for Applications (VBA) code for creating advanced customizations. The following sections give an overview of how these Access objects enable users to meet their business requirements, and how Microsoft is enhancing these objects for Office Access 2007.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138559782 name=_Toc138559782&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Native and Linked Tables&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access supports two fundamentally different ways of creating database tables. Users can create new tables in an Access database, or they can create links to existing data. These links appear and behave just like native tables. This support for creation of linked tables is key to the tremendous ease with which Access users can navigate, combine, and update information from multiple existing data sources, while still being able to create and maintain their own new data containers.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;The Access database engine can work with its own native tables or with tables it links to using Open Database Connectivity (ODBC) or installable index sequential access method (ISAM) drivers. ODBC provides connectivity to all the common relational database servers, including Microsoft SQL Server, Oracle, IBM DB2, Informix, and Sybase. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access project files, also called ADPs or .adp files, provide an alternative to using the Access database engine by allowing an Access application to connect directly to the tables in a SQL Server database. ADPs will continue to be supported in Office Access 2007. To take maximum advantage of the new features in Office Access 2007, Microsoft recommends the use of linked tables to connect to SQL Server data.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;When Access was introduced, installable ISAM drivers were used primarily for linking to the prevailing desktop databases&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;Paradox, dBase and FoxPro&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;or to data in Lotus and Excel spreadsheets. Since then, drivers were added to connect to Microsoft Exchange Server data and to HTML tables. In addition, ODBC support helps connect to many corporate database systems, such as accounting systems, Human Resources (HR), sales, and more.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;In Access 2003, a significant advance occurred when Microsoft introduced drivers that connect to data stored in Windows SharePoint Services. This was significant because these drivers call a component that sends and receives SOAP messages to the Web Services interfaces in Windows SharePoint Services. By enabling users to link to SharePoint lists, Access allows queries, forms, and reports to treat SharePoint lists as if they were standard relational tables.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;In Office Access 2007, Access will move from using the Jet database engine (currently part of Windows) to a version that will be completely under the control of the Access development team. The standard Jet database engine will continue to be available for applications that need it, but the new Access database engine&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;which will be 100 percent backward compatible with Jet&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;will add Access-specific features. These features will include new capabilities that will enhance compatibility between Access and Windows SharePoint Services. In addition to linking to data in Windows SharePoint Services as they do now, Access users will be able to take this data offline in a local Access database, work with the data locally, and then reconnect to the SharePoint site to upload any changes. Any conflicting data changes made by other users will be handled by a conflict resolution wizard.&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180632 name=_Toc138180632&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Tables in Office Access 2007&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Office Access 2007 will make the creation of native Access tables more intuitive, especially for users who are familiar with Excel. In fact, users will be able to copy and paste a range of cells from Excel into Access and have the table schema inferred automatically. Office Access 2007 will also enhance the grid-like datasheet view with new filtering, sorting, and totaling features.&lt;/P&gt;
&lt;H2 style="MARGIN-TOP: 6pt; LINE-HEIGHT: 150%"&gt;&lt;IMG height=95 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/3%20-%20Table.JPG" width=532 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/3%20-%20Table.JPG"&gt;&lt;/H2&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 3. Excel-like experience for Access tables&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138559784 name=_Toc138559784&gt;&lt;/A&gt;Data Entry Forms&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access forms are unique in the way they intuitively support data operations. Record selectors, navigation buttons, multicolumn combo boxes and list boxes, as well as a rich set of data-oriented controls, properties, and events, make it very fast and easy for information workers and developers to create full-featured user interfaces for data entry. Unlike other forms packages that focus on easing the creation of Win32&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; Windows applications and controls, with data binding requiring separate objects, Access forms provide an abstraction layer that is directly related to the underlying data.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Office Access 2007 features a new what-you-see-is-what-you-get (WYSIWYG) forms design interface. Users can design and modify the form layout in real time with live data on the screen—and preview the form as they build it. The new release will also introduce a new split view in which one part of the form will show a series of rows and the other part will show all the details from the selected row.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Office Access 2007 will include new controls for entering and displaying rich text and for selection of dates from a drop-down calendar. It also introduces a new method of data collection based on integration with the Microsoft Office InfoPath&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; information gathering program or HTML forms sent out in e-mails. When completed forms are received by return e-mail messages, the data is automatically entered into Access tables.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/4%20-%20Data%20Collection.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/4%20-%20Data%20Collection.JPG"&gt;&lt;IMG height=237 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/4%20-%20Data%20Collection%20Thumb.JPG" width=242 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/4%20-%20Data%20Collection%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 4. E-mail data collection&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138559785 name=_Toc138559785&gt;&lt;/A&gt;Reports&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Perhaps the most well-known feature in Access is its wizard-supported reporting engine. Access uses a “banded” reporting model that enables easy creation of reports with nested levels of grouping, sorting, and totaling. The report designer is similar to the form designer, with graphical tools that allow reports to be created by dragging and dropping fields from the selected data source.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Office Access 2007 will debut dramatic improvements to the report design experience by introducing a completely new Layout view for reports (and for forms, too). In Layout view, the live data will appear while the report is being designed, and it will be much easier to move and resize blocks of data, with the results immediately visible. Selecting data for the report will also be easier, with related tables becoming available for selection automatically after an initial table is chosen. The user interface for specifying grouping and sorting will be significantly improved as well.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/5%20-%20Report%20dib.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/5%20-%20Report%20dib.JPG"&gt;&lt;IMG height=253 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/5%20-%20Report%20dib%20Thumb.JPG" width=332 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/5%20-%20Report%20dib%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 5. WYSIWYG report editing&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Another innovation in Office Access 2007 will be the ability to re-run a wizard to modify an existing report instead of requiring users to start from scratch each time they run the wizard. Microsoft expects that many new Access users will discover the power of Access reporting and will quickly become proficient. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;IMG height=123 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/6%20-%20Grouping.JPG" width=327 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/6%20-%20Grouping.JPG"&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 6. Group, sort, and total pane&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138559786 name=_Toc138559786&gt;&lt;/A&gt;Queries&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;As a true relational database management system, Access includes a query processor that efficiently executes commands written in Structured Query Language (SQL). In addition, Access provides a variety of wizards and graphical tools that enable untrained information workers to construct and make use of these queries. In fact, fully functional applications handling data entry and reporting can be created by users with no knowledge of SQL. A graphical drag-and-drop query designer allows users to combine data from multiple tables, including linked tables, and from other saved queries. By setting properties or running wizards, users can easily create complex queries that calculate totals and averages, apply multiple criteria and sorts, pivot data, find top values or unmatched values, and perform updates, inserts, and deletions. In addition, users can create parameterized queries that use criteria based on values supplied at run time, including values automatically picked up from Access forms.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access builds and executes many types of queries in the background without users even realizing that queries are being created. For example, reports run multiple queries to create nested groupings, subtotals, and totals. Forms automatically generate update, insert, and delete queries as data operations are performed. Sub-forms automatically filter the displayed records or add missing values to new records, based on data displayed in the main form in which the sub-form has been embedded. Lookup Wizards create queries that display related data from another table when data in the main table is viewed. These are all tasks that require skilled query construction in other development environments. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;By enabling users to view the SQL code that is created by the wizards and graphical tools, Access also provides excellent opportunities for learning SQL. For experienced SQL coders, advanced techniques such as outer joins and correlated sub-queries are fully supported.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;In Office Access 2007, new processing capabilities combined with new options in the Lookup Wizard will enable users to easily display and update data based on many-to-many joins without needing to understand the underlying table and query structures. For example, users will be able to assign multiple people to a task or multiple tasks to a person after creating only two tables, one for people and one for tasks. In the background, Access will automatically create the additional junction table needed to store pairings of people and tasks and the queries needed to retrieve and store the data. A new drop-down list control with check boxes permitting multiple selections will facilitate data entry. In addition, users will easily be able to create append-only columns that allow them to add a series of date-stamped comments to what appears to be a single memo field. The multiple entries will be stored in the background, in a separate table from which they can be filtered and sorted as needed. A similar new data structure will be used to store file streams efficiently as one or more attachments to database rows.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/8%20-%20MultiValue%20Fields.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/8%20-%20MultiValue%20Fields.JPG"&gt;&lt;IMG height=234 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/8%20-%20MultiValue%20Fields%20Thumb.JPG" width=290 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/8%20-%20MultiValue%20Fields%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 7. Multi-value fields&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138559787 name=_Toc138559787&gt;&lt;/A&gt;Macros&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access macros are created in a declarative programming environment that does not require writing any code. Access provides a set of parameterized macro actions for performing common operations, such as opening forms and reports, executing queries, finding records, or importing and exporting data. Users build macros by selecting from lists of options, and Access macros can include conditional branching logic. Macros can be set to run automatically in response to a wide range of user behaviors.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;In Office Access 2007, macros will be significantly enhanced with features that previously were available only when programming with VBA code. These enhancements include better support for error handling and debugging, as well as the ability to assign values to variables. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;It will be possible to build full-featured Access applications that run even with all VBA code disabled and which, therefore, can be safely e-mailed or downloaded. In fact none of the templates that will ship with Office Access 2007 will contain VBA code. This code-free option will be supported by new macro actions and also by new user interface features. For example, it will be possible to configure a combo box to allow users to add new items to the drop-down list by automatically opening a designated dialog form and then requerying the list when a new item is entered&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;all without needing to create any VBA code.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&lt;IMG height=141 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/9%20-%20Macro%20Ribbon.JPG" width=467 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/9%20-%20Macro%20Ribbon.JPG"&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 8. Macro design in Access 2007&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138559788 name=_Toc138559788&gt;&lt;/A&gt;Modules&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;For advanced customization, Access fully supports the use of VBA functions and subroutines. Functions can be called from Access queries to perform complex data processing, and VBA event procedures can run automatically in response to user actions. In many cases, even non-technical Access users can create useful code by running Access wizards or by copying and pasting from the many examples available in books, magazines, and online forums.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;The primary application programming interface (API) for working with the Microsoft Jet database engine from code is Data Access Object (DAO). In Office Access 2007, new objects, properties, and methods will be added to DAO to support the new features in the Access database engine. For example, multi-valued fields created using the new Lookup Wizard will be accessible from code as DAO recordsets.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;In Office Access 2007, programmers will also have the option of enhancing their Access applications with add-ins and smart panes based on managed Microsoft .NET code. A primary interop assembly (PIA) for Access, as well as one for DAO, will enable managed code running in these add-ins and smart panes to manipulate Access user interface objects and Access data.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Office Access as a Developer Tool&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access is most notable in how it enables information workers to build applications that otherwise would require a professional developer. However, Access is also used by many professional developers, including many who are also trained to use more advanced programming tools, such as Visual Studio. These developers, and their clients, have found that for many database applications, Access can get the job done faster and therefore less expensively, while fully meeting the requirements. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access is not suitable for every task. For example, Access provides only very limited tools for building Web applications. Also, Access does not easily support the development of multi-tiered or service-oriented application architectures composed of loosely coupled components, or applications that need to be built and maintained by large teams of programmers. The typical Access application is created by a single developer and is architected as a relatively monolithic solution that intermixes user interfaces, business logic, and data access. Applications that must support large populations of users, or that require very high levels of reliability or security are usually not good candidates for development in Access. However a very large number of business applications do not have these requirements.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138180634 name=_Toc138180634&gt;&lt;/A&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 150%"&gt;&lt;FONT face=Verdana color=#ff6600&gt;Case Study: Developing Applications Quickly with Microsoft Office Access&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 150%"&gt;&lt;FONT face=Verdana color=#ff6600&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;John Brennecke is Senior Project Manager in the Customer Service and Distribution department of a biotechnology company with over 8,000 employees. Brennecke’s department is responsible for monitoring corporate and customer inventories to ensure that patients have an uninterrupted supply of the company’s products. Brennecke described why the developers in his department often turn to Access:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“Access is used for projects with little or no budget—‘drive-by’ projects that can be developed by one person in no more than a few weeks. These smaller projects are able to be approved by lower- or mid-level managers without the usual lengthy approval process. We can respond to requests for quick-turnaround reporting or process-monitoring. Usually with minimal red-tape and no extensive design phase.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Brennecke’s department uses Access to link to the company’s Oracle data warehouse and to Electronic Data Interchange (EDI) data received from customers. Using VBA, staff members also import data from external sources that are exposed over Web services. In addition, Brennecke values the ability of Access to exchange data with other Office applications. The department often uses Access applications to export data to Excel to create charts for executives. Department members can also automatically create e-mail messages in the Microsoft Office Outlook&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt; messaging and collaboration client that are sent to customers.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;When asked how the role of Access at his company has evolved, Brennecke reports, “Access has become more popular in recent years. Everyone is realizing how fast application development can occur with Access and how cleanly the finished app performs. Other departments are beginning to take notice and are asking to hire Access consultants for their projects.”&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180635 name=_Toc138180635&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Microsoft Office Access and &lt;/SPAN&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Enterprise IT&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138180636 name=_Toc138180636&gt;&lt;/A&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 150%"&gt;&lt;FONT face=Verdana color=#ff6600&gt;Case Study: Streamlining Application Development&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Peter Mullen is Manager of Application Development in the corporate services department of a Fortune 500 insurance company with almost 50,000 employees and over 500 offices in 120 countries. Following a major acquisition, the company undertook a reorganization that involved centralizing its data management. Mullen, who had some experience working with Microsoft Office Access, started exploring the ways that Access database applications were being deployed across the enterprise. He was stunned to learn how pervasively Access was being used. Mullen says, “Access was all over the place doing so many things that it blew my mind. Once I became known as ‘The Access Guy’ there were people all over the company who wanted my time.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Not surprisingly, the quality of the Access applications Mullen discovered was quite variable. To Mullen’s trained eye, some were in fact very poorly designed, and yet they were getting the job done. Mullen also found positions hidden in the payroll in the field that consisted essentially of supporting a small number of departmental Access applications.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Mullen and his manager put together a presentation for the Chief Information Officer (CIO), proposing that the IT department begin formally supporting Access development at the company. They outlined a strategy for centralizing and rationalizing management of the Access applications that were evolving under the radar of their traditional portfolio management. The CIO saw the value in this proposal right away, and Mullen became the lead developer of a new group that was formed for this purpose. Mullen’s group created and nurtured the use of naming standards, coding standards, and standard methodologies. They also were able to reduce headcount in the field as support activities were centralized.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Mullen reports that after about two years, “We had standard code; we had about 200 applications, and we were handling it. We started to rationalize our portfolio and really started to communicate exactly what we were doing to IT. This was the key point&lt;SPAN style="FONT-FAMILY: Symbol"&gt;¾&lt;/SPAN&gt;that a lot of people in the organization started to see what we were really about. These were complicated problems being solved without spending a lot of money.” As more people in the IT organization learned of the success of Mullen’s group, he began to receive requests for “bolt-on applications, small department tracking projects, and proofs of concept. We hit a few of these and we had a real perceived value to the organization.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Mullen summarizes what he’s learned about the optimal role of Access in the enterprise as follows:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“Access development in corporate organizations is simply a reality. People in the business are constantly looking for ways to add value to their customers and to free up their staff from mundane chores using automation that is inexpensive and easily accomplished. This is the strength of Access. The problem, from an IT perspective, is that the business comes to depend on products created without any IT involvement. Someone—usually an outsider or a low-level employee—becomes vital to the support of the product. So the question for IT becomes, ‘Will we provide support for this process?’ In my experience, providing an organized group that can create and support Access applications is a solid investment. It adds real and perceived value to the business and prevents a whole portfolio of applications from being developed under the radar of IT.” &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;&amp;nbsp;Mullen continues, “IT usually looks at all of the Access applications that are developed in the field as problems to be eliminated. I look at them and I see opportunity. Applications developed in the field are sometimes things that should never have been created; yet often they are products that are highly valued and fill a real need. By treating field applications (which most often means Access) with respect, and providing support and portfolio management, you can sometimes find patterns of demand in your organization and help drive real IT value back to the business.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Mullen is now working with the Architecture Team in his organization to identify candidates for migration to SQL Server and .NET applications. Mullen says, “Much of our portfolio will remain in Access, but some will migrate. There will always be a need for those quick and inexpensive solutions. The important thing is to keep track of these applications. They are the fingertips of your IT organization.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Market research by Microsoft indicates that fewer than 5 percent of all Access applications developed in large enterprises have requirements that justify moving the data from a Jet database to SQL Server, and fewer than 1 percent require migrating the forms, reports, and code to a .NET-based solution.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Access developers, administrators, and users now have a new toolkit to aid them in analyzing Access 97 databases for upgrade and conversion to Access 2003. Users can take advantage of the tools in the Access 2003 Conversion Toolkit to find and analyze databases in preparation for switching to Access 2003. For upgrading to the 2007 release, Microsoft plans to release the Microsoft Office Migration Planning Manager.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;IMG height=308 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/10%20-%20ACT%202003.JPG" width=409 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/10%20-%20ACT%202003.JPG"&gt;&lt;/H2&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 9. Access 2003 conversion toolkit&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138180637 name=_Toc138180637&gt;&lt;/A&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 150%"&gt;&lt;FONT face=Verdana color=#ff6600&gt;Case Study: Using Access to Manage the Small Databases of a Large &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=StyleMS2-Heading210ptChar&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 150%"&gt;&lt;FONT face=Verdana color=#ff6600&gt;Company&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Dave Corbridge works as an Information Services Manager for an aerospace manufacturer with 14,000 employees. Corbridge reports, “About 10 years ago, we created an Access programming group within the IT department to help meet the needs of the company for small databases. As the needs grew, so did our little group until we had six people programming full time in Access. All of us came from the user community instead of from within IT. Our programs cover such things as keeping track of tickets sold for a company party, tracking the shelf life of various materials used in our processes, expense reporting, and printing acceptance tags for parts. Some of our applications incorporate other parts of the Office suite such as Word, Excel, or [Microsoft Office] PowerPoint&lt;SPAN style="FONT-SIZE: 6pt; LINE-HEIGHT: 150%"&gt;®&lt;/SPAN&gt;. A sister company that recently joined us has been using Access for several years to run queries and pull reports from accounting data stored in Oracle. We’ve considered moving away from Access to use .NET Windows Forms and SQL Server, but we have been slow to change because nothing has been able to compare with Access for quick development while providing a full-featured front end that is easy for our customers to use.”&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;Corbridge’s department has considered the argument that users should be discouraged from creating Access applications and should instead work with the IT department to get professionally developed solutions. Corbridge gives four reasons why his department has decided to stick with Access:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“First, we don’t have the manpower to do all of the small database work in the company. Many of these are one- or two-user databases. If the users can do it themselves, why tie up our limited resources?&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“Second, there are only a few applications that outgrow the users’ abilities and need to be passed on to the IT department. These applications may not be normalized and the programming poorly done, but there still has been a lot of groundwork that we can take advantage of in moving the application to the next level. This is generally better than having to start with nothing.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“Third, when we need to bring additional people into the Access programming group, these people will probably come from our power users who have been using Access on their own. Allowing users to do the small stuff helps us ‘grow’ our future full-time Access programmers.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-TOP: 6pt"&gt;“And, fourth, if 97 percent of users’ databases fit a light and agile Access requirement, why tie up the big guns (our Java, .NET, and C programmers) to do these small jobs?”&lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180638 name=_Toc138180638&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Access 2007 and Windows SharePoint Services&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=Bodytext&gt;With Access 2007, users can easily move data from a local database file to a server with Windows SharePoint Services, which the organization’s IT professionals can manage, secure, and back up according to the organization’s policies. &lt;/P&gt;
&lt;P class=Bodytext&gt;By running Office Access 2007 on a SharePoint site, users gain new data auditing capabilities. &lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc138559795 name=_Toc138559795&gt;&lt;/A&gt;Revision History&lt;/H3&gt;
&lt;P class=Bodytext&gt;New functionality enables users to track records and see who created, edited, and deleted records. Users can also easily view when the information was modified.&lt;/P&gt;
&lt;P class=ScreenShot style="TEXT-ALIGN: left" align=left&gt;&lt;A href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/11%20-%20Version%20History.JPG" mce_href="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/11%20-%20Version%20History.JPG"&gt;&lt;IMG height=279 src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/11%20-%20Version%20History%20Thumb.JPG" width=399 border=0 mce_src="http://clintc.officeisp.net/Blogs/2006/37%20-%20Mors%20Doc/11%20-%20Version%20History%20Thumb.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 0px"&gt;&lt;I&gt;(Click image to enlarge)&lt;/I&gt;&lt;/P&gt;
&lt;P class=MS2-Tableheadings&gt;Figure 10. Office Access 2007 on a SharePoint site&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc122859708 name=_Toc122859708&gt;&lt;/A&gt;Permission Setting&lt;/H3&gt;
&lt;P class=Bodytext&gt;Using Windows SharePoint Services, users can manage who has access to data. Users can assign limited reading permissions or full editing rights.&lt;/P&gt;
&lt;H3&gt;&lt;A class="" title=_Toc122859709 name=_Toc122859709&gt;&lt;/A&gt;Recycle Bin&lt;/H3&gt;
&lt;P class=Bodytext&gt;Users can now recover data that was erroneously deleted thanks to the Recycle Bin feature in Windows SharePoint Services. &lt;/P&gt;
&lt;H2&gt;&lt;A class="" title=_Toc138180639 name=_Toc138180639&gt;&lt;/A&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;Office Access is a Strategic Microsoft Product&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MS2-bodycopy style="MARGIN-TOP: 6pt"&gt;Microsoft believes strongly in the strategic importance of continued investment in Access and the Access database engine. Access addresses a class of users who would never use Visual Studio and developers who can help empower and support those users. The Access database engine, with its versatile ability to connect to multiple diverse data sources and its powerful client-side query processor, fills a need that is distinct from SQL Server and SQL Server Express. Also, as a tool for creating rich Windows-based forms and reports bound to Windows SharePoint Services data, Access can add significant value to the Web-based capabilities of Windows SharePoint Services. The Web services–based technology that Access uses to connect to Windows SharePoint Services is a promising harbinger of how Access will be able to add value to other emerging service-oriented data sources. For these reasons, Microsoft sees a bright future for Access and will continue to invest strongly in its continued growth. &lt;/P&gt;
&lt;P class=MS2-bodycopy style="MARGIN-TOP: 6pt"&gt;To meet these new challenges, Microsoft Office has evolved from a suite of personal productivity products to a more comprehensive and integrated system of programs, servers, services, and solutions. Building on the familiar programs many people already know, the Microsoft Office system is a set of tools designed to work together to address a broad array of information worker problems. Microsoft is extending its commitment to ensure that individuals, their teams, and entire organizations can transform the full range of their data storage and data tracking into real business value.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=680772" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Access 2007 Limits</title><link>http://blogs.msdn.com/access/archive/2006/06/05/access-2007-limits.aspx</link><pubDate>Mon, 05 Jun 2006 17:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:618366</guid><dc:creator>Erik Rucker</dc:creator><slash:comments>39</slash:comments><comments>http://blogs.msdn.com/access/comments/618366.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=618366</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;This is a quick post to lay out the limits in Access 2007 and make a little clearer how the application works and how it scales.&amp;nbsp; The first table below shows the limits of the database engine itself.&amp;nbsp; &lt;/P&gt;
&lt;TABLE class=MsoTableGrid id=table1 style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 41.75pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Access Database Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Access database (*.mdb or *.accdb) file size&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2 gigabytes, including all objects in the database (data, forms, reports, indices, macros, modules, etc.)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Total number of concurrent users&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255.&amp;nbsp; Note that the practical limit will likely be lower than this based on database design.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Table Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of tables&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;This is governed by a limit on the number of objects in the database, which includes tables, forms, reports, queries, etc.&amp;nbsp; The limit on DB objects is 32,768.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Table size&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2 gigabytes, less the space needed for system objects&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a table name&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;64&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a field name&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;64&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of fields in a table&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of open tables&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2048&amp;nbsp; Note that this includes internal tables opened by Access.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a text field&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a memo field&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;65,535 when text is entered through the UI&lt;/P&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1 gigabyte if text is entered programmatically&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Size of an OLE Object field&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1 gigabyte&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of indexes on a table&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;32&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of fields in an index or primary key&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;10&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a validation rule&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2048&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a validation message&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a record (excluding Memo and OLE Object fields) when the &lt;B&gt;UnicodeCompression&lt;/B&gt; property is set to &lt;B&gt;Yes&lt;/B&gt;.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;4,000&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a field property setting&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoBodyText mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In addition, Access applications themselves have a number of limits, including:&lt;/P&gt;
&lt;TABLE class=MsoTableGrid id=table2 style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 41.75pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1 class="MsoTableGrid"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Access Database Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of objects in a database&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;32,768&amp;nbsp; Note that this includes tables, forms, reports, queries, macros, modules, indices, and internal objects used by Access.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in an object name&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;64&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a password&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a user name or group name&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;20&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Table Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of open tables&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2048&amp;nbsp; Note that this includes linked tables as well as local ones, and that the number may be somewhat lower due to internal tables opened by Access.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Query Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of enforced relationships&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;32 per table, minus the number of indexes that are on the table for fields or combinations of fields that are not involved in relationships&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of tables in a query&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;32&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of fields in a recordset returned by a query&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Maximum recordset size&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1 gigabyte&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Sort limit&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255 characters in one or more fields&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of levels of nested queries&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;50&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a cell in the query design grid&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1,024&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a parameter in&amp;nbsp; a parameterized query&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of &lt;B&gt;AND&lt;/B&gt;s in a &lt;B&gt;WHERE&lt;/B&gt; or &lt;B&gt;HAVING&lt;/B&gt; clause&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;99&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a SQL statement&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;Approx 64,000&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Form &amp;amp; Report Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a label&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;2,048&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a text box&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;65,535&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Form or report width&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;22 inches (55.87cm)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Section height&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;22 inches (55.87cm)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Height of all sections, plus section headers in design view.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;200 inches (508 cm)&amp;nbsp; Note an actual report can be arbitrarily long once the data has expanded.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of levels of nested forms or reports&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of fields or expressions that can be sorted or grouped in a report&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;10&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of headers or footers in a report&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1 report header / footer&lt;/P&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1 page header / footer&lt;/P&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;10 section headers / footers&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of printed pages in a report &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;65.535&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of controls and sections added over the lifetime of a form / report&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;754&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a SQL statement that serves as the &lt;B&gt;Recordsource&lt;/B&gt; or &lt;B&gt;Rowsource&lt;/B&gt; property of a form, report, or control.&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;32,750&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 401.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=535 colSpan=2&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 41.75pt 0pt 0in"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;Macro &amp;amp; VBA Limits&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of actions in a macro&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;999&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a condition&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in a comment&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of characters in an Action Argument&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;255&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 200.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=267&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in 4pt 0.25in"&gt;Number of modules (includes forms and reports with the &lt;B&gt;HasModule&lt;/B&gt; property set to &lt;B&gt;True&lt;/B&gt;)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 200.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid" vAlign=top width=268&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in"&gt;1,000&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=MsoBodyText style="MARGIN: 4pt 0in" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="MARGIN: 4pt 0in"&gt;Next Post&lt;/H3&gt;
&lt;P&gt;The next post will be on Report View, and cover sort, filter, and group functionality from that view.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=618366" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Reference/default.aspx">Reference</category></item><item><title>Access 12's new data engine</title><link>http://blogs.msdn.com/access/archive/2005/10/13/access-12-s-new-data-engine.aspx</link><pubDate>Thu, 13 Oct 2005 19:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:480870</guid><dc:creator>Erik Rucker</dc:creator><slash:comments>35</slash:comments><comments>http://blogs.msdn.com/access/comments/480870.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=480870</wfw:commentRss><description>&lt;P&gt;In the first Access blog post, I noted that Access 12 has a new database engine, but one derived from and very similar to the old Jet engine.&amp;nbsp; There were a bunch of questions &amp;amp; emails about what we did, why, and what it means, and it will take me more than one post to get through everything so please be patient.&amp;nbsp; In this post, I’ll cover what how the database engine fits into Access and how the new is different from Jet.&amp;nbsp; In future posts, I’ll talk about the Access data security model and other engine-level stuff.&lt;/P&gt;
&lt;P&gt;Access differs from most other database authoring tools by storing everything in a single file.&amp;nbsp; When an Access author creates a database, the data and all the UI to work with that data all live in the same “.MDB” file.&amp;nbsp; This makes database installation very simple and enables end-users to work with Access databases in just the same way they use Excel spreadsheets or Word documents.&amp;nbsp; The engine provides 3 things to Access:&amp;nbsp; somewhere to put data, somewhere to put UI forms and reports (this is really just more data), and a query processor.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In past versions, Access has used the Microsoft Jet database engine for data storage and query processing.&amp;nbsp; Jet is commonly thought of as being part of Access (or even as being “Access”) but in reality it is a Windows system component built by the SQL Server team.&amp;nbsp; Jet is unique in Microsoft because it provides both a data storage mechanism with a heterogeneous query processor.&amp;nbsp; This ability to run queries across a number of different data stores is a key reason people use Access, so it was super important for us to retain that ability going forward.&amp;nbsp; The SQL team is de-investing in Jet, and telling developers to code against SQL Server Express, but as it lacks the heterogeneous query functionality we needed, Access stuck with Jet.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;However, we needed to extend the Jet engine, so took a “private” copy of it, and have extended it for Office.&amp;nbsp; This means Access 12 no longer uses the system Jet engine, but is tightly bound to its own version.&amp;nbsp; The new version is fully backwards compatible with the old, so it will read &amp;amp; write files from earlier versions without any problems.&amp;nbsp; And since Access now can update the engine, developers can be confident that their Access apps will continue to work in the future.&amp;nbsp; Developers can still program against the Access engine, but since it isn’t part of the system any more, application users will need Access on their machines.&amp;nbsp; Developers targeting users without Access can continue to use the Jet engine as they have for years or can move to SQL Server Express.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The primary feature we added to the new Access engine is support for “complex data”.&amp;nbsp; Complex data really isn’t so complex – it is simply a join in relational terms, or a repeating region in XLM terms.&amp;nbsp; What it brings to Access is full schema compatibility with Windows SharePoint Services lists.&amp;nbsp; This allows us to take SharePoint list data offline and to provide rich-client UI for SharePoint using Access.&lt;/P&gt;
&lt;P&gt;In the application, complex data usually shows up as the ability to select more than one value for a field.&amp;nbsp; For example, imagine an Issues list with a column for “Assigned to:”.&amp;nbsp; In a single table you could only assign an issue to one person, and Access would provide a simple bound drop down list of people to Assign to.&amp;nbsp; With Complex data, you can (still looking at a single table) assign the issue to several people at the same time, and Access provides a drop down check list with the ability to select several people.&amp;nbsp; This works just the same way as it does in SharePoint.&lt;/P&gt;
&lt;P&gt;Behind the scenes, Access does just the same thing a developer would when building the same functionality.&amp;nbsp; We create a table for the join information and create a many-to-many join (in this example between issues and people).&amp;nbsp; The Access database is fully normalized, and there’s no string manipulation monkey business or anything untoward going on – its just vanilla relational joins.&amp;nbsp; However, from the end-user’s point of view, it is far simpler than building the tables and setting up the relationships herself.&amp;nbsp; And since SharePoint doesn’t support joins, it maps directly with the SharePoint way of doing the same thing.&lt;/P&gt;
&lt;P&gt;Developers, of course, are quite comfortable doing this by hand and can choose to either continue as they have or to use the new functionality.&amp;nbsp; For developers targeting SharePoint, it provides a mechanism for handling SharePoint’s complex data structures naturally.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In the next post, I’ll talk about the changes to the Access security model, and how that flows through both the data layer and the rest of the application.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=480870" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category></item></channel></rss>