<?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</title><link>http://blogs.msdn.com/access/default.aspx</link><description>The official blog of the Microsoft Access product team</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Access 2010 hands-on-lab is available on Channel 9</title><link>http://blogs.msdn.com/access/archive/2010/02/08/access-2010-hands-on-lab-is-available-on-channel-9.aspx</link><pubDate>Tue, 09 Feb 2010 05:49:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9960202</guid><dc:creator>Clint Covington</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/access/comments/9960202.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9960202</wfw:commentRss><description>&lt;p&gt;For all those that want to experience development with Access 2010, a new &lt;a href="http://channel9.msdn.com/learn/courses/Office2010/AccessUnit/"&gt;Access 2010 unit&lt;/a&gt; has been added to the &lt;a href="http://channel9.msdn.com/learn/"&gt;Channel 9 Learning Center&lt;/a&gt; for &lt;a href="http://channel9.msdn.com/learn/courses/Office2010/"&gt;Office 2010&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/learn/courses/Office2010/AccessUnit/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010handsonlabisavailableonChannel_12735/image_3.png" width="425" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The new &lt;a href="http://channel9.msdn.com/learn/courses/Office2010/AccessUnit/AccessLab/"&gt;Building Solutions with Access 2010 Lab&lt;/a&gt; consists of 5 exercises highlighting the new web database feature and touches on the new Macro Designer and &lt;a href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx"&gt;Data Macros&lt;/a&gt;. The new &lt;a href="http://blogs.msdn.com/access/archive/2009/07/28/meet-the-access-2010-macro-designer.aspx"&gt;Macro Designer&lt;/a&gt; provides developers with a much easier and efficient environment to work in and Data Macros are similar to triggers in SQL Server. Rather than embed business logic throughout forms, one can associate Data Macros with tables so that anytime a user updates a table, the business logic executes at the appropriate time. And web databases, via Access Services in SharePoint 2010, can be published to the web whether the SharePoint site is on premises or hosted. The lab exercises step you through the process of building a web compatible database. If you have a SharePoint 2010 site, you can publish to it. Otherwise, you can take advantage of a free trial offer and publish your web database to &lt;a href="http://accesshosting.com/"&gt;accesshosting.com&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The hands-on lab exercises are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Exercise 1: Modifying the table structure of a web database &lt;/li&gt;    &lt;li&gt;Exercise 2: Modifying a web form &lt;/li&gt;    &lt;li&gt;Exercise 3: Creating a new web database form &lt;/li&gt;    &lt;li&gt;Exercise 4: Creating a database macro &lt;/li&gt;    &lt;li&gt;Exercise 5: Publish a database to the web &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9960202" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/User+Assistance/default.aspx">User Assistance</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category><category domain="http://blogs.msdn.com/access/archive/tags/2010+Intro+Series/default.aspx">2010 Intro Series</category></item><item><title>Access 2010: Performance improvements against SharePoint lists</title><link>http://blogs.msdn.com/access/archive/2010/02/05/access-2010-performance-improvements-against-sharepoint-lists.aspx</link><pubDate>Fri, 05 Feb 2010 21:27:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9959019</guid><dc:creator>Clint Covington</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/access/comments/9959019.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9959019</wfw:commentRss><description>&lt;p&gt;&lt;i&gt;Today’s guest writer is DJ Cole from the Access development team. DJ is the architect and primary developer of SharePoint connectivity performance improvements. &lt;/i&gt;&lt;/p&gt;  &lt;h3&gt;The Access Show Overview&lt;/h3&gt;  &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/0/1/6/5/2/5/DJPerf_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/0/1/6/5/2/5/DJPerf_512_ch9.png, postid=525610" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;   &lt;br /&gt;Our goal for Access 2010 was to make connections to SharePoint lists nearly as fast as local tables. We had to ensure requests didn’t swamp the server, bottleneck over the network, or cause the client machine’s CPU or RAM to thrash. We found caching data in local tables provided the best user experience while being conservative with resources on the server, network and local machine. Access 2010 performance improvement builds upon the Access 2007 architecture. In order to fully understand the implications to your apps, it helps to understand how Access 2007 works against SharePoint. &lt;/p&gt;  &lt;h3&gt;Improvements in Access 2007&lt;/h3&gt;  &lt;p&gt;As described in a &lt;a href="http://blogs.msdn.com/access/archive/2009/05/26/synchronize-with-sharepoint-under-the-hood.aspx"&gt;previous blog post&lt;/a&gt;, the team has worked to improve SharePoint performance for some time. Back in Access 2007, there were three major changes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Asynchronous fetches of data from the server to allow some scenarios to immediately show data before the complete recordset is returned from the server. &lt;/li&gt;    &lt;li&gt;Fetch incremental data changes to a list within an Access session. Once the app fetches data subsequent requests, only query what has changed in the list. &lt;/li&gt;    &lt;li&gt;Cache lists in the local database as XML. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Asynchronous fetching&lt;/h4&gt;  &lt;p&gt;When data is loaded into a datasheet or form, often just the first page of data or a single record is needed to begin working or scrolling through records. To speed up these scenarios, control is returned to Access as soon as the first batch of data has been retrieved from the server. A background thread continues parsing and fetching the remaining data from the server, blocking only when the requested record is not yet available (for example, if you press Move Last immediately after open). While this works for some scenarios, queries with joins, sorts and filters require all of the data upfront.&lt;/p&gt;  &lt;h4&gt;Fetch incremental data changes &lt;/h4&gt;  &lt;p&gt;While data needs to be fetched from the server when a link is first used within a session of Access, changes to the web service infrastructure enabled fetching incremental data changes. Access 2007 caches the data rowsets in memory after they are first opened, so subsequent usage of the SharePoint links becomes significantly faster. In cases of large datasets, there is contention for RAM on the client machine. In this case, rowsets are released, freeing RAM back to the rest of the system. &lt;/p&gt;  &lt;h4&gt;Cache lists in XML&lt;/h4&gt;  &lt;p&gt;In addition to the in-memory caching, there are options to cache the XML within the database using either offline mode or cached mode. This helps in cases where the rowsets were recycled out of memory or when using the links in a new session of Access, as some of the server calls and network time were eliminated.&lt;/p&gt;  &lt;p&gt;Generally speaking, Access 2007 performance was much improved from Access 2003; however, it quickly slowed when users connected to lists with more than 5,000 records. The primary bottleneck was the resources required to parse and load the XML data. We had an explicit goal to support much larger datasets with Access 2010.&lt;/p&gt;  &lt;h3&gt;Improvements in Access 2010&lt;/h3&gt;  &lt;p&gt;Just like Access 2007, Access 2010 connects to SharePoint lists via web services over HTTP. When a user opens a query, form or report that consumes data from a SharePoint link, web service requests are made to the SharePoint server to get the list data. The server returns the data in XML which is parsed and cached in local tables. Lastly, the data is fetched by the Access data engine and displayed to the user. &lt;/p&gt;  &lt;p&gt;There are three areas of improvement where Access 2010 delivers a better user experience:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Cache data in local tables, &lt;/li&gt;    &lt;li&gt;Improve bulk query operations, and &lt;/li&gt;    &lt;li&gt;Reduce web service calls. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Cache data in local tables&lt;/h4&gt;  &lt;p&gt;Access 2010 enhances the connected SharePoint list experience by caching data in local tables which are persisted across Access sessions. This enables Access to parse the bulk of the SharePoint XML data only once. Subsequent use of the links just fetches incremental data changes from the server. An additional benefit of using local tables internally rather than the in-memory rowsets is that usage of multi-valued lookups and value lists in a SharePoint list becomes much faster.&lt;/p&gt;  &lt;p&gt;The first time a link is opened, Access still has to download all of the data from SharePoint and parse it into the local tables. In a situation where all of the data is needed immediately, whether from opening and moving last in the datasheet or executing a query with a join, the time to use the data is about the same as in Access 2007.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_thumb.png" width="547" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The real time savings happens the next time the link is used, either after starting a new session of Access or when many SharePoint links are used within a session. The performance for even a 50,000 row list is nearly comparable to a local table and significantly faster than the same scenario in Access 2007.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_thumb_1.png" width="579" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The additional benefit of the locally cached table is the memory footprint is radically reduced.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/image_thumb_2.png" width="547" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Using Access 2010 Cached Mode&lt;/h4&gt;  &lt;p&gt;The new cached mode is turned on by default for all new ACCDBs and published applications. Existing ACCDBs can use the new cached mode by checking the following box available through File -&amp;gt; Options -&amp;gt; Current Database:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/clip_image003_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010Performanceimprovementsagainst_14460/clip_image003_thumb.png" width="446" height="56" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This mode should not be selected if that database will be shared with Access 2007 users, though it can be used in a copy of the database that will be shared.&lt;/p&gt;  &lt;h4&gt;Bulk query operations&lt;/h4&gt;  &lt;p&gt;When exporting data to SharePoint, changes are typically sent up in batches of 50 records at a time. Access 2010 extends this batching to bulk queries against SharePoint lists, bringing the time to update 100 rows from 30 seconds to less than 3.&lt;/p&gt;  &lt;h4&gt;Reduce web service calls&lt;/h4&gt;  &lt;p&gt;During the course of developing Access 2010, multiple customers came to Microsoft and tried the new experience with cached mode. In one case, a customer had a complicated form with many sub-forms and tabs that referenced nine different SharePoint links. Previously, opening the form took over a minute, but the time decreased to less than 20 seconds when opened in cached mode. We analyzed the web service calls being made when opening the form and made changes to ensure each use of a SharePoint link on open required only one web service call. This decreased the time to open the form from 20 to 4 seconds.&lt;/p&gt;  &lt;h3&gt;What’s next?&lt;/h3&gt;  &lt;p&gt;While Access 2010 delivers significant improvements, performance work is never done! The size of the lists used is constantly growing. Users may connect to SharePoint servers located across the country or on another continent. As a result, there are more opportunities to investigate how to use the cached data more efficiently and further reduce the web service calls.&lt;/p&gt;  &lt;p&gt;Take the new bits for spin—you can &lt;a href="http://blogs.msdn.com/access/archive/2009/11/18/download-access-2010-today.aspx"&gt;download the beta&lt;/a&gt; and try it against &lt;a href="http://blogs.msdn.com/access/archive/2010/01/04/free-access-services-hosting-trial-for-early-adopters.aspx"&gt;Access Hosting&lt;/a&gt; today. We would love to &lt;a href="http://blogs.msdn.com/access/contact.aspx"&gt;get feedback&lt;/a&gt; from you about your scenarios and the improvements you see. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9959019" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category><category domain="http://blogs.msdn.com/access/archive/tags/2010+Intro+Series/default.aspx">2010 Intro Series</category><category domain="http://blogs.msdn.com/access/archive/tags/The+Access+Show/default.aspx">The Access Show</category></item><item><title>Spend the day with an Access engineer</title><link>http://blogs.msdn.com/access/archive/2010/02/03/spend-the-day-with-an-access-engineer.aspx</link><pubDate>Wed, 03 Feb 2010 18:53:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9957735</guid><dc:creator>Clint Covington</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9957735.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9957735</wfw:commentRss><description>&lt;p&gt;Attention Puget Sound readers!&lt;/p&gt;  &lt;p&gt;We are polishing Access 2010 for RTM and need your feedback. Next week a handful of Access engineers will be available to visit on-site to help customers upgrade their Access applications to Access 2010. This is your opportunity to verify your app works great with Access 2010 and to provide early feedback for our planning process.&lt;/p&gt;  &lt;p&gt;If you are in the Puget Sound area and are interested in spending a day or two with an Access engineer, send &lt;a href="http://blogs.msdn.com/access/contact.aspx"&gt;us email&lt;/a&gt;. Tell us about your professional background, the business purpose of your application, and some details about your app. There are limited opportunities to participate in this project. Respond quickly and we’ll be in touch.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9957735" width="1" height="1"&gt;</description></item><item><title>Access blog goes to China</title><link>http://blogs.msdn.com/access/archive/2010/02/02/access-blog-goes-to-china.aspx</link><pubDate>Tue, 02 Feb 2010 09:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9956505</guid><dc:creator>Clint Covington</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/access/comments/9956505.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9956505</wfw:commentRss><description>&lt;P&gt;Lois Wang, a program manager on the team responsible for reports, has started the &lt;A href="http://blogs.msdn.com/accesscn/" mce_href="http://blogs.msdn.com/accesscn/"&gt;Access China blog&lt;/A&gt;. Lois will blog about Access and open a broader dialog with Access developers in China. If you read Chinese—check it out.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/accesscn" mce_href="http://blogs.msdn.com/accesscn"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/AccessBloggoestoChina_9E27/image_3.png" width=392 height=314 mce_src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/AccessBloggoestoChina_9E27/image_3.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Friends in China—enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956505" width="1" height="1"&gt;</description></item><item><title>The Access Show: Classified ads demo</title><link>http://blogs.msdn.com/access/archive/2010/02/01/the-access-show-classified-ads-demo.aspx</link><pubDate>Mon, 01 Feb 2010 16:51:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9956387</guid><dc:creator>Clint Covington</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/access/comments/9956387.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9956387</wfw:commentRss><description>&lt;p&gt;Microsoft has an internal classified ads Web site that allows employees to buy and sell stuff—think of it as a company Craigslist. Barath Balasubramanian a tester on the Access team decided to recreate the app using Access 2010. I asked Barath to join us on &lt;a href="http://channel9.msdn.com/shows/Access/"&gt;The Access Show&lt;/a&gt; for a short demo. He plans to &lt;a href="https://services.office.microsoft.com/en-us/templates/start.aspx"&gt;share it on Office Online&lt;/a&gt; once we ship Access 2010 (it will automatically show up inside the Access’ BackStage New page). In the meantime Barath has shared a beta&amp;#160; &lt;a href="http://www.utteraccess.com/forums/showflat.php?Cat=&amp;amp;Board=55&amp;amp;Number=1922785&amp;amp;Zf=&amp;amp;Zw=&amp;amp;Zg=0&amp;amp;Zl=a&amp;amp;Main=1922785&amp;amp;Search=true&amp;amp;where=&amp;amp;Zu=159552&amp;amp;Zd=l&amp;amp;Zn=&amp;amp;Zt=2&amp;amp;Zs=&amp;amp;Zy=#Post1922785&amp;amp;Zp"&gt;copy on UtterAccess&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/3/8/1/4/2/5/TheAccessShowClassifiedApp_ch9.wmv,autostart=false,autohide=true,showembed=true, postid=524183" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;  &lt;p&gt;Subscribe to The Access Show: &lt;a href="http://channel9.msdn.com/shows/Access/RSS/" mce_href="http://channel9.msdn.com/shows/Access/RSS/"&gt;RSS&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/shows/Access/feed/ipod/" mce_href="http://channel9.msdn.com/shows/Access/feed/ipod/"&gt;iPod/MP4&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/shows/Access/feed/wmvhigh/" mce_href="http://channel9.msdn.com/shows/Access/feed/wmvhigh/"&gt;WMV (high quality)&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/shows/Access/feed/zune/" mce_href="http://channel9.msdn.com/shows/Access/feed/zune/"&gt;Zune&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/shows/Access/feed/mp3/" mce_href="http://channel9.msdn.com/shows/Access/feed/mp3/"&gt;MP3&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hopefully, it inspires some of you with new ideas for the &lt;a href="http://blogs.msdn.com/access/archive/2010/01/05/developer-contest-win-and-xbox-360-zune-or-copy-of-windows-7.aspx"&gt;contest&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956387" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category><category domain="http://blogs.msdn.com/access/archive/tags/The+Access+Show/default.aspx">The Access Show</category></item><item><title>Access 2010: How to write expressions for Web queries, forms, and reports</title><link>http://blogs.msdn.com/access/archive/2010/01/26/access-2010-how-to-write-expressions-for-web-queries-forms-and-reports.aspx</link><pubDate>Wed, 27 Jan 2010 04:55:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9953877</guid><dc:creator>Clint Covington</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/access/comments/9953877.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9953877</wfw:commentRss><description>&lt;p&gt;&lt;em&gt;Today’s guest author is &lt;a href="http://www.amazon.com/Access-SQL-Server-Russell-Sinclair/dp/1893115240/"&gt;Russell Sinclair&lt;/a&gt;, the Program Manager for expressions, ACE, along with other features. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Access has traditionally supported a wide variety of expressions in different areas of the application. Tables and fields, queries, form and report properties, controls, and macros can all use expressions to evaluate data or logic to drive the behavior of an application. In the past, each of these contexts in which an expression is used have shared a single, common expression evaluation engine. This means that no matter where you use an expression, the functions and operators available to you will likely be the same. Things will change when you start to build web databases with Access 2010.&lt;/p&gt;  &lt;p&gt;The architecture and access to data is fundamentally different when an application is running in a three tier environment. Control references, expressions and logic in the browser might have to make AJAX callbacks to a Web front-end, which calls a middle tier data cache, which then pulls data out of a backend server. The end result is logic in a form is constrained from utilizing optimizations inherent in the desktop version of Access. This new topology introduces changes to expressions and how they operate within Access and Access Services. &lt;/p&gt;  &lt;p&gt;When an application is published to the server, expressions could be evaluated in JavaScript, the Excel calculation service, or using SQL Server, depending upon the context. You will find that many of the shortcuts you are used to using in client applications are not available in web databases.&lt;/p&gt;  &lt;h3&gt;Contexts&lt;/h3&gt;  &lt;p&gt;The expressions that can be used in web databases are dependent upon the context in which you are working. In all cases, the expressions available in web databases do not match the full suite of expressions that you can use in client objects. The following is a list of the main contexts in web databases, from least restrictive (the most expressions available) to most restrictive (the least number of expressions available). &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Reports&lt;/b&gt;: This context covers all properties of reports and controls on reports that you can define in the report designer.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Queries&lt;/b&gt;: This context includes all expressions in queries you create in the query designer in Access. This includes stored database queries, record sources for forms, reports, combo and list boxes, as well as the macro action arguments:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;b&gt;In&lt;/b&gt; (in ForEachRecord and LookupRecord), &lt;/li&gt;      &lt;li&gt;&lt;b&gt;Where Condition&lt;/b&gt; (in ForEachRecord, LookupRecord, OpenForm, OpenReport, BrowseTo and SetFilter) and &lt;/li&gt;      &lt;li&gt;&lt;b&gt;Order By&lt;/b&gt; (in SetOrderBy).&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;b&gt;Data Macros&lt;/b&gt;: This context covers the expressions that you can use in the arguments of macro actions in the logic designer (except as noted in Queries).&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Tables&lt;/b&gt;: This context covers expressions in calculated columns, validation rules and default values.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Forms and UI Macros&lt;/b&gt;: This context covers expressions used in form properties, form control properties and UI macros (except as noted in Queries).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Each of these contexts will provide a slightly different set of expressions you can use. It is important to know the various contexts only so that you attune yourself to what to expect in each situation. For example, the FormatDateTime() function is not available in the Tables contexts but is available in all other contexts. &lt;/p&gt;  &lt;p&gt;The best way to know what expressions are available in the context in which you are working is to use the &lt;a href="http://blogs.msdn.com/access/archive/2009/08/11/write-expressions-faster-with-less-errors.aspx"&gt;Expression Builder&lt;/a&gt; or follow suggestions from IntelliSense. Although the designers catch many of the unsupported expressions in each context, they cannot catch every issue. Chances are that if you can’t create the expression using Expression Builder or IntelliSense, it’s not valid for that context.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; If you find that the expression you want to use is not available in the context in which you’re working, try other contexts to see if you can incorporate your expression at a lower level. For example, the Hour() function is not available in the Forms context but it is available in the Queries context. In this case, you might create a query for your form that makes use of the Hour() function and then consume the result in your form. &lt;/p&gt;  &lt;h3&gt;Strict Type Coercion&lt;/h3&gt;  &lt;p&gt;One of the most difficult changes for traditional Access users to get used to is likely to be the addition of strict type coercion on the server. Access client will allow you to compare values stored in mismatching data types. For example, users can create a query that compares the value of a date/time column to the string “2009-10-02” and they will receive results from the query appropriate to the comparison. However, the same query will fail on the server because the user is attempting to compare a string and a date value. The only exception to strict type coercion is between dates and numbers, mainly because they are both stored internally as numeric values. For all other data types, implicit coercion is blocked on the server. &lt;/p&gt;  &lt;p&gt;Because of this restriction, there are two common design considerations you should keep in mind when working with different data types. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When you work with Boolean values, always use the constants &lt;i&gt;True&lt;/i&gt; and &lt;i&gt;False&lt;/i&gt; instead of the numeric values 0, -1 or 1. &lt;/li&gt;    &lt;li&gt;When you compare strings to numeric or date/time values use FormatNumber(), FormatPercent(), FormatCurrency() or FormatDateTime() functions to convert the field value to a string in order for the comparison to work on the server.&lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Query Optimization and Bound Fields&lt;/h3&gt;  &lt;p&gt;There are a few potential issues you need to watch for when creating expressions for web databases. &lt;/p&gt;  &lt;p&gt;When you apply a filter or sort to a form or report by running a macro action such as OpenForm, OpenReport or SetFilter, any fields you use in the restriction must appear on the form/report in an expression or field that is bound to a property of the object or controls on the object. For example, if you call OpenForm and use the WHERE Condition&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;[MyField] LIKE “A*”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;you must ensure that somewhere on your form you have bound [MyField] to a control or expression (it can be hidden if you like). For performance reasons, Access Services optimizes queries to exclude fields that are not bound to the page. Unbound fields are excluded from the final output query, regardless of whether or not they are included in the query designer. &lt;/p&gt;  &lt;h3&gt;Fully Qualified Control References&lt;/h3&gt;  &lt;p&gt;Another consideration to keep in mind is that you should fully qualify control references wherever IntelliSense suggests it, rather than using shortened references. This means that you may have to use the control reference&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;[Forms]![MyForm]![MyControl]&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;instead of the shorter reference&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;[MyControl]&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is especially true when referring to controls in subforms. Subform control references should be fully qualified as &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;[Forms]![MyForm]![MySubForm].[Form]![MyControl]&lt;/font&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;rather than a relative reference such as &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;[MySubForm].[Form]![MyControl]&lt;/font&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As suggested earlier, you should make use of the &lt;a href="http://blogs.msdn.com/access/archive/2009/08/11/write-expressions-faster-with-less-errors.aspx"&gt;Expression Builder&lt;/a&gt; and IntelliSense whenever you can to be sure that the expression notation you’re using is supported. Typing fully qualified references is much easier now with the changes to these features. &lt;/p&gt;  &lt;h3&gt;TempVars in Queries&lt;/h3&gt;  &lt;p&gt;When it comes to queries, Access Services does not allow you to refer to form controls or TempVars in stored queries. For example, the following query is supported in standard databases but not web databases because it contains a reference to a form control (highlighted).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010HowtowriteexpressionsforWebque_1227B/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010HowtowriteexpressionsforWebque_1227B/image_thumb.png" width="405" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In order to make this query web compatible, you could add a parameter to the query using the Parameters dialog (available from the Query Tools, Design ribbon bar) called “prmPartNumber”. The restriction in the above query could then be rewritten as below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010HowtowriteexpressionsforWebque_1227B/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010HowtowriteexpressionsforWebque_1227B/image_thumb_1.png" width="405" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;IntelliSense will support you here in that when you start typing the parameter name in the criteria, the parameter will show up as a member of the IntelliSense. &lt;/p&gt;  &lt;h3&gt;Optional Parameters&lt;/h3&gt;  &lt;p&gt;One final issue to watch for is that some functions that take optional parameters require you to fill in some or all of the optional parameters in order to publish your application to the web. A good example of this is Iif(). In client databases, you can use the Iif() function and leave out the optional, third argument, such as&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;=IIF([MyField]&amp;gt;5, “Large”)&lt;/font&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In web databases you will get an error that the expression is not compatible with the web. You will need to provide the optional third argument in order to save the expression &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;=IIF([MyField]&amp;gt;5, “Large”, “Small”)&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Similar issues can be seen with other functions that take optional parameters, so you should watch for this possibility when you run into problems.&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;There will be a learning curve for expert Access developers to adjust to the challenges of an application that can run in the browser on a hosted service. After a while, you will get the hang of the constraints around expressions but until then, IntelliSense should be your new best friend.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9953877" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category><category domain="http://blogs.msdn.com/access/archive/tags/2010+Intro+Series/default.aspx">2010 Intro Series</category></item><item><title>Power Tip: Making forms easier to use and maintain</title><link>http://blogs.msdn.com/access/archive/2010/01/25/power-tip-making-forms-easier-to-use-and-maintain.aspx</link><pubDate>Mon, 25 Jan 2010 20:26:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9953173</guid><dc:creator>cdowns</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/access/comments/9953173.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9953173</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Reader Štefan Masič provides today's Power Tip.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In today’s post I would like to share with you some tips about form design that I’m using consistently in all applications I develop. Maybe you can get some benefit from my approach to form design.&lt;/p&gt;  &lt;p&gt;As we all know, analysis and preparation of user needs are essential in building all elements of an application. This approach results in forms that&amp;#160; are easy to use, are uniform throughout the whole application, and are easy to maintain.&lt;/p&gt;  &lt;p&gt;Here are some design needs which must be satisfied on every Access form:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The name of a form must be easily visible. &lt;/li&gt;    &lt;li&gt;The name of a form must be an expression of its functionality. &lt;/li&gt;    &lt;li&gt;User must easily identify all mandatory (required) fields. &lt;/li&gt;    &lt;li&gt;All mandatory fields should be visible on the first page of a form. &lt;/li&gt;    &lt;li&gt;All fields with a default value, auto number functionality, or read only property should be designed with a different background color. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It is common to put the name of a form into the window’s title with the &lt;i&gt;Forms!FormName.Caption&lt;/i&gt; property. I prefer to use the Form Header Section with the label called &lt;i&gt;lblFormName&lt;/i&gt;. This label can be larger and is therefore much more visible.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/FormdesignPowerTip_719A/1_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1" border="0" alt="1" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/FormdesignPowerTip_719A/1_thumb.jpg" width="458" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 1: Title of the presented form is larger and more visible than the window’s title.&lt;/p&gt;  &lt;p&gt;In my applications all mandatory fields have bold labels with the additional foreground color, named &lt;i&gt;mandatoryLabelColor&lt;/i&gt;. All mandatory fields are surrounded with the border color, called &lt;i&gt;mandatoryBorderColor&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/FormdesignPowerTip_719A/2_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Form showing different colors of labels, borders, and backgrounds" border="0" alt="Form showing different colors of labels, borders, and backgrounds" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/FormdesignPowerTip_719A/2_thumb.jpg" width="560" height="386" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Picture 2: Mandatory fields are visible on the first view.&lt;/p&gt;  &lt;p&gt;All mandatory fields are positioned on the first page. All other non-mandatory fields are positioned after first page break. With this design, the user can immediately determine which fields are required. All other fields are below them and on a second page, which is immediately visible with moving of the scrollbar. I prefer designing a form with page breaks and using the scrollbar for easy moving between pages. From my experience, this works better than a Tab control on forms with many fields.&lt;/p&gt;  &lt;p&gt;All fields with default values, fields with the auto number functionality or read-only fields should have a different background color. For example: I use a yellow background color, called &lt;i&gt;specialBackgroundColor&lt;/i&gt;. Additionally, all those fields have the &lt;i&gt;AutoTab&lt;/i&gt; property set to &lt;i&gt;No&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;As mentioned above I use three colors, &lt;i&gt;mandatoryLabelColor&lt;/i&gt;, &lt;i&gt;mandatoryBorderColor&lt;/i&gt;, &lt;i&gt;specialBackgroundColor&lt;/i&gt;. For all those colors I always use company colors or ask the customer to pick&amp;#160; specific colors.&lt;/p&gt;  &lt;p&gt;In my examples the following colors were used:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;color of mandatory labels: &lt;strong&gt;Pantone 341 C (CMYK 100, 0, 70, 30 or RGB 0, 117, 84)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;borders of mandatory fields: &lt;strong&gt;Pantone 166 C (CMYK 0, 60, 100, 0 or RGB 239, 124, 0)&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;background color of special fields: &lt;strong&gt;Pantone 109 C (CMYK 0, 10, 95, 0 or RGB 255, 222, 0)&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If all the colors are determined during the analysis phase, and they’re not likely to change later,&amp;#160; I always use a solution that does not require any programming. Here are Access numbers for all three colors, which I put into the appropriate properties of the labels and fields:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;i&gt;mandatoryLabelColor = LabelName.ForeColor = 5534976 &lt;/i&gt;(for Pantone 341 C) &lt;/li&gt;    &lt;li&gt;&lt;i&gt;mandatoryBorderColor = FieldName.BorderColor = 31983 &lt;/i&gt;(for Pantone 166 C) &lt;/li&gt;    &lt;li&gt;&lt;i&gt;specialBackgroundColor = FieldName.BackColor = 57087 &lt;/i&gt;(for Pantone 109 C) &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Using global variables for more flexibility&lt;/h2&gt;  &lt;p&gt;If I think the customer might prefer different colors at a later date, I use variables instead of constants. This solution requires creation of a new module, with declarations of three public constants and three public variables. See the example &lt;strong&gt;modGlobalConstantsAndVariables &lt;/strong&gt;below.&lt;/p&gt;  &lt;p&gt;Public constants can be used when colors are defined in an early phase and are not likely to be changed. Public variables can be used when it’s possible that the colors might be changed in the future.&lt;/p&gt;  &lt;p&gt;Module &lt;i&gt;modGlobalConstantsAndVariables&lt;/i&gt; looks like:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;'------------------------------------------------------------&lt;/span&gt;
&lt;span class="rem"&gt;' Element: Module, 2010&lt;/span&gt;
&lt;span class="rem"&gt;' Description: Definition of global constants and variables.&lt;/span&gt;
&lt;span class="rem"&gt;' - mandatoryLabeleColor&lt;/span&gt;
&lt;span class="rem"&gt;' - mandatoryBorderColor&lt;/span&gt;
&lt;span class="rem"&gt;' - specialBacgroundColor&lt;/span&gt;
&lt;span class="rem"&gt;'' Purpose : Global constants, global variables.&lt;/span&gt;
&lt;span class="rem"&gt;'' Author: Stefan Masic, january 2010&lt;/span&gt;
&lt;span class="rem"&gt;' Information: con = Constant; R=Red; G=Green; B=Blue&lt;/span&gt;
&lt;span class="rem"&gt;' See also: -&lt;/span&gt;
&lt;span class="rem"&gt;' Changes:&lt;/span&gt;
&lt;span class="rem"&gt;' (dd.mm.yyyyy, Author) Text&lt;/span&gt;
&lt;span class="rem"&gt;'------------------------------------------------------------&lt;/span&gt;
&lt;span class="rem"&gt;'--------------------------------------------------------------------&lt;/span&gt;

