<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.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>Tony's Microsoft Access Blog : Granite Fleet Manager</title><link>http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx</link><description>Tags: Granite Fleet Manager</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Building Scalable Databases: Perspectives on the War on Soft Deletes</title><link>http://msmvps.com/blogs/access/archive/2009/11/23/building-scalable-databases-perspectives-on-the-war-on-soft-deletes.aspx</link><pubDate>Tue, 24 Nov 2009 06:01:54 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1741889</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1741889</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1741889</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2009/11/23/building-scalable-databases-perspectives-on-the-war-on-soft-deletes.aspx#comments</comments><description>&lt;p&gt;This blog posting titled &lt;a href="http://www.25hoursaday.com/weblog/2009/11/23/BuildingScalableDatabasesPerspectivesOnTheWarOnSoftDeletes.aspx" target="_blank"&gt;Building Scalable Databases: Perspectives on the War on Soft Deletes&lt;/a&gt; is interesting reading describing what to do with deleted data.&amp;#160; The author comes to the correct conclusion, because he agrees with my viewpoint &amp;lt;smile&amp;gt;, that you model the business situation and mark records as inactive, canceled, etc.&amp;#160;&amp;#160; You seldom need or want to truly delete data.&lt;/p&gt;  &lt;p&gt;I used to have an inactive flag on the equipment in the &lt;a href="http://granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt;.&amp;#160; That worked for quite a while until I had someone tell me that they have reserve equipment that is only used when the California wild fires are rampant.&amp;#160; These fire engines are paid for by the state of California and stashed at various fire halls in strategic locations.&amp;#160; They are all identical.&amp;#160; Thus fire crews from outside the affected crews have already trained on that equipment and know how to use it.&amp;#160;&amp;#160; So now I have a status combo box which includes Reserve and Out of Service.&amp;#160; The Out of Service is meant for the situation where a given unit will be unavailable for a period of time longer than a few days.&amp;#160; For example maybe the boiler needs an inspection or the mechanic is waiting for parts to come from overseas.&lt;/p&gt;  &lt;p&gt;P.S.&amp;#160; I almost always add a general purpose comment memo field to strategic tables such as the equipment and the service order field.&amp;#160; And you can search in those fields.&amp;#160;&amp;#160; Because no matter how many explicit fields you create the users can always think up a few more but don’t have any place to put the random data.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1741889" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Database+Design/default.aspx">Database Design</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>New version of the Granite Fleet Manager - V1.63</title><link>http://msmvps.com/blogs/access/archive/2009/04/14/new-version-of-the-granite-fleet-manager-v1-63.aspx</link><pubDate>Wed, 15 Apr 2009 01:43:53 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1687578</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1687578</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1687578</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2009/04/14/new-version-of-the-granite-fleet-manager-v1-63.aspx#comments</comments><description>&lt;p&gt;A new version of the &lt;a href="http://www.granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; is available for &lt;a href="http://www.granitefleet.com/download.htm" target="_blank"&gt;download&lt;/a&gt;.&amp;nbsp; Nothing major.&amp;nbsp; Mostly a lot of updates in the temporary locations forms to make it easier to move equipment from job site to job site or back and forth to your main yard.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1687578" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Updating backend MDB tables, fields, relationships and indexes</title><link>http://msmvps.com/blogs/access/archive/2009/04/10/updating-backend-mdb-tables-fields-relationships-and-indexes.aspx</link><pubDate>Fri, 10 Apr 2009 22:00:01 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1686757</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1686757</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1686757</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2009/04/10/updating-backend-mdb-tables-fields-relationships-and-indexes.aspx#comments</comments><description>&lt;p&gt;Short posting &lt;p&gt;I like using the &lt;a href="http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm" target="_blank"&gt;Compare&amp;#39;Em&lt;/a&gt; utility which creates the necessary VBA code to create/update tables, fields, relationships and indexes.&amp;nbsp; It works by comparing your last version of the BE MDB with the latest development version of the BE MDB.&amp;nbsp;&amp;nbsp;&amp;nbsp; While I don&amp;#39;t need the Pro version nevertheless I paid the $10 for it.&amp;nbsp;&amp;nbsp; It does have it&amp;#39;s quirks about which I&amp;#39;ve emailed the author.&lt;/p&gt; &lt;p&gt;Long posting&lt;/p&gt; &lt;p&gt;I have a one record table in the front end and back end MDB with the FE and BE version number.&amp;nbsp;&amp;nbsp; Whenever I open the FE MDB I run code which compares the version numbers in the current FE MDB and BE MDB.&amp;nbsp; If different the code then executes subroutines based on the version on the BE.&amp;nbsp; As each version of the is updated I update the version field to the successfully updated version.&amp;nbsp; I also run the code if the user switches from one BE MDB to another.&lt;/p&gt; &lt;p&gt;I also execute queries in the midst of the above created VBA code to clean up data as required.&amp;nbsp; For example I recently created a service techs table in the &lt;a href="http://www.granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt;.&amp;nbsp; In the past the service techs fields was just a string field on the service order table.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;#39; Append records to ServiceRecords table&lt;br /&gt;strSQL = &amp;quot;INSERT INTO ServiceTech ( stServiceTech ) &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; IN &amp;#39;&amp;quot; &amp;amp; strDatabasePathandName &amp;amp; &amp;quot;&amp;#39; &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;SELECT srServicePerson FROM ServiceRecords &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot; IN &amp;#39;&amp;quot; &amp;amp; strDatabasePathandName &amp;amp; &amp;quot;&amp;#39; &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;GROUP BY srServicePerson &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HAVING (srServicePerson Is Not Null);&amp;quot;&lt;br /&gt;CurrentDb.Execute strSQL, dbFailOnError&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Note the IN statement which allows you to update tables in MDBs which aren&amp;#39;t linked.&amp;nbsp;&amp;nbsp; Of course I had to then update the service order with the autonumber ID in the above just created service techs table and then delete the field from the service order table.&lt;/p&gt; &lt;p&gt;As you well imagine there are many variations of John Smith in the various service orders.&amp;nbsp;&amp;nbsp; John, John S, John S., and so forth.&amp;nbsp; So I gave the users a form to clean up the data.&amp;nbsp;&amp;nbsp; (The High Rate record was for testing a high rate of pay and invoicing to ensure there was lots of room on various forms and reports.)&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access/ServiceTechsToMerge_5F00_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="426" alt="ServiceTechsToMerge" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access/ServiceTechsToMerge_5F00_thumb.jpg" width="312" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Mechanics aren&amp;#39;t paid for their typing or spelling.&amp;nbsp; &amp;lt;smile&amp;gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1686757" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Using pictures on a form and report</title><link>http://msmvps.com/blogs/access/archive/2008/11/30/using-pictures-on-a-form-and-report.aspx</link><pubDate>Sun, 30 Nov 2008 22:23:36 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655440</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1655440</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1655440</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/30/using-pictures-on-a-form-and-report.aspx#comments</comments><description>&lt;p&gt;The following question was asked in the comp.databases.ms-access newsgroup.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I&amp;#39;d like to add a picture in a report&amp;#39;s detail section where the path to the picture is from a table.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Incredibly easy.&amp;nbsp; The same code works on a form as well.&amp;nbsp; Using the Toolbox drop an image control on the reports detail section.&amp;nbsp;&amp;nbsp; Note that you will have to follow the dialog and actually insert an image.&amp;nbsp; But then go to the Picture property on the Format tab in the property sheet and delete the actual file.&amp;nbsp; You will probably want to set the Size Mode from clip to zoom. And rename the control to something meaningful. &lt;p&gt;Then in the report detail section in the On Print event you want to add the following lines of code  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If &amp;lt;logic if file available to view&amp;gt; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.PhotoImage.Picture = PhotoFilePath&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.PhotoImage.Picture = &amp;quot;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If  &lt;p&gt;PhotoFilePath being whatever logic you want to use to figure out the file that you want printed.  &lt;p&gt;You don&amp;#39;t want to do this logic in the Format event as Microsoft has told us, via Stephen Lebans, that using that event can lead to memory leak problems.&amp;nbsp; Or you can use BMP images.&amp;nbsp;&amp;nbsp; Which is rather impractical. &lt;blockquote&gt; &lt;p&gt;The reason for extensive bloating in Access when JPG or other graphic files are permanently embedded in forms or reports is that Access converts those file formats to BMP format.&amp;nbsp;&amp;nbsp; This made sense back in Access 2.0 days is viewing a JPG file was very slow as it requires lots of CPU cycles.&amp;nbsp; 80386 computers running Windows 3.1 were rather slow at that.&amp;nbsp; BMP format meant that you basically read the large file directly into the graphics card memory.&amp;nbsp;&amp;nbsp; In Access 2007 the Access product group have updated that logic so the BMP file format isn&amp;#39;t created any more.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Shameless plug:&amp;nbsp; I have a number of reports in the &lt;a href="http://granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; which print a &amp;quot;primary&amp;quot; and a number of &amp;quot;secondary&amp;quot; photo&amp;#39;s for each unit.&amp;nbsp;&amp;nbsp; See &lt;a href="http://granitefleet.com/ScreenShots/screen_MainMenu.htm" target="_blank"&gt;Granite Fleet manager Main Menu&lt;/a&gt; a screen shot and &lt;a title="Service Order Details (with Photo)" href="http://granitefleet.com/_files/Service%20Order%20Details%20(with%20Photo).pdf"&gt;Service Order Details (with Photo)&lt;/a&gt; for a sample report.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655440" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>I never knew that - view linked table file path and name</title><link>http://msmvps.com/blogs/access/archive/2008/11/30/i-never-knew-that-view-linked-table-file-path-and-name.aspx</link><pubDate>Sun, 30 Nov 2008 22:08:17 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655438</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1655438</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1655438</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/30/i-never-knew-that-view-linked-table-file-path-and-name.aspx#comments</comments><description>&lt;p&gt;I was in the table view in Access 2003 and accidentally hovered over a linked table.&amp;nbsp; A tool tip (mouse over tip) displayed itself a second later telling me the backend linked MDB file path and name.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/ToolTipLinkedFilePathAndMDB_5F00_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="326" alt="ToolTipLinkedFilePathAndMDB" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/ToolTipLinkedFilePathAndMDB_5F00_thumb.jpg" width="515" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Cool!&amp;nbsp; I never knew that.&lt;/p&gt; &lt;p&gt;I should add that I go to great lengths to ensure a user doesn&amp;#39;t have a problem with linked tables.&amp;nbsp;&amp;nbsp; When the user opens the app I ensure that all tables have the same linked path and file name.&amp;nbsp;&amp;nbsp; Just in case.&amp;nbsp; You never know when something really, really weird could happen when relinking tables.&amp;nbsp;&amp;nbsp; And I&amp;#39;d hate to have to debug a customers problem where a few tables are pointing to a demo MDB and all the other tables are pointing to their live data table.&lt;/p&gt; &lt;p&gt;Other things I do on start are opening a recordset based on a particular table and check for a particular field in it.&amp;nbsp; If that fails I assume the BE isn&amp;#39;t linked properly and start up the linking table logic.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Note that I install the &lt;a href="http://granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; into the users Application Data folder and&amp;nbsp; sub folder of Granite Fleet Mgr using Inno Setup.&amp;nbsp; I also install the Demo MDB and the demo graphics files into that same folder.&amp;nbsp; However the live empty Data.MDB gets installed into My Documents\Granite Fleet Mgr.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I then check to see if there is a license key file in the users My Documents\Granite Fleet Mgr folder.&amp;nbsp; If so I then look to see if there is only one data MDB file in that folder. I inform the user and ask if they want to relink to that table.&amp;nbsp; If there are two or more data MDBs then I inform them and pop up a relinking form.&amp;nbsp; This handles the situation where I&amp;#39;ve converted their data from a spreadsheet and emailed the user that MDB and the license key file.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/DatabaseLocations_5F00_6.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="378" alt="DatabaseLocations" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/DatabaseLocations_5F00_thumb_5F00_2.jpg" width="502" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Note how the number of Units and Service Orders are displayed in the list box.&amp;nbsp; I&amp;#39;ve found this to be of great value when working with clients and somehow multiple versions of the BE data MDB are floating about.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Thanks to Jim, a friend and client, who suggested adding the Selected Data File Folder field.&amp;nbsp; If folks are interested and understand what is all going on then that&amp;#39;s all the better.&amp;nbsp;&amp;nbsp; That field can be double clicked and Windows Explorer opens to that folder.&amp;nbsp; The code behind that double click event for the Selected Data File Folder is:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Call RunShellExecute(tt_StripFromLastRight(CurrentDb.Name, &amp;quot;\&amp;quot;)) &lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;tt_StripFromLastRight is a function which removes the &amp;quot;\&amp;quot; and everything to the right leaving just the path. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If nothing found as per the above paragraphs then the linking table logic first examines the current FE path for the Granite Fleet Mgr.INI file. If found I then relink to the BE MDB as specified in that INI file.&amp;nbsp; This handles the situation where the app has been previously installed on the system and the INI file is pointing to a network file location.&lt;/p&gt; &lt;p&gt;If that file isn&amp;#39;t found then I assume this is the first time the user has ever run the app and link to the demo MDB.&lt;/p&gt; &lt;p&gt;I also display the path and file name of the BE MDB in the About screen.&amp;nbsp; As well as the current FE MDB/MDE file path and name.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/AppMDBDataMDB_5F00_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="47" alt="AppMDBDataMDB" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Ineverknewthatviewlinkedtablefilepathand_5F00_1429C/AppMDBDataMDB_5F00_thumb.jpg" width="473" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I also put in a double click event on those two fields which the user can then open up Windows Explorer.&amp;nbsp; Do you really want to tell a user how to use Windows Explorer to navigate to a path that Windows by default hides from the user?&amp;nbsp; No, I didn&amp;#39;t think you would either.&lt;/p&gt; &lt;p&gt;Still reading?&amp;nbsp;&amp;nbsp; All this when all I meant to type was the first few paragraphs. &amp;lt;sigh&amp;gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655438" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>New version of the Granite Fleet Manager</title><link>http://msmvps.com/blogs/access/archive/2008/11/30/new-version-of-the-granite-fleet-manager.aspx</link><pubDate>Sun, 30 Nov 2008 21:13:46 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655436</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1655436</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1655436</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/30/new-version-of-the-granite-fleet-manager.aspx#comments</comments><description>&lt;p&gt;Ten year annual maintenance costs report &lt;br /&gt;Email feedback form &lt;br /&gt;Added meaningful error 2114 screen &lt;br /&gt;Minor UI improvements and bug fixes  &lt;p&gt;&lt;a title="http://granitefleet.com/" href="http://granitefleet.com/"&gt;http://granitefleet.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Commissions paid to sales agents.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655436" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>My muddiness when it comes to OpenArgs</title><link>http://msmvps.com/blogs/access/archive/2008/11/26/my-muddiness-when-it-comes-to-openargs.aspx</link><pubDate>Wed, 26 Nov 2008 21:37:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655164</guid><dc:creator>Tony</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1655164</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1655164</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/26/my-muddiness-when-it-comes-to-openargs.aspx#comments</comments><description>&lt;p&gt;I was getting an syntax error message when I clicked on a New button on the &lt;a href="http://granitefleet.com/ScreenShots/screen_EquipmentQuickFind.htm" target="_blank"&gt;Equipment Quick Finder form&lt;/a&gt;.&amp;nbsp; The &lt;a href="http://granitefleet.com/ScreenShots/screen_Equipment.htm" target="_blank"&gt;equipment form&lt;/a&gt; in the Granite Fleet Manager executes a reasonable amount of code on startup.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I had added that New button to the Quick Finder form when I created it and all was well.&amp;nbsp; Trouble is I added some code in the Equipment form that required the OpenArgs start with &amp;quot;New&amp;quot; when the record did not exist.&amp;nbsp;&amp;nbsp; And now the code was causing me troubles. While I fixed the immediate problem I realized I had a larger issue.&lt;/p&gt; &lt;p&gt;When testing I realized that if I&amp;#39;m updating a piece of equipment then the OpenArgs will legitimately be empty.&lt;/p&gt; &lt;p&gt;So I added the following code in the forms Open Event.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If IsNull(Me.OpenArgs) And Len(Me.Filter) = 0 Then _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &amp;quot;OpenArgs is null and Filter is empty.&amp;quot;&lt;/p&gt; &lt;p&gt;I also did a Find through all the code looking for OpenForm &amp;quot;Equipment&amp;quot; just to ensure I didn&amp;#39;t have any other problems hidden away somewhere else. &lt;p&gt;The lesson is that if you are depending that OpenArgs have values in it ensure that values are always present.&amp;nbsp; Pop up a message for the programmer to give him (or her) a kick. &lt;p&gt;This is a follow up to the &lt;a href="http://msmvps.com/blogs/access/archive/2008/11/18/watch-out-for-null-openargs.aspx" target="_blank"&gt;Watch out for Null OpenArgs&lt;/a&gt; blog posting.&amp;nbsp;&amp;nbsp; (And I sincerely hope my clients never chip in to purchase the chair mentioned at &lt;a href="http://msmvps.com/blogs/access/archive/2007/06/06/microsoft-we-share-your-pain.aspx" target="_blank"&gt;Microsoft: We Share Your Pain&lt;/a&gt;.)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655164" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Email feedback</title><link>http://msmvps.com/blogs/access/archive/2008/11/22/email-feedback.aspx</link><pubDate>Sun, 23 Nov 2008 02:32:43 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1654834</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1654834</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1654834</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/22/email-feedback.aspx#comments</comments><description>&lt;p&gt; I got to thinking about how to make it easier for folks to send me feedback good, bad or ugly.&amp;nbsp;&amp;nbsp; And I realized it would be quite simple.&amp;nbsp; While my software does have SMTP email code this requires users to configure the system for their email account, SMTP server, etc, etc.&amp;nbsp; So I decided to use their current email client.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Emailfeedback_5F00_112E4/EmailFeedback_5F00_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="433" alt="EmailFeedback" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Emailfeedback_5F00_112E4/EmailFeedback_5F00_thumb.jpg" width="399" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The code behind the buttons is ridiculously easy.&lt;/p&gt; &lt;p&gt;The first button:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;DoCmd.SendObject acSendNoObject, , , TechSupportEmailAddress, , , _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Granite Fleet Mgr comments&amp;quot;, , True &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Where TechSupportEmailAddress is a global constant that has my email address in it. &lt;p&gt;The second button uses the the API code from &lt;a href="http://www.mvps.org/access/api/api0049.htm" target="_blank"&gt;API: Copy variables/control contents to memory&lt;/a&gt; and has the following single line. &lt;blockquote&gt; &lt;p&gt;Call ClipBoard_SetText(TechSupportEmailAddress) &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I should&amp;#39;ve done this a long time ago.&amp;nbsp;&amp;nbsp; And it&amp;#39;s quite easy to drop into other systems so I&amp;#39;ll be including it from now on whenever I build a custom system for someone.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1654834" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>I just love the Access Developers Handbook</title><link>http://msmvps.com/blogs/access/archive/2008/11/19/i-just-love-the-access-developers-handbook.aspx</link><pubDate>Wed, 19 Nov 2008 10:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1654542</guid><dc:creator>Tony</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1654542</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1654542</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/19/i-just-love-the-access-developers-handbook.aspx#comments</comments><description>&lt;p&gt;I recently added the ability to view unit photo&amp;#39;s on the main menu of the &lt;a target="_blank" href="http://granitefleet.com/"&gt;Granite Fleet Manager&lt;/a&gt;.&amp;nbsp;&amp;nbsp; However if the user doesn&amp;#39;t have photos or doesn&amp;#39;t want to view them on the main menu then I wanted the form to be centered.&amp;nbsp; I figured that the &lt;a target="_blank" href="http://www.mcwtech.com/Books.aspx/"&gt;Access Developers Handbook&lt;/a&gt; would have the code to centre a form when it was shrunk and I was correct.&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;It took much longer to comb through the relevant chapter finding the code I needed than to import, implement and test the code. What an efficient use of my time! While I don&amp;#39;t use the books much lately every time I opened them up I saved the price of the books.&amp;nbsp;&amp;nbsp; And I used the books lots years ago.&lt;/p&gt;
&lt;p&gt;My understanding is that the Sybex figures there would be an insufficient market for an Access 2007 version.&amp;nbsp; &amp;lt;sigh&amp;gt;&amp;nbsp; However I suspect almost all the code will work quite nicely in Access 2007.&amp;nbsp; I also think the authors have generally moved on to other technologies.&lt;/p&gt;
&lt;p&gt;All I had to was import a class module from the appropriate MDB on their CD, add four lines of code&amp;nbsp; and the resized form nicely centered.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;At the top of the VBA code&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Private mfi As FormInfo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the load event:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Set mfi = New FormInfo&lt;br /&gt;Set mfi.Form = Me&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and in my subroutine which decides if I&amp;#39;m going to display the photos on the menu or not: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;mfi.Center&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Below are the two menu forms. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.IjustlovetheAccessDevelopersHandbook_5F00_14B99/Main-Menu-_2D002D00_-with-photo_5F00_2.jpg"&gt;&lt;img border="0" width="308" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.IjustlovetheAccessDevelopersHandbook_5F00_14B99/Main-Menu-_2D002D00_-with-photo_5F00_thumb.jpg" alt="Main Menu -- with photo" height="224" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.IjustlovetheAccessDevelopersHandbook_5F00_14B99/Main-Menu-_2D002D00_-Small_5F00_2.jpg"&gt;&lt;img border="0" width="308" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.IjustlovetheAccessDevelopersHandbook_5F00_14B99/Main-Menu-_2D002D00_-Small_5F00_thumb.jpg" alt="Main Menu -- Small" height="224" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The code behind the form to shrink the form is fairly simple:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Me.InsideWidth = 5.6 * 1440&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The 5.6 being inches as I&amp;#39;m not a metric person and 1440 being the number of twips in an inch.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Now you will notice that the backup (floppy diskette image) and the stop buttons were also moved.&amp;nbsp; I simply manually moved them left to suit and recorded the left position of the controls.&amp;nbsp; Then I put them back on the right hand side of the form and inserted the following code.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Me.cmdBackup.Left = 4.6667 * 1440&lt;br /&gt;Me.cmdQuit.Left = 5.1458 * 1440 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The program randomly selects the photo from the recordset of photos that are present in the system when the main menu is opened.&amp;nbsp; You can them scroll back and forth among the photos.&amp;nbsp; This feature is not that useful from a technical or user viewpoint.&amp;nbsp; However I figure it will look neat when the folks are looking at the demo.&lt;/p&gt;
&lt;p&gt;(The use of the word neat may help figure out approximately my age.&amp;nbsp; If you pay attention to those kinds of things that is.)&lt;/p&gt;
&lt;p&gt;Edited 2009-05-19 to change a URL from a spammy domain to a working domain.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1654542" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>New version of the Granite Fleet Manager available for download</title><link>http://msmvps.com/blogs/access/archive/2008/11/19/new-version-of-the-granite-fleet-manager-available-for-download.aspx</link><pubDate>Wed, 19 Nov 2008 09:35:02 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1654540</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1654540</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1654540</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/19/new-version-of-the-granite-fleet-manager-available-for-download.aspx#comments</comments><description>&lt;p&gt;I just uploaded the latest version of the &lt;a href="http://granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; to the website.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Added customer invoicing including labour rates, markup percentages on parts , parts types and external invoices and sales taxes.&amp;nbsp;&amp;nbsp; Added internal invoice number and customer purchase order number to service order so the administration staff can ensure that the service order was invoiced.&amp;nbsp; Extensively reworked the service order forms.&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;Selecting reports by individual customers now shows your price to them rather than your cost&lt;/li&gt; &lt;li&gt;Added mechanics comments to service order.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Added logo to printed service order.&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;Added Service Order Quick Find so you can do extensive searching&lt;/li&gt; &lt;li&gt;Updating the hourly rates for Service Techs will ask if you want to update the service orders as well to get a more accurate cost.&lt;/li&gt; &lt;li&gt;Temporary locations will now appear on the overdue items screen and report&lt;/li&gt; &lt;li&gt;Added an overdue items report&lt;/li&gt; &lt;li&gt;Export reports to Excel&lt;/li&gt; &lt;li&gt;Random equipment photos on main menu&lt;/li&gt; &lt;li&gt;Many minor UI improvements &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The customer invoicing was a very interesting feature is that touched many forms and reports through out the system.&amp;nbsp; I wanted the screens and reports to work equally well if you were working on your own fleet of equipment or on someone else&amp;#39;s equipment.&amp;nbsp;&amp;nbsp; One difference of course is that the customer name should appear where appropriate.&amp;nbsp; And of course you don&amp;#39;t want your customer knowing your cost so they should only be seeing their price.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The exports to Excel was quite interesting in many respects.&amp;nbsp; I&amp;#39;ll probably create a page on my main website with all my Excel code.&amp;nbsp; But some things I&amp;#39;m doing is after the reports recordset gets exported to Excel is I delete all fields that are long integer and autonumber keys.&amp;nbsp; Or long integer and end in ID.&amp;nbsp;&amp;nbsp; All primary and foreign keys I use are autonumber and end in ID.&amp;nbsp;&amp;nbsp; One particular column, if it&amp;#39;s present in that Excel spreadsheet, is bolded and highlighted in red.&amp;nbsp;&amp;nbsp; Other columns were deleted if they were required for reporting sequencing purposes but not required in the Excel spreadsheet.&lt;/p&gt; &lt;p&gt;A friend who is a heavy duty mechanic and instructor sat down in front of the system for an hour.&amp;nbsp; It was an eye opener as I watched how he moved around the system.&amp;nbsp; I made lots of little enhancements due to his questions and comments as he went along.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I&amp;#39;m going to sit another friend down in front of the system in a few weeks.&amp;nbsp; She seldom uses a computer and doesn&amp;#39;t even have an email address.&amp;nbsp; &amp;lt;gasp&amp;gt;&amp;nbsp; She does text a lot to her daughter via cell phone though she has joined a part of the 21st century.&lt;/p&gt; &lt;p&gt;Finally the glitter feature I added was viewing unit photos on the main menu.&amp;nbsp; To be blunt this is a relatively useless feature as far as regular users are concerned.&amp;nbsp; However I&amp;#39;m hoping that folks who are looking at the demo will be slightly impressed.&amp;nbsp; Or as a friend put it &amp;quot;eye candy&amp;quot;.&amp;nbsp; Who knows if this will help or hinder.&amp;nbsp; &amp;lt;smile&amp;gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1654540" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Losing the [Event Procedure] on a command button</title><link>http://msmvps.com/blogs/access/archive/2008/11/11/losing-the-event-procedure-on-a-command-button.aspx</link><pubDate>Tue, 11 Nov 2008 07:40:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653731</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1653731</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1653731</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/11/losing-the-event-procedure-on-a-command-button.aspx#comments</comments><description>&lt;p&gt;I just added a tab control to my standard File Locations form in the Granite Fleet Manager program.&amp;nbsp;&amp;nbsp; I added the tab control and cut and pasted all the controls from the form to the page on the tab control.&amp;nbsp; I then discovered that I had lost all the [Event Procedure] entries in the command buttons.&amp;nbsp;&amp;nbsp; I&amp;#39;ve added them back in before I took this screen shot.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.LosingtheEventProcedureonacommandbutton_5F00_97F/LoseCodeEvent_5F00_4.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="301" alt="LoseCodeEvent" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.LosingtheEventProcedureonacommandbutton_5F00_97F/LoseCodeEvent_5F00_thumb_5F00_1.jpg" width="548" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I&amp;#39;ve noticed this behavior occasionally before but had never realized what caused this.&amp;nbsp; In this case it was quite easy to recall as I had made this change a few days ago and all three command buttons on the form were missing the [Event Procedure]&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;I&amp;#39;ve decided to install the Access Front End (FE) and the demo BE MDB and demo JPG files in the users Application Data\Granite Fleet Manager folder.&amp;nbsp; I decided to install the live data BE MDB into the users My Documents\Granite File Manager folder.&amp;nbsp; Thus the data MDB is easier to work with if the user wants to move the files onto a memory stick or anything else.&amp;nbsp; The default settings in Windows Explorer make getting to the files in the Application Data folder rather difficult.&lt;/p&gt; &lt;p&gt;However my current database location form displays all the BE MDBs in the folder in a list box.&amp;nbsp; I felt that while that was good for me in testing and good for network installs it was sub optimal for an end user who just wants to use the program on their own PC.&amp;nbsp; (Sub optimal, yeah, that&amp;#39;s a nice euphemism for sucks.)&lt;/p&gt; &lt;p&gt;For stand alone users they only care about the demo system and the data system.&amp;nbsp; So on the Basic (Single User) page on the tab control I created a listbox which displays all the BE MDBs in the same folder as the FE MDE is installed and all the BE MDBs in the My Documents\Granite Fleet Manager.&lt;/p&gt; &lt;p&gt;And I cut and paste the already existing controls on the form to the tab Advanced (Networks) page on the tab control.&amp;nbsp; Which caused this problem.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;A refinement&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;I then thought about things a bit.&amp;nbsp; Once the user sends me some money I email them a 265 byte license key file containing their encrypted business name.&amp;nbsp; Now I can tell them just to drag and drop that file into their My Documents\Granite Fleet Manager folder.&amp;nbsp; The application looks for a key file in that folder and asks the user if they want to relink to the data file in that folder.&amp;nbsp;&amp;nbsp; If they click Ok then they get relinked automatically.&amp;nbsp; They don&amp;#39;t even see the above form.&amp;nbsp;&amp;nbsp; Now if they ever do want to switch between the data and the demo BE MDBs they can get to the above folder.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Another refinement&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;A further refinement is to handle the situation where they email me a spreadsheet containing all their equipment.&amp;nbsp; I will import the spreadsheet into the data MDB and email them back a complete data MDB.&amp;nbsp; Typically with the name of their organization in the file name.&lt;/p&gt; &lt;p&gt;Below is the screen should the license key and two BE MDBs exist in the My Documents\Granite Fleet Manager folder.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.LosingtheEventProcedureonacommandbutton_5F00_97F/SimpleFileLocationsForm_5F00_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="317" alt="SimpleFileLocationsForm" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.LosingtheEventProcedureonacommandbutton_5F00_97F/SimpleFileLocationsForm_5F00_thumb.jpg" width="471" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;That should be simple enough for any novice computer user.&amp;nbsp;&amp;nbsp; Maybe. I hope.&lt;/p&gt; &lt;p&gt;Note how I display the unit and service order count in the list box.&amp;nbsp; I&amp;#39;ve taken to displaying the number of records in one or two key tables in the app on the main menu.&amp;nbsp;&amp;nbsp;&amp;nbsp; This really, really saved my butt big time once about eight or nine years ago.&amp;nbsp; I had to convert their backend to the new data format manually.&amp;nbsp; (Now I use VBA code and the Compare&amp;#39;Em utility.)&amp;nbsp; Well, I screwed up and converted a copy they had emailed me a few weeks before. &lt;/p&gt; &lt;p&gt;I also added a flag to a table (I always have a GlobalOptions table) in the BE MDB which states if the MDB is Demo, Data or Test.&amp;nbsp; Test should only reside on my system.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653731" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/bug/default.aspx">bug</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Adding a record count to a tab caption on a tab control</title><link>http://msmvps.com/blogs/access/archive/2008/11/04/adding-a-record-count-to-a-tab-caption-on-a-tab-control.aspx</link><pubDate>Wed, 05 Nov 2008 06:10:33 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653112</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1653112</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1653112</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/11/04/adding-a-record-count-to-a-tab-caption-on-a-tab-control.aspx#comments</comments><description>&lt;p&gt;I decided that it would be useful for someone looking at a particular part in the &lt;a href="http://granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; to know if there were any notes associated with that part.&amp;nbsp;&amp;nbsp; The idea being that there seldom would be any such and the mechanic wouldn&amp;#39;t have any reason to click on on that tab.&amp;nbsp; So I should visually indicate that this part has some notes.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Why does a part need notes? Not if it&amp;#39;s 0W30 motor oil&amp;nbsp; But if it&amp;#39;s an custom part for a machine built overseas and the only source of parts is one distributor at the other end of your country or your continent that took you hours to locate then having notes is a good thing.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Addingarecordcounttoatabonatabcontrol_5F00_B8F/PartsNotesCount_5F00_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="154" alt="PartsNotesCount" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access.Addingarecordcounttoatabonatabcontrol_5F00_B8F/PartsNotesCount_5F00_thumb.jpg" width="394" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The code is quite simple.&amp;nbsp; The page on the tab control is named pagPartsNotes.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;If Not IsNull(Me.pID) Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strSQL = &amp;quot;SELECT Count(PartsNotes.pnID) AS CountOfNotes &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;FROM PartsNotes &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;GROUP BY PartsNotes.pnPartsID &amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HAVING pnPartsID=&amp;quot; &amp;amp; Me.pID &amp;amp; &amp;quot;;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set rs = CurrentDb.OpenRecordset(strSQL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If rs.EOF Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NotesCount = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.MoveFirst&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NotesCount = rs!CountOfNotes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.pagPartsNotes.Caption = &amp;quot;Notes - &amp;quot; &amp;amp; NotesCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.Close: Set rs = Nothing&lt;br /&gt;End If&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The first line &lt;font face="cou"&gt;If Not IsNull(Me.pID)&lt;/font&gt; Then is present to see if the user is adding a new record.  &lt;p&gt;Also note that if you add a new record from this form you&amp;#39;ll also need to reset the Notes tab caption.&amp;nbsp;&amp;nbsp; I also didn&amp;#39;t bother putting any logic in to update the count of notes as the user was entering them.&amp;nbsp; Hmm, for the sake of neatness and tidiness though I should. &lt;p&gt;But then I thought about the mechanics using the system and figured that maybe this was just a bit too subtle for the folks.&amp;nbsp; (Jim, an excellent person at a client who has made a large number of UI suggestions to me over the years, is good at questioning my assumptions and who reads this blog, is now grinning.)&amp;nbsp; Now don&amp;#39;t get me wrong.&amp;nbsp; The folks using the system are great people but noticing subtle differences on computer screens just isn&amp;#39;t their strength.&lt;/p&gt; &lt;p&gt;So I decided to give Stephen Lebans &lt;a href="http://lebans.com/tabcolors.htm" target="_blank"&gt;Tabs.zip&lt;/a&gt; a try.&amp;nbsp; Trouble is his solution requires fixed tab widths which I&amp;#39;d prefer to not use as I&amp;#39;ll be adding more tabs when I add inventory to the system. &lt;/p&gt; &lt;p&gt;Given that Google and Google Groups are useless for searching I asked around.&amp;nbsp; Former Access MVP and current Microsoft tester Jeff Conrad told me about his resource page &lt;a href="http://www.accessmvp.com/JConrad/accessjunkie/tabcolors.html" target="_blank"&gt;CSD - Tab Control Colors&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Hmm, those solutions are decent but a bit complex for right now.&amp;nbsp; So I&amp;#39;m going to think about this.&amp;nbsp; And I just might add a text control that contains a note along the lines of &amp;quot;There are x notes present.&amp;quot; which is only visible if there are notes.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653112" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Referring to a control's label</title><link>http://msmvps.com/blogs/access/archive/2008/10/04/referring-to-a-control-s-label.aspx</link><pubDate>Sat, 04 Oct 2008 20:58:06 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649745</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1649745</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1649745</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/10/04/referring-to-a-control-s-label.aspx#comments</comments><description>&lt;p&gt;rkc posted a snippet of code in a thread titled &lt;a href="http://groups.google.ca/group/comp.databases.ms-access/msg/e2a1c0b247b7879a?hl=en" target="_blank"&gt;Access an attached label in VBA&lt;/a&gt; on how to refer to a control&amp;#39;s label using some syntax I&amp;#39;ve never seen used in exactly that fashion.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;With ctlCurrentControl&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Controls(0).BackColor = lngYellow&lt;br /&gt;End With&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;which I then extended to &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Me.&amp;lt;controlname&amp;gt;.controls(0).BackColor = lngYellow&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;In this thread the original posted wanted to change the background colour of the label when the user entered the control.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;I could&amp;#39;ve used that logic to change the control&amp;#39;s label caption in my &lt;a href="http://www.granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt; app.&amp;nbsp;&amp;nbsp; I allow the user to select either miles or kilometers as the unit of measure.&amp;nbsp; I also allow the user to change the units permanent or temporary location to suit their business.&amp;nbsp; For one client the temporary location caption is Job Site while another is Farm.&amp;nbsp;&amp;nbsp; On those I renamed the label to be something like lblControlName and referred to it directly such as&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;me.lblControlName.Caption = SomeValue&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649745" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>The sordid life of software bugs, exposed!</title><link>http://msmvps.com/blogs/access/archive/2008/09/25/the-secret-life-of-software-bugs-exposed.aspx</link><pubDate>Thu, 25 Sep 2008 22:00:09 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648917</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1648917</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1648917</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/09/25/the-secret-life-of-software-bugs-exposed.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/xweb/archive/2008/09/19/the-secret-life-of-software-bugs-exposed.aspx" target="_blank"&gt;The sordid life of software bugs, exposed!&lt;/a&gt; is a very interesting look into the software bug process within Microsoft.&amp;nbsp; While this is about another MS product my impression is that this a very common approach within Microsoft.&amp;nbsp;&amp;nbsp; If you are going to report a bug to Microsoft it helps to have an exact repro scenario including an example file if appropriate and why you think it&amp;#39;s important to a lot of people that Microsoft should fix it ASAP versus in the next Service Pack versus never.&lt;/p&gt; &lt;p&gt;I do something similar but vastly simplified in my shrink wrap program the &lt;a href="http://www.granitefleet.com/" target="_blank"&gt;Granite Fleet Manager&lt;/a&gt;.&amp;nbsp;&amp;nbsp; With a few minor exceptions.&amp;nbsp; Every time I come across a bug or problem that I can&amp;#39;t fix and test in five minutes it usually gets entered into an Access database.&amp;nbsp;&amp;nbsp;&amp;nbsp; Now if the bug or problem in a feature that I&amp;#39;m working on and I&amp;#39;m going to get to it in a day or two then I&amp;#39;ll enter it in my active OneNote page I use as a notepad for that particular feature.&amp;nbsp; Then I cross it off once I&amp;#39;ve done using the strikethrough font capability.&amp;nbsp; (I&amp;#39;ve added the strikethrough button to my OneNote Toolbar.)&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;I frequently find that as I go through my list of outstanding bugs that I&amp;#39;ve already done several but had forgotten they were in my list.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648917" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Microsoft Access Report Printing Criteria Selection Form page updated</title><link>http://msmvps.com/blogs/access/archive/2008/09/10/microsoft-access-report-printing-criteria-selection-form-page-updated.aspx</link><pubDate>Thu, 11 Sep 2008 04:47:32 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1647441</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1647441</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1647441</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/09/10/microsoft-access-report-printing-criteria-selection-form-page-updated.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve completely updated the page at &lt;a href="http://www.granite.ab.ca/accsrprt.htm" target="_blank"&gt;Microsoft Access Report Printing Criteria Selection Form&lt;/a&gt; with the latest code that I currently use.&amp;nbsp; That page was created in about 1996 or so and was among the first five or ten pages I ever created.&amp;nbsp; So it was long overdue.&amp;nbsp; &amp;lt;smile&amp;gt;&lt;/p&gt; &lt;p&gt;I also put a link in to the &lt;a href="http://www.granite.ab.ca/fleet/screen_ReportCrtieriaSelection.htm" target="_blank"&gt;screen shot&lt;/a&gt; that&amp;#39;s in my &lt;a href="http://www.granite.ab.ca/fleet/" target="_blank"&gt;Fleet Management System&lt;/a&gt; application that I&amp;#39;m working on.&amp;nbsp; Hey, that&amp;#39;s a shameless plug to see if your employer or someone you know might be interested in that system.&amp;nbsp;&amp;nbsp; And I pay a commission.&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1647441" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Don't forget the small touches - Invoice number and Set date range to last month</title><link>http://msmvps.com/blogs/access/archive/2008/07/13/don-t-forget-the-small-touches-invoice-number-and-set-date-range-to-last-month.aspx</link><pubDate>Sun, 13 Jul 2008 21:23:01 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1640673</guid><dc:creator>Tony</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1640673</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1640673</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/07/13/don-t-forget-the-small-touches-invoice-number-and-set-date-range-to-last-month.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m just finishing up adding customer invoicing functionality to my &lt;a href="http://www.granite.ab.ca/fleet/" target="_blank"&gt;Fleet Management&lt;/a&gt; app.&amp;nbsp; One bit of functionality a client requested was the ability to know if a customer service order had been invoiced separately by the branch office accounting department.&amp;nbsp; The idea as that the mechanics would only give the customer a service order itemizing the work done, parts used, etc, etc while the accounting department would give the customer the official invoice.&amp;nbsp;&amp;nbsp; And most importantly the accounting department would ensure they got paid.&lt;/p&gt; &lt;p&gt;At first a simple check box was requested but then I realized putting an invoice number would be better.&amp;nbsp; The accounting department would enter the invoice number.&amp;nbsp; Thus not only the accounting department know that the service order had been put on a invoice they would be able to track the paper work better.&lt;/p&gt; &lt;p&gt;I also decided that a purchase order number field would sometimes also be useful.&lt;/p&gt; &lt;p&gt;The accounting department needs to review all the service orders to ensure they all have invoice numbers.&amp;nbsp; And of course they are going to really want to do this for last month and this month. So rather than making them futz around with the date selection boxes and clicking on arrow buttons I decided to give them two command buttons.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access/SetDateRange_5F00_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="430" alt="SetDateRange" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/access/SetDateRange_5F00_thumb.jpg" width="539" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The code behind the buttons is: &lt;p&gt;Me.FromServiceDate = DateSerial(Year(Date), Month(Date) - 1, 1)&lt;br /&gt;Me.ToServiceDate = DateSerial(Year(Date), Month(Date), 1) - 1  &lt;p&gt;and&lt;/p&gt; &lt;p&gt;Me.FromServiceDate = DateSerial(Year(Date), Month(Date), 1)&lt;br /&gt;Me.ToServiceDate = Date  &lt;p&gt;I might rename the command buttons as the names are kind of awkward.&amp;nbsp; Nevertheless I&amp;#39;ll publish the screen shot and four lines of code now.&lt;/p&gt; &lt;p&gt;I&amp;#39;ll probably never hear from anyone about how useful these two little buttons are.&amp;nbsp; But folks are going to use those somewhat and are, hopefully, be thinking &amp;quot;That&amp;#39;s nice.&amp;quot;&lt;/p&gt; &lt;p&gt; By the way the various selection criteria are enabled or disabled depending on whether the report has those fields.&amp;nbsp; In this particular report the &amp;quot;Job Site zzzzz&amp;quot; list box isn&amp;#39;t used.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Also note that this app allows the users to choose the names of the temporary and permanent location.&amp;nbsp; In this testing database they are &amp;quot;Job Site zzzzz&amp;quot; and &amp;quot;Branch Office&amp;quot;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1640673" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Setfocus and subforms - 2165 "You can't hide a control that has the focus."</title><link>http://msmvps.com/blogs/access/archive/2008/06/27/setfocus-and-subforms-2165-quot-you-can-t-hide-a-control-that-has-the-focus-quot.aspx</link><pubDate>Fri, 27 Jun 2008 22:15:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1638526</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1638526</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1638526</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/06/27/setfocus-and-subforms-2165-quot-you-can-t-hide-a-control-that-has-the-focus-quot.aspx#comments</comments><description>&lt;p&gt;I was quite puzzled.&amp;nbsp;&amp;nbsp; I wanted to setup some fields on my&amp;nbsp;&lt;a target="_blank" href="http://www.granitefleet.com/"&gt;Granite Fleet Manager&lt;/a&gt;&amp;nbsp;so that the user could toggle off or on the item cost or price.&amp;nbsp;&amp;nbsp; For example they might want to do up a quote for someone and just show the price.&amp;nbsp; (Hmm, I&amp;#39;ll have to add another toggle button to hide the markup.)&lt;/p&gt;
&lt;p&gt;To make some fields non visible I had to move the Setfocus elsewhere as otherwise I got error 2165 &amp;quot;You can&amp;#39;t hide a control that has the focus.&amp;quot;.&amp;nbsp; As these were subforms the quick and dirty approach was to create a control on the main form, set the focus there and then figure out a better solution.&lt;/p&gt;
&lt;p&gt;Well that didn&amp;#39;t work.&amp;nbsp;&amp;nbsp; Upon much mucking with code figuring things out I was starting to understand what was happening.&amp;nbsp; Close examination of the two fields circled on the form below you can see how they are both slightly highlighted indicating they both have the focus.&amp;nbsp; First time I can recall coming across this interesting concept&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/access/WindowsLiveWriter/Setfocusandsubforms2165Youcanthideacont_A06/FormAndSubformFocus_4.jpg"&gt;&lt;img border="0" width="483" src="http://msmvps.com/blogs/access/WindowsLiveWriter/Setfocusandsubforms2165Youcanthideacont_A06/FormAndSubformFocus_thumb_1.jpg" alt="FormAndSubformFocus" height="310" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Clearly I need to change the focus to a control on the subform.&amp;nbsp; But there are three subforms on that form that could have the cost or the price I want to make non visible.&amp;nbsp;&amp;nbsp; So how do I do that?&lt;/p&gt;
&lt;p&gt;Now there might be more elegant solutions but I decided to save a flag value of the subform that I&amp;#39;m making the fields non visible.&amp;nbsp; Then depending on which subform I had the error on I would move the focus to a field just to the left of the fields being hidden.&lt;/p&gt;
&lt;p&gt;&amp;#39; Prices&lt;br /&gt;sbf = 1&lt;br /&gt;Me![Service Detail - Techs sbf].Form![lblCustomerPrice].Visible = Not Me.tglViewPrice&lt;br /&gt;Me![Service Detail - Techs sbf].Form![lblCustomerRate].Visible = Not Me.tglViewPrice &lt;/p&gt;
&lt;p&gt;....&lt;/p&gt;
&lt;p&gt;tagError: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Case Err.Number&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 2165 &amp;#39; You can&amp;#39;t hide a control that has the focus.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Case sbf&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me![Service Detail - Techs sbf].Form!srtHours.SetFocus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me![Service Detail - External Invoices sbf].Form!sriDescription.SetFocus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Me![Service Detail - Parts sbf].Form!ptxQuantity.SetFocus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &amp;quot;Tony made a mistake.&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Select&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resume&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Case Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox &amp;quot;Error &amp;quot; &amp;amp; Err.Number &amp;amp; &amp;quot; (&amp;quot; &amp;amp; Err.Description &amp;amp; &amp;quot;) in procedure ViewCostAndPrice of VBA Document Form_Service Detail&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Select &lt;/p&gt;
&lt;p&gt;Note that i always place the error text on the error handling line.&amp;nbsp; And sometimes throw in something slightly nonsensical.&lt;/p&gt;
&lt;p&gt;I might&amp;#39;ve used the value of the tab control index and figured out the name then but I felt that was a bit more obscure.&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1638526" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/VBA/default.aspx">VBA</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Background colour of forms</title><link>http://msmvps.com/blogs/access/archive/2008/05/01/background-colour-of-forms.aspx</link><pubDate>Fri, 02 May 2008 05:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1611293</guid><dc:creator>Tony</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1611293</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1611293</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/05/01/background-colour-of-forms.aspx#comments</comments><description>&lt;p&gt;In a comment to my &lt;a target="_blank" href="http://msmvps.com/blogs/access/archive/2008/02/24/multi-row-tab-control.aspx"&gt;Multi Row Tab control&lt;/a&gt; posting Diana asked:&lt;/p&gt;
&lt;p&gt;&amp;quot;Just curious, is your form really that blue color?&amp;nbsp; Is it in production?&amp;nbsp; How do your users feel about that color?&amp;nbsp; Would you design a web page that color?&lt;/p&gt;
&lt;p&gt;I&amp;#39;m always curious why Access developers pick colors for the background of their forms like pink or bright blue or whatever.&amp;nbsp; I guess I always think of my forms like web pages and design accordingly.&amp;quot; &lt;/p&gt;
&lt;p&gt;This is the only time I&amp;#39;ve ever changed the background colour of a form and was due to a client&amp;#39;s comment.&amp;nbsp; Users were getting confused between the Equipment form and the Service form in my&amp;nbsp;&lt;a target="_blank" href="http://www.granitefleet.com/"&gt;Granite Fleet Manager&lt;/a&gt; as they had a striking similarity.&amp;nbsp;&amp;nbsp; I also realize the colour blind folks, generally males, will have problems with this.&amp;nbsp; Not sure what can be done in that situation.&amp;nbsp; (Maybe colour blind males can read better than non colour blind males.&amp;nbsp; &amp;lt;smile&amp;gt;)&lt;/p&gt;
&lt;p&gt;I might do the same thing for a web page in a similar circumstance.&lt;/p&gt;
&lt;p&gt;I haven&amp;#39;t had any comments, negative or positive on these forms.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://msmvps.com/blogs/access/WindowsLiveWriter/Backgroundcolourofforms_1307D/EquipmentDetailForm_2.jpg"&gt;&lt;img border="0" width="422" src="http://msmvps.com/blogs/access/WindowsLiveWriter/Backgroundcolourofforms_1307D/EquipmentDetailForm_thumb.jpg" alt="EquipmentDetailForm" height="274" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/access/WindowsLiveWriter/Backgroundcolourofforms_1307D/ServiceOrderDetailForm_2.jpg"&gt;&lt;img border="0" width="427" src="http://msmvps.com/blogs/access/WindowsLiveWriter/Backgroundcolourofforms_1307D/ServiceOrderDetailForm_thumb.jpg" alt="ServiceOrderDetailForm" height="274" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1611293" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Multi Row Tab control</title><link>http://msmvps.com/blogs/access/archive/2008/02/25/multi-row-tab-control.aspx</link><pubDate>Mon, 25 Feb 2008 10:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1523857</guid><dc:creator>Tony</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1523857</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1523857</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2008/02/25/multi-row-tab-control.aspx#comments</comments><description>&lt;p&gt;In my&amp;nbsp;&lt;a target="_blank" href="http://www.granitefleet.com"&gt;Granite Fleet Manager&lt;/a&gt;&amp;nbsp;I&amp;#39;m soon going to be adding enough tabs to the following form that I&amp;#39;ll run out of space.&amp;nbsp;&amp;nbsp; I didn&amp;#39;t like the looks of the default behavior.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/access/WindowsLiveWriter/MultiRowTab_F0D1/TabsSingleRow_6.jpg"&gt;&lt;img border="0" width="737" src="http://msmvps.com/blogs/access/WindowsLiveWriter/MultiRowTab_F0D1/TabsSingleRow_thumb_2.jpg" alt="TabsSingleRow" height="434" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;So I asked in the private MVP Access newsgroup how you could get multi line tabs?&amp;nbsp; Ken Snell was the first to reply that there is a Multi Row property on the tab control.&amp;nbsp; So the following is how it will look.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/access/WindowsLiveWriter/MultiRowTab_F0D1/TabsMultiRow_2.jpg"&gt;&lt;img border="0" width="737" src="http://msmvps.com/blogs/access/WindowsLiveWriter/MultiRowTab_F0D1/TabsMultiRow_thumb.jpg" alt="TabsMultiRow" height="50" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Duh!!!!!&lt;/strong&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1523857" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Access/default.aspx">Access</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item><item><title>Write a list and check it twice</title><link>http://msmvps.com/blogs/access/archive/2007/12/24/write-a-list-and-check-it-twice.aspx</link><pubDate>Mon, 24 Dec 2007 20:25:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1416741</guid><dc:creator>Tony</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/rsscomments.aspx?PostID=1416741</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/access/commentapi.aspx?PostID=1416741</wfw:comment><comments>http://msmvps.com/blogs/access/archive/2007/12/24/write-a-list-and-check-it-twice.aspx#comments</comments><description>&lt;p&gt;A very interesting post on relating drastically reducing hospital infections and smooth code check ins.&amp;nbsp; &lt;a target="_blank" href="http://blogs.msdn.com/joshzana/archive/2007/12/24/write-a-list-and-check-it-twice.aspx"&gt;Write a list and check it twice&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now how does this apply to us Access folks?&amp;nbsp;&amp;nbsp; I&amp;#39;m not quite sure.&amp;nbsp;&amp;nbsp; I do testing as I add new features to Access software but that&amp;#39;s about it.&amp;nbsp; I don&amp;#39;t have any automated testing.&amp;nbsp; As much as anything because, unlike operating system software or application software such as Access or Excel we don&amp;#39;t have much inter related code.&amp;nbsp; Generally our code means one form updates one table.&amp;nbsp; (And each subform updates another table.)&amp;nbsp; It&amp;#39;s the content of the tables that are inter related.&lt;/p&gt;
&lt;p&gt;Yes, we do have modules of code but again they&amp;#39;re executed from forms and generally they update one or two tables.&lt;/p&gt;
&lt;p&gt;Now one thing that I occasionally have is an unnormalized grand total.&amp;nbsp; For example in my &lt;a href="http://www.granitefleet.com"&gt;Granite Fleet Manager&lt;/a&gt; system there is a total service order cost which is the sum of the parts, labour and external invoices.&amp;nbsp; That only makes sense as otherwise on some reports I&amp;#39;d be doing a lot of extra reads of the three child tables to fetch that total.&amp;nbsp; This is the same as your bank account balance.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I do have a routine which the user can run which compares the total present on the service order record against the child tables.&amp;nbsp; If there is a difference I offer to fix it up.&amp;nbsp; I also log the message to an error log table so I can review it myself.&amp;nbsp;&amp;nbsp; And after working with forms that update those values I will run that routine myself to ensure I haven&amp;#39;t missed anything.&lt;/p&gt;
&lt;p&gt;Once I add in the capability of automatically downloading updates to my software then I&amp;#39;ll be testing that each time I put a new version on my web site.&lt;/p&gt;
&lt;p&gt;My Auto FE Updater needs automated testing.&amp;nbsp; Which I will be adding to it as I add some long overdue enhancements to it.&amp;nbsp; But that&amp;#39;s not the typical Access app.&lt;/p&gt;
&lt;p&gt;So what can us Access developers do for a check list before releasing software to the users?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1416741" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/access/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://msmvps.com/blogs/access/archive/tags/Granite+Fleet+Manager/default.aspx">Granite Fleet Manager</category></item></channel></rss>