&lt;span class="rem"&gt;' Public constants.&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; conMandatoryLabelColor = 5334976 &lt;span class="rem"&gt;' R=0 G=117 B=84&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; conMandatoryBorderColor = 31983 &lt;span class="rem"&gt;' R=239 G=124 B=0&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Const&lt;/span&gt; conSpecialBackgroundColor = 57087 &lt;span class="rem"&gt;' R=255 G=222 B=0&lt;/span&gt;
&lt;span class="rem"&gt;'--------------------------------------------------------------------&lt;/span&gt;
&lt;span class="rem"&gt;'--------------------------------------------------------------------&lt;/span&gt;

&lt;span class="rem"&gt;' Public variables.&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; lngMandatoryLabelColor &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; lngMandatoryBorderColor &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; lngSpecialBacgroundColor &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;

&lt;span class="rem"&gt;'--------------------------------------------------------------------&lt;/span&gt;
&lt;span class="rem"&gt;' End of module&lt;/span&gt;
&lt;span class="rem"&gt;'--------------------------------------------------------------------&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The simplest programming solution requires creation of a new &lt;i&gt;OnOpen&lt;/i&gt; event on each form, with the following code for every mandatory field and every special field:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Form_Open(Cancel &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)

&lt;span class="kwrd"&gt;On&lt;/span&gt; &lt;span class="kwrd"&gt;Error&lt;/span&gt; &lt;span class="kwrd"&gt;GoTo&lt;/span&gt; Err_Form_Open

&lt;span class="kwrd"&gt;Me&lt;/span&gt;.MandatoryLabelName.ForeColor = conMandatoryLabelColor
&lt;span class="kwrd"&gt;Me&lt;/span&gt;.MandatoryFieldName.BorderColor = conMandatoryBorderColor
&lt;span class="kwrd"&gt;Me&lt;/span&gt;.SpecialFiledName.BackColor = conSpecialBackgroundColor

Exit_ Form_Open

&lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

Err_Form_Open

MsgBox Err.Description
&lt;span class="kwrd"&gt;Resume&lt;/span&gt; Exit_Form_Open

&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; ‘ Form_Open&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;Storing color values in a table&lt;/h2&gt;

&lt;p&gt;When I’m creating a general purpose application where colors are likely to change, I use a special table, called &lt;i&gt;tabDefaultApplicationValues&lt;/i&gt;. In its simplest definition, this table includes only one row and many fields. This table includes three fields &lt;i&gt;MandatoryLabelColor&lt;/i&gt;, &lt;i&gt;MandatoryBorderColor&lt;/i&gt;, and &lt;em&gt;SpecialBackgroundColor&lt;/em&gt;. I also need function &lt;i&gt;getDefaultApplicationValue&lt;/i&gt;(&lt;i&gt;ValueName&lt;/i&gt;).&lt;/p&gt;

&lt;p&gt;With this method, the simple procedure &lt;i&gt;Form_OnOpen&lt;/i&gt; needs a little rearranging:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Me&lt;/span&gt;.MandatoryLabelName.ForeColor = lngMandatoryLabelColor
&lt;span class="kwrd"&gt;Me&lt;/span&gt;.MandatoryFieldName.BorderColor = lngMandatoryBorderColor
&lt;span class="kwrd"&gt;Me&lt;/span&gt;.SpecialFiledName.BackColor = lngSpecialBackgroundColor&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Public variables can be filled during the loading process of &lt;i&gt;Main form&lt;/i&gt; or &lt;i&gt;Switchboard&lt;/i&gt; with the&amp;#160; following code:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;lngMandatoryLabelColor = getDefaultApplicationValue(“MandatoryLabelColor”)
lngMandatoryBorderColor = getDefaultApplicationValue(“MandatoryBorderColor”)
lngSpecialBackgroundColor= getDefaultApplicationValue(“SpecialBackgroundColor”)&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Here is a simple function you can use to retrieve the color values from the table:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;'------------------------------------------------------------&lt;/span&gt;
&lt;span class="rem"&gt;' Element: Function, 2010&lt;/span&gt;
&lt;span class="rem"&gt;' Purpose: Get value from table tabDefaultApplicatonValues.&lt;/span&gt;
&lt;span class="rem"&gt;'&lt;/span&gt;
&lt;span class="rem"&gt;' Input: Default value field name (String)&lt;/span&gt;
&lt;span class="rem"&gt;' Output: Value (String)&lt;/span&gt;
&lt;span class="rem"&gt;'&lt;/span&gt;
&lt;span class="rem"&gt;' See also: tabDefaultApplicationValues&lt;/span&gt;
&lt;span class="rem"&gt;' Avtor: Stefan Masic, january 2010&lt;/span&gt;
&lt;span class="rem"&gt;' Remark:&lt;/span&gt;
&lt;span class="rem"&gt;' Changes:&lt;/span&gt;
&lt;span class="rem"&gt;'------------------------------------------------------------&lt;/span&gt;

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; getDefaultApplicationValue(strDefaultValueName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;

&lt;span class="kwrd"&gt;On&lt;/span&gt; &lt;span class="kwrd"&gt;Error&lt;/span&gt; &lt;span class="kwrd"&gt;GoTo&lt;/span&gt; Err_getDefaultApplicationValue

&lt;span class="kwrd"&gt;Dim&lt;/span&gt; dbs &lt;span class="kwrd"&gt;As&lt;/span&gt; DAO.Database
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; rst &lt;span class="kwrd"&gt;As&lt;/span&gt; DAO.Recordset
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; strDefaultValue &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
&lt;span class="kwrd"&gt;Dim&lt;/span&gt; strSqlStmt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;

&lt;span class="rem"&gt;' Check default value name.&lt;/span&gt;
&lt;span class="kwrd"&gt;If&lt;/span&gt; IsNull(strDefaultValueName) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
  strDefaultValue = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="kwrd"&gt;Else&lt;/span&gt;
  &lt;span class="rem"&gt;' Define current DB.&lt;/span&gt;
  &lt;span class="kwrd"&gt;Set&lt;/span&gt; dbs = DBEngine.Workspaces(0).Databases(0)
  strSqlStmt = &lt;span class="str"&gt;&amp;quot;SELECT &amp;quot;&lt;/span&gt; &amp;amp; strDefaultValueName &amp;amp; &lt;span class="str"&gt;&amp;quot; FROM tabDefaultApplicationValues&amp;quot;&lt;/span&gt;
  &lt;span class="kwrd"&gt;Set&lt;/span&gt; rst = dbs.OpenRecordset(strSqlStmt)
  &lt;span class="rem"&gt;' Get value if record exists (rst.RecordCount&amp;gt;0).&lt;/span&gt;
  &lt;span class="kwrd"&gt;If&lt;/span&gt; rst.RecordCount &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
    &lt;span class="rem"&gt;' Check NULL.&lt;/span&gt;
    &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; IsNull(rst.Fields(0).Value) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
      strDefaultValue = rst.Fields(0).Value
    &lt;span class="kwrd"&gt;Else&lt;/span&gt;
      strDefaultValue = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
  &lt;span class="kwrd"&gt;Else&lt;/span&gt;
    strDefaultValue = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
  &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
  &lt;span class="rem"&gt;' Free rst in dbs.&lt;/span&gt;
  rst.Close
  dbs.Close
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="rem"&gt;' IsNull&lt;/span&gt;

getDefaultApplicationValue = strDefaultValue

Exit_getDefaultApplicationValue:
&lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
Err_getDefaultApplicationValue:
MsgBox Err.Description &amp;amp; &lt;span class="str"&gt;&amp;quot; (Error no.: &amp;quot;&lt;/span&gt; &amp;amp; Err.Number &amp;amp; &lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;
&lt;span class="kwrd"&gt;Resume&lt;/span&gt; Exit_getDefaultApplicationValue

&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; &lt;span class="rem"&gt;' getDefaultApplicationValue&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If the solution requires personalization of default application values, or if the solution will be used by many companies, then this table will have two or more rows of default values for every configuration, and the function will have two parameters. Here are two examples:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;getDefaultApplicationValue(UserId, ValueName).
getDefaultApplicationValue(CompanyId, ValueName).&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The first described approach does not require any programming, and as such it is easier to manage the application over time and with new versions of Access. I recommend this approach.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h5&gt;Send your Power Tips to Chris &amp;amp; Mike at &lt;a href="mailto:accpower@microsoft.com"&gt;accpower@microsoft.com&lt;/a&gt;.&lt;/h5&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9953173" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/User+Interface/default.aspx">User Interface</category><category domain="http://blogs.msdn.com/access/archive/tags/Form/default.aspx">Form</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Access 2010: Design more maintainable apps with calculated columns</title><link>http://blogs.msdn.com/access/archive/2010/01/22/access-2010-design-more-maintainable-apps-with-calculated-columns.aspx</link><pubDate>Sat, 23 Jan 2010 06:49:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9952312</guid><dc:creator>Clint Covington</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/access/comments/9952312.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9952312</wfw:commentRss><description>&lt;p&gt;When I talk to developers about why they love Access, the most frequent response is always about fast they can build applications that track data. This saves time and money. Calculated columns are a new feature in Access 2010 that is designed to help end users and developers build applications faster, and are easier to maintain. &lt;/p&gt;  &lt;p&gt;Let me start with a couple scenarios from the Access 2007 templates. In the &lt;a href="http://office.microsoft.com/en-us/templates/TC012253431033.aspx?CategoryID=CT101428241033"&gt;Contacts database&lt;/a&gt;, there are two fairly complicated expressions that conditionally show either the name of the person or the company, depending on which is blank:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Courier New"&gt;FileAs: IIf(IsNull([LastName]),IIf(IsNull([FirstName]),[Company],[FirstName]), IIf(IsNull([FirstName]),[LastName],[LastName] &amp;amp; &amp;quot;, &amp;quot; &amp;amp; [FirstName]))&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Courier New"&gt;ContactName: IIf(IsNull([LastName]),IIf(IsNull([FirstName]),[Company],[FirstName]), IIf(IsNull([FirstName]),[LastName],[FirstName] &amp;amp; &amp;quot; &amp;quot; &amp;amp; [LastName]))&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The &lt;a href="http://office.microsoft.com/en-us/templates/TC012253531033.aspx?CategoryID=CT101428241033"&gt;Sales Pipeline database&lt;/a&gt; has a similar scenario with a different expression that calculates the value of the potential opportunity:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Courier New"&gt;ForecastValue: [EstRevenue]*[Probability]&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In these two scenarios it is highly likely that if you are going to use data from either of the tables, you will also need the calculated fields. &lt;/p&gt;  &lt;p&gt;In the templates, we created a base query that did a SELECT * and included the expression columns. Unfortunately, I see many poorly designed databases in which an expression is repeated throughout queries, forms and reports. When the expression requires modification, the database owner must look for the many places it may have been used so all the occurrences can be changed.&amp;#160; With calculated fields, there is only one place to edit, so maintenance is faster and easier.&lt;/p&gt;  &lt;p&gt;The main benefit of calculated columns is encapsulation, which leads to cleaner database design. It allows database developers to define the most common fields at the table level. This makes applications easier to maintain as inevitable bugs creep up in expressions (at least if you write expressions like I do :-) ). The developer can easily track the expression back to one place—the table.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Note: &lt;/i&gt;&lt;a href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx"&gt;&lt;i&gt;data macros&lt;/i&gt;&lt;/a&gt;&lt;i&gt; are another example of a feature that allows developers to encapsulate logic in the table rather than behind form events.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Calculated columns are easy to create. Open the table in browse view. From the ribbon, select &lt;b&gt;Table Tools | Fields | Add &amp;amp; Delete | More Fields | Calculated Field&lt;/b&gt; or choose the &lt;b&gt;Calculated&lt;/b&gt; field type in table design view. Either way, the expression builder will help create the expression.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010calculatedcolumns_1510F/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Access2010calculatedcolumns_1510F/image_thumb.png" width="240" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Another benefit calculated columns provide is consistency with SharePoint. Microsoft has made a big investment to make SharePoint a platform for collaboration and data applications. Calculated columns were introduced in SharePoint 2003 as a “calc and store” model, where values are only recalculated when dependencies change. This model is a performance optimization that makes it faster for the server to query against these values, especially when users sort and filter on the calculated field. &lt;/p&gt;  &lt;p&gt;The calc and store model cannot be used for volatile expressions such as Date() and Now() because the stored result would only be accurate at the moment it is initially calculated. Functions that reference outside the row of the table, such as DSum, DCount and DLookup are also prohibited because it would be costly from a performance perspective to detect when dependencies have changed. These types of calculated fields are better left in base queries.&lt;/p&gt;  &lt;p&gt;Calculated fields can save development time, reduce errors, and increase performance.&amp;#160; This results in better-designed applications.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9952312" width="1" height="1"&gt;</description></item><item><title>March Madness schema</title><link>http://blogs.msdn.com/access/archive/2010/01/22/march-madness-schema.aspx</link><pubDate>Fri, 22 Jan 2010 17:32:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9952091</guid><dc:creator>Clint Covington</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/access/comments/9952091.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9952091</wfw:commentRss><description>&lt;p&gt;Someone on the team wants to build a March Madness database. Anyone have a schema/database they wouldn’t mind sharing with the team? If we get something that works well—we might be able to share it with the community. Send us &lt;a href="http://blogs.msdn.com/access/contact.aspx"&gt;email&lt;/a&gt; if you have something and wouldn’t mind sharing it.&lt;/p&gt;  &lt;p&gt;Thanks!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9952091" width="1" height="1"&gt;</description></item><item><title>Use the IsClient() expression to conditionally run VBA from Web forms</title><link>http://blogs.msdn.com/access/archive/2010/01/18/use-the-isclient-expression-to-conditionally-run-vba-from-web-forms.aspx</link><pubDate>Mon, 18 Jan 2010 18:34:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9949906</guid><dc:creator>Clint Covington</dc:creator><slash:comments>31</slash:comments><comments>http://blogs.msdn.com/access/comments/9949906.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9949906</wfw:commentRss><description>&lt;p&gt;&lt;em&gt;Today’s guest writer is Kerry Westphal the PM for the macro designer and browser logic.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Here is Kerry’s introduction on &lt;a href="http://channel9.msdn.com/shows/Access/"&gt;The Access Show&lt;/a&gt; on &lt;a href="http://channel9.msdn.com/"&gt;Channel 9&lt;/a&gt;:&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/0/9/4/0/2/5/TheAccessShowPowerTips_ch9.wmv,autostart=false,autohide=true,showembed=true, postid=520490" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;We expect many advanced Access Services applications will have client and web objects—we call these hybrid applications. Hybrid applications are interesting because you can create client forms that leverage the full power of link tables, advanced queries, rich forms/reports, and VBA. See this &lt;a href="http://blogs.msdn.com/access/archive/2009/11/23/publish-to-sharepoint-part-1.aspx"&gt;previous post&lt;/a&gt; for more background on Web and client objects. &lt;/p&gt;  &lt;p&gt;The IsClient() expression allows you to conditionally branch your logic depending on whether the form running inside Access or the browser. In this way you can have one button that runs a different macro based on the context it is called from. This allows you to take advantage of the full power of VBA and macros when the Web form is in the rich client while also using the same form to the browser. It makes application development much easier as you don’t have to create the same form twice (one for the Web and another for the client) to have different logic running based on the environment. I’m going to show three different examples how you can use this functionality in hybrid applications:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open client verses server forms based on context. &lt;/li&gt;    &lt;li&gt;Call a client macro from a button. &lt;/li&gt;    &lt;li&gt;Call a VBA function from a button. &lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Open client/server form example&lt;/h4&gt;  &lt;p&gt;Using isClient(), you can open a different form based on whether the form is running in the client or browser. The design experience for Web objects and the compatibility checker allows you to open client and Web forms alike from your Web form. In the following example, you can drill through to a different contact detail form from the button of a contact ID depending on the environment. This is especially useful since the details form on the client takes advantage of functionalities that are unsupported on the Web details form. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/image_thumb_1.png" width="246" height="390" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Call client macro&lt;/h4&gt;  &lt;p&gt;The following example below is an example of extending the 2010 Contacts template to Save a Contact to Outlook using the IsClient() expression to run a client macro from a Web form.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image002_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image002_thumb.jpg" width="461" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;The Save to Outlook button allows you to quickly save contacts to your Outlook address book from your Access database.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image004_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image004_thumb.jpg" width="628" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image006_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image006_thumb.jpg" width="564" height="412" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;In the OnClick event for the Add Contact from Outlook button, check to see if the app is running in the Client and if so, then run the client macro AddFromOutlook that can run the client-only macro SaveToOutlook to open the dialog to save a new Outlook contact. Otherwise, when the button is clicked on the Web, throw a MessageBox saying that the functionality is unsupported.&lt;/i&gt;&lt;/p&gt;  &lt;h4&gt;Run VBA from a Web form&lt;/h4&gt;  &lt;p&gt;You can also run VBA from the Web form using the same syntax. The example below extends the Projects 2010 template and adds a task to Outlook every time a new task is added.&lt;/p&gt;  &lt;p&gt;In the Save &amp;amp; Close button on the Task Details form, add logic to check if the form is running on the client. If so, then set up TempVars with the values from the form so it can be passed to the VBA function. We will call the VBA function from the onLoad event of a hidden form to get the VBA to add the task to Outlook to run. If the form is running on the Web, this code will not get called.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image008_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/clip_image008_thumb.jpg" width="505" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The onClick event on the Save &amp;amp; Close button opens a client form that triggers the RunCode call in the Onload event to run the AddOutlookTask code.    &lt;br /&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/RunningbranchinglogicontheWebandClientus_E2F7/image_thumb.png" width="627" height="331" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Hopefully, this post gives you some ideas about how you can combine Web objects with client objects and call VBA code from inside Web forms if the form is run in the Access client.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Edited 1/19/2010 -- T&lt;/em&gt;&lt;em&gt;his expression is not available in beta 2. It will be available in RTM. Sorry for any confusion.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9949906" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category></item><item><title>Access MVP recognition</title><link>http://blogs.msdn.com/access/archive/2010/01/15/access-mvp-recognition.aspx</link><pubDate>Fri, 15 Jan 2010 21:34:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9949144</guid><dc:creator>Clint Covington</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/access/comments/9949144.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9949144</wfw:commentRss><description>&lt;p&gt;&lt;em&gt;Today’s guest writer is Ric Lewis from the Access PM team.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Here at the beginning of the year we wanted to take the opportunity to highlight our MVPs.&amp;#160; These are folks whose tireless efforts produce the vibrant Access community, which is a large part of what makes this such a great product.&amp;#160; Many of them have answered thousands upon thousands of questions in newsgroups and on forums.&amp;#160; Many of them have been involved in Access for more than 15 years.&amp;#160; As a product team, we’re particularly grateful for their efforts, and we look forward to the chance to spend some time with them and recognize them at next month’s MVP Summit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.utteraccess.com/forums/uauserpro.php?Cat=&amp;amp;User=88297&amp;amp;Number=1916139&amp;amp;Board=53&amp;amp;what=showflat&amp;amp;page=&amp;amp;view=&amp;amp;sb=5&amp;amp;o=&amp;amp;fpart=1&amp;amp;vc=1"&gt;Walter Niesz&lt;/a&gt;&amp;#160; (&lt;a href="http://www.nieszenterprises.com/"&gt;Website&lt;/a&gt;) Author of multiple How To and FAQ on Utter Access.&amp;#160; Walter is the unquestioned master of the pictorial tutorial.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.experts-exchange.com/M_1962612.html"&gt;Scott McDaniel&lt;/a&gt; (&lt;a href="http://www.infotrakker.com/"&gt;WebSite&lt;/a&gt;)&amp;#160; Genius three times over on Experts Exchange, making him not only one of the top Access Experts, but a perennial top 25 across the entire site.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.access-freak.com/contact.html"&gt;Oli S&lt;/a&gt; (&lt;a href="http://www.access-freak.com/contact.html"&gt;Website&lt;/a&gt;) A ribbon master and all around Access Freak, with over 30,000 answered questions to his credit on UtterAccess and other fourms.&lt;/p&gt;  &lt;p&gt;Larry Linson (&lt;a href="http://accdevl.tripod.com/"&gt;Website&lt;/a&gt;) (&lt;a href="http://sp.ntpcug.org/accesssig/"&gt;N. Texas Access SIG&lt;/a&gt;) Enjoying 16 years as leader of the Access SIG in North Texas, Larry is a prolific contributor to Access newsgroups, contributing an article each month to the North Texas PC News.&amp;#160; He’s currently collaborating on a book with other Access MVPs.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.utteraccess.com/forums/uauserpro.php?Cat=&amp;amp;User=10548"&gt;George Hepworth&lt;/a&gt; (&lt;a href="http://www.gpcdata.com/"&gt;Website&lt;/a&gt;)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Grover Park George&amp;quot; is an Admin at Utter Access, as well as an author and blogger.&amp;#160; He is known for focusing on newer users, helping to make sure their first experience in Access is a good one.&lt;/p&gt;  &lt;p&gt;Bob Larson (&lt;a href="http://www.btabdevelopment.com/"&gt;Website&lt;/a&gt;) You can't throw a rock without hitting some Access Forum where Bob is posting.&amp;#160; He's established a strong presence on nearly a dozen different Access forums, most recently on Microsoft Answers.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Gord Hubbell (&lt;a href="http://utteraccess.com/"&gt;Website&lt;/a&gt;) Gord is webmaster of what is arguably the heart of the Access community, UtterAccess.com.&amp;#160; Gord's passion and commitment to developing the Access community have borne fruits to everyone from first-timers to those of us who develop the product.&lt;/p&gt;  &lt;p&gt;Emilio Sancha (&lt;a href="http://www.mvp-access.es/emilio/"&gt;Website&lt;/a&gt;) (&lt;a href="http://www.mvp-access.com/foro/"&gt;Spanish Forums&lt;/a&gt;) Emilio had already been playing with Access for nine years when he discovered the existence of the Microsoft Newsgroups and was opened up to a new world of social Access.&amp;#160; He is a regular contributor the forums and newsgroups.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rogersaccessblog.com/"&gt;Roger Carlson&lt;/a&gt; (&lt;a href="http://rogersaccesslibrary.com/"&gt;Website&lt;/a&gt;) Owner of two major repositories of Access wisdom, Roger has been contributing on Access-L, UtterAccess and MS Access newsgroups for years.&lt;/p&gt;  &lt;p&gt;John Viescas (&lt;a href="http://www.viescas.com/"&gt;Website&lt;/a&gt;) John is a prolific writer, authoring five Access books, and co-authoring another.&amp;#160; He has been an Access MVP for 16 years and running.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Andrew Couch (&lt;a href="http://www.upsizing.co.uk/"&gt;Upsizing site&lt;/a&gt;) (&lt;a href="http://www.ukaugcommunity.co.uk/"&gt;AUG Community&lt;/a&gt;) Andrew is director of the UK Access User Group (&lt;a href="http://www.ukaugcommunity.co.uk"&gt;www.ukaugcommunity.co.uk&lt;/a&gt;) and a regular speaker at UK Community Events. He specializes in migrating Access applications to SQL Server and .net.&amp;#160; He is also the technical developer behind the popular migration toolset MUST.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.utteraccess.com/forums/uauserpro.php?User=123600"&gt;Leo (theDBGuy)&lt;/a&gt;&amp;#160; An UtterAccess.com VIP who has been giving sage advice to Access users all over the world with their database questions.&lt;/p&gt;  &lt;p&gt;John Mishefske (&lt;a href="http://www.tigeronomy.com/"&gt;Website&lt;/a&gt;)&amp;#160; John Mishefske provides samples that can be downloaded from his Tigeronomy Software site that contain full source code as well as code and Jet SQL examples for common problems faced by Access and VBA programmers.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Garry Robinson (&lt;a href="http://www.databasejournal.com/features/msaccess/"&gt;Website&lt;/a&gt;) (&lt;a href="http://www.vb123.com/kb/"&gt;Smart Access&lt;/a&gt;) Garry earned his Access MVP stripes writing for the very popular Smart Access magazine from 1998-2006 and when that closed down he moved on to Database Journal.&amp;#160; He has since bought the rights to the Smart Access archives and published their content online.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Thomas Möller&amp;#160; (&lt;a href="http://www.team-moeller.de/"&gt;Website&lt;/a&gt;) (&lt;a href="http://access-stammtisch.de/"&gt;German SIG&lt;/a&gt;) Thomas is a jack-of-all-trades, posting in forums, running the oldest German Access SIG, authoring for Access im Unternehmen and lecturing at the German Access developers conference AEK.&lt;/p&gt;  &lt;p&gt;Glenn Lloyd (&lt;a href="http://www.officetipsandmethods.com/"&gt;Website&lt;/a&gt;) Glenn Lloyd is an independent Access Developer, Office Applications trainer, and Forums Administrator at UtterAccess.com. He publishes a blog for Office application fans and users at &lt;a href="http://www.officetipsandmethods.com"&gt;www.officetipsandmethods.com&lt;/a&gt;.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Tom van Stiphout (&lt;a href="mailto:tvanstiphout@kinetik-it.com"&gt;Contact&lt;/a&gt;) Active in public newsgroups as well as on his Access security blog.&amp;#160; Tom recently contributed to an Access book in response to a challenge from Steve Ballmer in last year's conference.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://mvp.support.microsoft.com/profile=5DA4C063-12F8-44B6-BBF1-45A7BBF5C8D5"&gt;Graham Seach&lt;/a&gt; (&lt;a href="mailto:gseach@accessmvp.com"&gt;Contact&lt;/a&gt;) Co-author of the canonical Access 2003 VBA Programmer's Reference.&amp;#160; Graham is active in newsgroups and as a speaker.&amp;#160; He is currently working with an Australian university on various ways to include Access in the curriculum, including developing a BS degree program in Workgroup Systems (essentially a degree in Access development).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://accessdaziacin.spaces.live.com/default.aspx?sa=288851003"&gt;Cinzia Pagani&lt;/a&gt; (&lt;a href="http://www.riolab.org/"&gt;Website&lt;/a&gt;) (&lt;a href="http://twitter.com/CinziaPagani"&gt;Twitter&lt;/a&gt;) Cinzia is active in the Italian Access NG and Social Forum.&amp;#160; He also serves as one of the webmasters of RIO, an Italian language site for FAQs and article on Office development.&lt;/p&gt;  &lt;p&gt;Miriam Bizup&amp;#160; Miriam is a Zone Advisor for Access topic areas on Experts-Exchange.&amp;#160; She also contributes to articles as a Page Editor for the database and programming areas, acting as a moderator for site-wide support issues.&lt;/p&gt;  &lt;p&gt;Gina Whipp (&lt;a href="http://www.regina-whipp.com/"&gt;Website&lt;/a&gt;) The largest thread on the MVP forums in the last month has been the thread welcoming Gina to the MVP group.&amp;#160; We're glad to finally have her insight and efforts recognized in this setting.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Crystal Long (&lt;a href="http://www.accessmvp.com/strive4peace"&gt;Website&lt;/a&gt;)&amp;#160; Crystal has produced numerous Access learning materials, from her free “Access Basics” book, to her video tutorials on her own YouTube channel (&lt;a href="http://www.youtube.com/user/LearnAccessByCrystal"&gt;http://www.youtube.com/user/LearnAccessByCrystal&lt;/a&gt;).&amp;#160; She is also a frequent contributor on multiple Access and Excel forums.&lt;/p&gt;  &lt;p&gt;Alex Dybenko Active in MS Access newsgroups for years and on his Access blog (&lt;a href="http://AccessBlog.net"&gt;http://AccessBlog.net&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.experts-exchange.com/M_3699761.html"&gt;Joe Anderson&lt;/a&gt; (&lt;a href="http://www.alldatacorp.com/"&gt;Website&lt;/a&gt;) He has been working with Access since 1.0.&amp;#160; He’s in the Microsoft Access Hall of Fame on Experts-Exchange.com, as well as owner and CEO of All Data Corp.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9949144" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Community/default.aspx">Community</category></item><item><title>Power Tip Link: Delete records by using a delete query</title><link>http://blogs.msdn.com/access/archive/2010/01/14/delete-records-by-using-a-delete-query.aspx</link><pubDate>Thu, 14 Jan 2010 07:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9948459</guid><dc:creator>cdowns</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/access/comments/9948459.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9948459</wfw:commentRss><description>&lt;P&gt;&lt;EM&gt;Today's guest author is Luke Chung, President and Founder of FMS, Inc.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;DELETE queries are a fundamental part of relational databases since you can remove multiple records at one time, and can specify which records to delete by linking to data in another table.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Deleterecordsbyusingadeletequery_7019/3_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Deleterecordsbyusingadeletequery_7019/3_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Delete query option in query Design View" border=0 alt="Delete query option in query Design View" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Deleterecordsbyusingadeletequery_7019/3_thumb.jpg" width=404 height=145 mce_src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/Deleterecordsbyusingadeletequery_7019/3_thumb.jpg"&gt;&lt;/A&gt; &lt;BR&gt;Delete query option in query Design View&lt;/P&gt;
&lt;P&gt;Delete queries let you:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Empty a table (delete all its records) &lt;/LI&gt;
&lt;LI&gt;Delete all records with a particular value in a field &lt;/LI&gt;
&lt;LI&gt;Delete all records with a range of values in a field &lt;/LI&gt;
&lt;LI&gt;Delete records based on criteria in multiple fields &lt;/LI&gt;
&lt;LI&gt;Delete records with matching values field(s) in a joined table&lt;/LI&gt;&lt;/UL&gt;
&lt;P align=left&gt;&lt;A href="http://www.fmsinc.com/MicrosoftAccess/query/snytax/delete-query.html" target=_blank mce_href="http://www.fmsinc.com/MicrosoftAccess/query/snytax/delete-query.html"&gt;Read the article on Luke’s site&lt;/A&gt; to learn more about DELETE query SQL syntax, how to avoid deleting historic data, and get examples and troubleshooting tips.&lt;/P&gt;
&lt;P align=left&gt;&lt;EM&gt;Luke has written and presented a wide range of topics related to Access over the years. In addition to their many Access related products, FMS offers a wealth of great Access &lt;/EM&gt;&lt;A href="http://www.fmsinc.com/tpapers/index.html" target=_blank mce_href="http://www.fmsinc.com/tpapers/index.html"&gt;&lt;EM&gt;papers&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, &lt;/EM&gt;&lt;A href="http://www.fmsinc.com/free/tips.html" target=_blank mce_href="http://www.fmsinc.com/free/tips.html"&gt;&lt;EM&gt;tips&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, and &lt;/EM&gt;&lt;A href="http://www.fmsinc.com/videos/index.asp" target=_blank mce_href="http://www.fmsinc.com/videos/index.asp"&gt;&lt;EM&gt;video&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; on their site.&lt;/EM&gt;&lt;/P&gt;
&lt;H6&gt;Get your favorite Power Tip on the Access Team Blog! Send it to Mike &amp;amp; Chris at &lt;A href="mailto:accpower@microsoft.com" mce_href="mailto:accpower@microsoft.com"&gt;accpower@microsoft.com&lt;/A&gt;.&lt;/H6&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9948459" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category><category domain="http://blogs.msdn.com/access/archive/tags/Queries/default.aspx">Queries</category></item><item><title>Ping Access 2010 book authors</title><link>http://blogs.msdn.com/access/archive/2010/01/13/pinging-access-2010-book-authors.aspx</link><pubDate>Thu, 14 Jan 2010 04:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9948179</guid><dc:creator>Clint Covington</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/access/comments/9948179.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9948179</wfw:commentRss><description>&lt;p&gt;Are you writing a book about Microsoft Access 2010? If so—we would like to help you write a great, accurate book. Please &lt;a mce_href="http://blogs.msdn.com/access/contact.aspx" href="http://blogs.msdn.com/access/contact.aspx"&gt;email&lt;/a&gt; us your contact information and a bit about your project so that we can follow up.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9948179" width="1" height="1"&gt;</description></item><item><title>Cross version compatibility between Access 2010 and Access 2007</title><link>http://blogs.msdn.com/access/archive/2010/01/13/backward-compatibility-between-access-2010-and-access-2007.aspx</link><pubDate>Wed, 13 Jan 2010 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9946925</guid><dc:creator>Clint Covington</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/access/comments/9946925.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9946925</wfw:commentRss><description>&lt;p&gt;&lt;i&gt;Today’s guest writer is Lois Wang—PM for reports and version-to-version compatibility.&lt;/i&gt; &lt;/p&gt;&lt;p&gt;I saw a question on the &lt;a mce_href="http://social.technet.microsoft.com/Forums/en-US/access/" href="http://social.technet.microsoft.com/Forums/en-US/access/"&gt;Access TechNet Forum&lt;/a&gt; the other day that I’d like to share with the community:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;“&lt;/i&gt;&lt;i&gt;I can't open accdb files in Access 2007 after they've been opened in 2010.”&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Access 2010 brings you many new features (&lt;a mce_href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx" href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx"&gt;Data Macros&lt;/a&gt;, Calculated Columns, etc.) that Access 2007 does not understand. If Access 2007 goes ahead and open a Database created/modified in 2010, it will ignore these new features and might even cause data loss or corrupt business logic. For example, a data macro validation rule that is forced in 2010 but ignored in 2007, this can cause data inconsistency. To prevent that from happening, we implemented the feature to block certain databases to open in Access 2007 after it's modified in 2010, or open it as read-only in 2007. &lt;/p&gt;&lt;p&gt;Access 2007 cannot open a database built or modified in Access 2010 if it uses:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;new sort orders,&lt;/li&gt;&lt;li&gt;Access 2010 new encryption, or&lt;/li&gt;&lt;li&gt;your application has been published to SharePoint. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For other new features as &lt;a mce_href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx" href="http://blogs.msdn.com/access/archive/2009/08/13/access-2010-data-macros-similar-to-triggers.aspx"&gt;Data Macros&lt;/a&gt;, Calculated Columns, &lt;a mce_href="http://blogs.msdn.com/access/archive/2009/11/14/build-navigation-ui-with-access-2010.aspx" href="http://blogs.msdn.com/access/archive/2009/11/14/build-navigation-ui-with-access-2010.aspx"&gt;Navigation&lt;/a&gt; controls, Web browser controls, and new layout for forms/reports, we did the work to allow the Access application that contains these features to open up in Access 2007 SP2, but objects containing these features are read-only. However, the application does not open in Access 2007 SP1, so please make sure you get SP2 for Access 2007.&lt;/p&gt;&lt;p&gt;What if the people you want to share your application with only has Access 2007? There is a way to “down-grade” your 2010 application to 2007. In short, delete the new features in your application and import all objects into a new Access 2010 blank application. This will create a new app that can work in Access 2007. &lt;/p&gt;&lt;p&gt;The article on &lt;a mce_href="http://msdn.microsoft.com/en-us/office/cc907897.aspx" href="http://msdn.microsoft.com/en-us/office/cc907897.aspx"&gt;http://msdn.microsoft.com/en-us/office/cc907897.aspx&lt;/a&gt; has more details. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9946925" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category></item><item><title>Access in Washington, DC</title><link>http://blogs.msdn.com/access/archive/2010/01/12/access-in-washington-dc.aspx</link><pubDate>Tue, 12 Jan 2010 20:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9947327</guid><dc:creator>BenHodes</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9947327.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9947327</wfw:commentRss><description>&lt;P&gt;This &lt;STRONG&gt;Thursday, January 14th&lt;/STRONG&gt; I will have the distinct pleasure of speaking to the &lt;A href="http://sugdc.org/" mce_href="http://sugdc.org/"&gt;Washington DC SharePoint User Group&lt;/A&gt;. I’ll be giving a talk on Access 2010, Access Services, and our much improved database manageability story.&lt;/P&gt;
&lt;P&gt;I currently have some time free from &lt;STRONG&gt;10am to 4pm &lt;/STRONG&gt;on &lt;STRONG&gt;Friday, January 15th&lt;/STRONG&gt;, and&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;I’m actively looking for someone in the greater DC area who would like to talk about their experiences with Access. I’d be excited to visit you at your place of work, whether you work alone, in a company of 100,000 people or in any situation in between.&lt;/P&gt;
&lt;P&gt;So if you’re in the DC area and are interested in some face time with the product team, I’d love to meet you. I probably only have time to meet with one or possibly two people face to face, but if we can’t visit you in person, we’d be happy to set up a phone call or a Live Meeting after we get back. &lt;/P&gt;
&lt;P&gt;If you'd be interested, please send me an E-mail (&lt;A href="mailto:BenHodes@microsoft.com" mce_href="mailto:BenHodes@microsoft.com"&gt;BenHodes@microsoft.com&lt;/A&gt;), and I’ll get in touch!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9947327" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+Team/default.aspx">Access Team</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2010/default.aspx">Access 2010</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+Services/default.aspx">Access Services</category></item></channel></rss>