<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUEASXYyeyp7ImA9WhRaFEw.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170</id><updated>2012-02-16T11:40:48.893-07:00</updated><category term="Server Tip" /><category term="Visual Studio" /><category term="User Interface" /><category term="All Clients" /><category term="Advantage Web API" /><category term="FAQ" /><category term="ARC Tip" /><category term="SQL" /><category term="Mobility" /><category term="Troubleshooting" /><category term="Notifications" /><category term="Replication" /><category term="Gadgets" /><category term="Stored Procedures" /><category term="Tips" /><category term="Advantage 9" /><category term="Security" /><category term="Announcements" /><category term="Programming" /><category term="Reporting" /><category term="Web Development" /><category term="FoxPro" /><category term="General" /><category term="Advantage 10" /><category term="Linux" /><category term="Screencasts" /><category term="Delphi" /><category term="Tools" /><category term="New Technologies" /><category term="Events" /><category term="Online Backup" /><category term="Training" /><category term="Table Properties" /><category term="Tech Tips" /><category term="Database Design" /><category term="Books" /><category term="Scalability" /><title>Views from an Advantage Evangelist</title><subtitle type="html">My perspective on Advantage Database Server and other programming topics.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.advantageevangelist.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>328</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ViewsFromAnAdvantageEvangelist" /><feedburner:info uri="viewsfromanadvantageevangelist" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A08MR3g5eyp7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-425174782238457633</id><published>2012-01-06T10:37:00.000-07:00</published><updated>2012-01-12T10:38:06.623-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T10:38:06.623-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><title>Resolutions</title><content type="html">&lt;p&gt;After posting my 2012 Book Reading List I ran across an article by John Tierney called &lt;a href="http://www.nytimes.com/2012/01/08/sunday-review/new-years-resolutions-stick-when-willpower-is-reinforced.html?_r=2&amp;amp;hpw"&gt;Be It Resolved&lt;/a&gt;. It has some great information about how to keep your resolutions and some surprising statistics that show that you can be successful in achieving you goals by following some simple strategies&lt;/p&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;&lt;font color="#333333" size="2"&gt;Set a single clear goal&lt;/font&gt; &lt;/li&gt;      &lt;li&gt;Pre-Commit &lt;/li&gt;      &lt;li&gt;Outsource &lt;/li&gt;      &lt;li&gt;Keep track &lt;/li&gt;      &lt;li&gt;Don’t overreact to a lapse &lt;/li&gt;      &lt;li&gt;Tomorrow is another taste &lt;/li&gt;      &lt;li&gt;Reward often &lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;So I thought I would apply these concepts to my 2012 resolutions to see if it will help me stay on track to reach my goals. One of the biggest portions is outsourcing, which I have done by publicly declaring one of my goals. My book reviews will serve as a mechanism for keeping track of my progress.&lt;/p&gt;  &lt;p&gt;Now all I need to do is come up with those frequent rewards.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-425174782238457633?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=V9lYMvr7LBk:YYIBOSjHaws:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=V9lYMvr7LBk:YYIBOSjHaws:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=V9lYMvr7LBk:YYIBOSjHaws:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=V9lYMvr7LBk:YYIBOSjHaws:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=V9lYMvr7LBk:YYIBOSjHaws:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=V9lYMvr7LBk:YYIBOSjHaws:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=V9lYMvr7LBk:YYIBOSjHaws:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/V9lYMvr7LBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/425174782238457633/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=425174782238457633&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/425174782238457633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/425174782238457633?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/V9lYMvr7LBk/resolutions.html" title="Resolutions" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2012/01/resolutions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EGR3Y6cCp7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-6493791525010309068</id><published>2012-01-04T10:33:00.000-07:00</published><updated>2012-01-12T10:33:46.818-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T10:33:46.818-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>Book Reading Goals</title><content type="html">&lt;p&gt;Its that time of year again where we all take an opportunity to start fresh and forget about the resolutions we didn’t accomplish last year in favor of the resolutions we make for this year. I am no exception to this cycle of making resolutions sticking to them for awhile and then letting them slide because life just got too busy.&lt;/p&gt;  &lt;p&gt;One of my big resolutions is to do more reading. I always seem to have several books on my shelf as well as a big wish list of books that I would like to read. So this year I am setting the goal of reading one technical book every month and posting a review of each of them.&lt;/p&gt;  &lt;p&gt;So, without further ado here is my 2012 list.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Living With Complexity Donald A Norman&lt;/li&gt;    &lt;li&gt;Code Complete Second Edition Steve McConnell&lt;/li&gt;    &lt;li&gt;Entity Framework 4 In Action&lt;/li&gt;    &lt;li&gt;The Art of Unit Testing&lt;/li&gt;    &lt;li&gt;RESTful Web Services&lt;/li&gt;    &lt;li&gt;SQL Antipatterns&lt;/li&gt;    &lt;li&gt;The Productive Programmer&lt;/li&gt;    &lt;li&gt;Seven Languages in Seven Weeks&lt;/li&gt;    &lt;li&gt;Head First Android Development&lt;/li&gt;    &lt;li&gt;Head First C# Second Edition&lt;/li&gt;    &lt;li&gt;The Design of Design&lt;/li&gt;    &lt;li&gt;Thoughts on Interaction Design&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-6493791525010309068?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=OdBEJ-Erg4k:kjuFkqPhlYw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=OdBEJ-Erg4k:kjuFkqPhlYw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=OdBEJ-Erg4k:kjuFkqPhlYw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=OdBEJ-Erg4k:kjuFkqPhlYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=OdBEJ-Erg4k:kjuFkqPhlYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=OdBEJ-Erg4k:kjuFkqPhlYw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=OdBEJ-Erg4k:kjuFkqPhlYw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/OdBEJ-Erg4k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/6493791525010309068/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=6493791525010309068&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/6493791525010309068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/6493791525010309068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/OdBEJ-Erg4k/book-reading-goals.html" title="Book Reading Goals" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2012/01/book-reading-goals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDQXs5eyp7ImA9WhRTEEQ.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-8502984276792020913</id><published>2011-10-26T13:48:00.000-06:00</published><updated>2011-10-31T13:49:30.523-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T13:49:30.523-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Advantage Web API" /><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><title>SWFox Begins</title><content type="html">&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-KjsLRn1ukVE/Tq77xaVRJgI/AAAAAAAAELE/vlB6CTWWGaQ/s1600-h/SWFox_2011_Booth%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SWFox_2011_Booth" border="0" alt="SWFox_2011_Booth" align="right" src="http://lh6.ggpht.com/-82alDICaIkQ/Tq77x9YA4lI/AAAAAAAAELM/0WRSsbTK_Tg/SWFox_2011_Booth_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="180" /&gt;&lt;/a&gt;SWFox 2011 begins tonight with the keynote followed by a reception. This is my fifth year attending/exhibiting at this conference. As I mentioned in a previous post we will be doing two sessions on Extending Your FoxPro data to other applications.     &lt;br /&gt;One of the demos is a JQueryMobile website that displays the class information for SWFox. This data is stored in VFP9 dbf files and is also used by the &lt;a href="http://www.swfox.net/kokopelli.aspx"&gt;Kokopelli&lt;/a&gt; scheduling application. &lt;/p&gt;  &lt;p&gt;The demo was written using JQueryMobile and accessing the data via the &lt;a title="Sign-up for the beta" href="http://www.sybase.com/products/databasemanagement/advantagedatabaseserver/ADSWebPlatform"&gt;Advantage Web Platform&lt;/a&gt;. The example will work in virtually every browser and will automatically resize for various devices such as smartphones and tablets. The data is all read-only, however, data can be modified using simple methods if desired.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-FWf4ZARYIAs/Tq77yI4WKKI/AAAAAAAAELU/Ul1Fn9ejjBA/s1600-h/Kokopelli_Demo%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Kokopelli_Demo" border="0" alt="Kokopelli_Demo" src="http://lh3.ggpht.com/-FsToYaQ9vZY/Tq77yaV3vGI/AAAAAAAAELc/aycAZSLP6SE/Kokopelli_Demo_thumb%25255B3%25255D.jpg?imgmax=800" width="609" height="489" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can view the demo &lt;a title="Kokopelli Demonstration using JQueryMobile" href="http://devzone.advantagedatabase.com/examples/kokopelli"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-8502984276792020913?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3lccbXEj24c:r9aRvdxmbz4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3lccbXEj24c:r9aRvdxmbz4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3lccbXEj24c:r9aRvdxmbz4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3lccbXEj24c:r9aRvdxmbz4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3lccbXEj24c:r9aRvdxmbz4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3lccbXEj24c:r9aRvdxmbz4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3lccbXEj24c:r9aRvdxmbz4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/3lccbXEj24c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/8502984276792020913/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=8502984276792020913&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8502984276792020913?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8502984276792020913?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/3lccbXEj24c/swfox-begins.html" title="SWFox Begins" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-82alDICaIkQ/Tq77x9YA4lI/AAAAAAAAELM/0WRSsbTK_Tg/s72-c/SWFox_2011_Booth_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/10/swfox-begins.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ARHw_eyp7ImA9WhdbFEg.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-6773877439957833492</id><published>2011-10-12T07:00:00.000-06:00</published><updated>2011-10-12T16:52:25.243-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T16:52:25.243-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><title>Southwest Fox 2011</title><content type="html">&lt;p&gt;We will once again be attending SWFox in Phoenix Arizona which starts on October 26th. I always look forward to this conference because of the great FoxPro community, it always feels like a gathering of friends. I am always impressed with the variety of training offered and the diversity of applications that are using FoxPro.&lt;/p&gt;  &lt;p&gt;This year we will be focusing on Extending FoxPro applications. Advantage provides easy access to FoxPro data without any conversion and allows for concurrent access ensuring that current applications will continue to run without any code changes.&lt;/p&gt;  &lt;p&gt;I will be presenting a session titled “Mobile Access to your VFP” on Thursday October 27th at 2PM. Here is the class description.&lt;/p&gt;  &lt;blockquote&gt;Need to extend your current VFP application to mobile devices or another technology? We will show you how without changing you current VFP application. See how to share your VFP data with your desktop application and mobile devices at the same time, along with getting other client/server benefits. In our session we will demonstrate concurrent data access with an iPad, iPhone, Android, and a mobile web application. Your current data can now be accessed by mobile workers without having to change the application currently used by the office workers. Your VFP application's life span can grow... we can show you how to do it. &lt;/blockquote&gt;  &lt;p&gt;If you are going to be attending SWFox this year please come to the session. Feel free to stop by our booth we will have an amazing giveaway as always. See you in Phoenix.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-6773877439957833492?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=H2TkJqt0u9E:71JysAFoLKQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=H2TkJqt0u9E:71JysAFoLKQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=H2TkJqt0u9E:71JysAFoLKQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=H2TkJqt0u9E:71JysAFoLKQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=H2TkJqt0u9E:71JysAFoLKQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=H2TkJqt0u9E:71JysAFoLKQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=H2TkJqt0u9E:71JysAFoLKQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/H2TkJqt0u9E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/6773877439957833492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=6773877439957833492&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/6773877439957833492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/6773877439957833492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/H2TkJqt0u9E/southwest-fox-2011.html" title="Southwest Fox 2011" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/10/southwest-fox-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYMRHg4cCp7ImA9WhdbFEg.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-4766273815128633565</id><published>2011-09-26T07:00:00.000-06:00</published><updated>2011-10-12T16:23:05.638-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T16:23:05.638-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><title>Advantage Technical Summit</title><content type="html">&lt;p&gt;We had another very successful technical summit in Boise last week. We focused on mobile development and our &lt;a href="http://www.sybase.com/products/databasemanagement/advantagedatabaseserver/ADSWebPlatform"&gt;Advantage Web Api.&lt;/a&gt; The best feature of the Web Api is that it uses oData and JSON to transfer data which can be consumed by virtually any client. No specific Advantage client is required to send and receive data through the Web Api.&lt;/p&gt;  &lt;p&gt;I taught classes on Mobile Web Development using &lt;a href="http://jquerymobile.com/"&gt;JQueryMobile&lt;/a&gt; with oData. There is an excellent &lt;a href="http://devzone.advantagedatabase.com/dz/Screencasts/javascript/JavaScriptWebApp.html"&gt;screencast&lt;/a&gt; done by Daniel Ryan which demonstrates our example Web Application. I also did a class on developing oData applications for iOS which includes iPods, iPhone and iPad devices. JD Mullin did a series of &lt;a href="http://jdmullin.blogspot.com/2011/06/iphone-odata-client-part-3.html"&gt;screencasts&lt;/a&gt; on using oData with iOS as well. Jed Thomet did a class on using oData from Android devices. &lt;/p&gt;  &lt;p&gt;We also had our usual classes on using our other Advantage technologies and clients. We added a panel discussion session which gave attendees the opportunity to ask our development team general questions about Advantage and our development process.&lt;/p&gt;  &lt;p&gt;The greatest benefit of our technical summits is the networking that goes on between Advantage users and our staff here. It is always great to hear about how you are using Advantage with your products. I hope we will see you at our next conference. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-4766273815128633565?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tbRceceRdZc:2FWX5glDPUE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tbRceceRdZc:2FWX5glDPUE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tbRceceRdZc:2FWX5glDPUE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tbRceceRdZc:2FWX5glDPUE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tbRceceRdZc:2FWX5glDPUE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tbRceceRdZc:2FWX5glDPUE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tbRceceRdZc:2FWX5glDPUE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/tbRceceRdZc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/4766273815128633565/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=4766273815128633565&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4766273815128633565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4766273815128633565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/tbRceceRdZc/advantage-technical-summit.html" title="Advantage Technical Summit" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/09/advantage-technical-summit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYBR3w6fSp7ImA9WhdbFEg.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-8945240765585899922</id><published>2011-09-19T16:22:00.000-06:00</published><updated>2011-10-12T16:22:36.215-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T16:22:36.215-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><title>Delphi Live 2011</title><content type="html">&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-mUbIWGHd8yc/TpYTKD_EEOI/AAAAAAAAEKs/2Kffq0Foad8/s1600-h/IMG_0764%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IMG_0764" border="0" alt="IMG_0764" align="right" src="http://lh6.ggpht.com/-_ZvUzrX7L7w/TpYTK9Pc5aI/AAAAAAAAEK0/AULe3ev99wg/IMG_0764_thumb%25255B2%25255D.jpg?imgmax=800" width="240" height="180" /&gt;&lt;/a&gt;We had the opportunity to attend Delphi Live! in San Jose California again this year. We always get to see and talk to many Delphi users that are also Advantage customers. &lt;/p&gt;  &lt;p&gt;This year we were able to talk more about our Advantage Web Platform which provides oData and JSON access to Advantage data through the Web. This allows access from virtually any device, such as iPhones, iPads, Android phones and tablets. We have an &lt;a href="https://devzone.advantagedatabase.com:6282/javascriptDemo.html"&gt;example mobile website&lt;/a&gt; where you can see this technology in action.&lt;/p&gt;    &lt;p&gt;There were many sessions on the latest release of Delphi, Delphi XE 2 at the conference. This release includes 64-bit support and Fire Monkey which is a cross-platform development mechanism. We will be updating the Advantage Delphi Components to work with this release and to include support for 64-bit applications. We are still investigating Fire Monkey support.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-8945240765585899922?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=nWl_O1mL7xY:nKy1QyRbHg0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=nWl_O1mL7xY:nKy1QyRbHg0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=nWl_O1mL7xY:nKy1QyRbHg0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=nWl_O1mL7xY:nKy1QyRbHg0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=nWl_O1mL7xY:nKy1QyRbHg0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=nWl_O1mL7xY:nKy1QyRbHg0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=nWl_O1mL7xY:nKy1QyRbHg0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/nWl_O1mL7xY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/8945240765585899922/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=8945240765585899922&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8945240765585899922?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8945240765585899922?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/nWl_O1mL7xY/delphi-live-2011.html" title="Delphi Live 2011" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-_ZvUzrX7L7w/TpYTK9Pc5aI/AAAAAAAAEK0/AULe3ev99wg/s72-c/IMG_0764_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/09/delphi-live-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIBQns-fSp7ImA9WhZSE0g.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-924025191846201789</id><published>2011-03-28T07:00:00.000-06:00</published><updated>2011-03-28T16:15:53.555-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T16:15:53.555-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Scalability" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Limiting Users for a Database</title><content type="html">&lt;p&gt;Advantage counts users based on the machine name that is connecting. This means that a single machine can have multiple connections to Advantage while only consuming a single license.&amp;#160; There are times when you may wish to limit the number of users to a particular database. For example you may be hosting data for multiple customers at your site or in the cloud. You may need a way to limit each customer to a specific number of concurrent users. If each customer has a specific database you can accomplish this by using the &lt;a title="Advantage SQL Engine - sp_mgGetTableUsers" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_mggettableusers.htm"&gt;sp_mgGetTableUsers&lt;/a&gt; system procedure when your application starts up.&lt;/p&gt;  &lt;p&gt;The sp_mgGetTableUsers procedure takes one parameter which is the full qualified path to the table. You can provide a path to a data dictionary instead of a table to get a list of all the users connected to the database. See the example below&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pJ4HkzTKiOA/TZEIkdPw7II/AAAAAAAAEBI/OEEuViqenrE/s1600-h/sp_mgGetTableUsers1%5B7%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sp_mgGetTableUsers1" border="0" alt="sp_mgGetTableUsers1" src="http://lh3.ggpht.com/_pJ4HkzTKiOA/TZEIk_dqjrI/AAAAAAAAEBM/__bmaAZsgdA/sp_mgGetTableUsers1_thumb%5B5%5D.jpg?imgmax=800" width="640" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see this list returns all connections to the specified file. You will need to count the results based on the type of users you wish to track. If you are using a traditional client/server solution where each user has their own machine name ( as shown in the example ) you need to count the number of unique UserName values. If you are hosting the application on a terminal server then you will need to count the unique TSAddress values.&lt;/p&gt;  &lt;p&gt;If you are using Advantage version 10 or newer you can use SQL to count the connections. The example below demonstrates different types of counts.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pJ4HkzTKiOA/TZEIldEUzFI/AAAAAAAAEBQ/BZ1Rfsa40Lg/s1600-h/sp_mgGetTableUsers2%5B4%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sp_mgGetTableUsers2" border="0" alt="sp_mgGetTableUsers2" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TZEIl4fM-MI/AAAAAAAAEBU/6K3MnVuzu9Y/sp_mgGetTableUsers2_thumb%5B2%5D.jpg?imgmax=800" width="640" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;By running a script like the one above when your application starts you can get an accurate count of the total number of users connected to the specified database. You could then compare this to the number of licenses for that database. The number of licenses could be stored encrypted in the registry, in a license file or some other method. &lt;/p&gt;  &lt;p&gt;There are a few limitations to this approach. This technique will not prevent third party applications since the check is done by your application and not by the server. This technique will also not work for a web based application since all users will be connecting through one or more web servers. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-924025191846201789?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=CITyB-k5uWM:s0YO01Bx-Ag:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=CITyB-k5uWM:s0YO01Bx-Ag:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=CITyB-k5uWM:s0YO01Bx-Ag:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=CITyB-k5uWM:s0YO01Bx-Ag:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=CITyB-k5uWM:s0YO01Bx-Ag:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=CITyB-k5uWM:s0YO01Bx-Ag:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=CITyB-k5uWM:s0YO01Bx-Ag:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/CITyB-k5uWM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/924025191846201789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=924025191846201789&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/924025191846201789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/924025191846201789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/CITyB-k5uWM/limiting-users-for-database.html" title="Limiting Users for a Database" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_pJ4HkzTKiOA/TZEIk_dqjrI/AAAAAAAAEBM/__bmaAZsgdA/s72-c/sp_mgGetTableUsers1_thumb%5B5%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/03/limiting-users-for-database.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08CQ3g7fyp7ImA9WhZTEUw.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-8542980751375789465</id><published>2011-03-14T07:00:00.000-06:00</published><updated>2011-03-14T10:24:22.607-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-14T10:24:22.607-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><category scheme="http://www.blogger.com/atom/ns#" term="Training" /><title>Advantage Training</title><content type="html">&lt;p&gt;The next Advantage Technical Summit has been scheduled for 18 – 20 May at the &lt;a href="http://www.marriott.com/hotels/hotel-information/travel/sosbw-bridgewater-marriott/"&gt;Bridgewater Mariott&lt;/a&gt; in New Jersey. The training will be co-located with the &lt;a href="http://sybasematchplaychampionship.com/"&gt;Sybase LPGA Match Play Championship&lt;/a&gt; which is held at the Hamilton Farm Golf Club. Attendees will get a wealth of information about Advantage and have an opportunity to attend the golf tournament as well.&lt;/p&gt;  &lt;p&gt;You can get all the details &lt;a title="Advantage Technical Summit" href="http://www.sybase.com/detail?id=1092179" target="_blank"&gt;here&lt;/a&gt;. The schedule overview is below and you can get details about all of the sessions using this &lt;a title="Advantage Technical Summit May 18-20, 2011" href="http://www.sybase.com/files/Thankyou_Pages/2011_ADS_Agenda.pdf" target="_blank"&gt;link&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Wednesday, May 18th:     &lt;br /&gt;2pm – 5:00pm: Sessions      &lt;br /&gt;5:30pm – Hosted Dinner at Hamilton Golf Club with LPGA professionals&lt;/p&gt;    &lt;p&gt;Thursday, May 19th:     &lt;br /&gt;8am – 2:30: Sessions      &lt;br /&gt;2:30 – 5:00: Sybase Match Play Championship Event      &lt;br /&gt;6:30 – Hosted Dinner and networking event&lt;/p&gt;    &lt;p&gt;Friday, May 20th:     &lt;br /&gt;8am – Noon: Sessions      &lt;br /&gt;Noon – 1:30pm: Hosted Lunch at Hamilton Golf Club       &lt;br /&gt;1:30 – 5:00: Sybase Match Play Championship Event&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I look forward to seeing you there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-8542980751375789465?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=8zdARAJo1p4:VQGL6dCRe1A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=8zdARAJo1p4:VQGL6dCRe1A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=8zdARAJo1p4:VQGL6dCRe1A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=8zdARAJo1p4:VQGL6dCRe1A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=8zdARAJo1p4:VQGL6dCRe1A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=8zdARAJo1p4:VQGL6dCRe1A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=8zdARAJo1p4:VQGL6dCRe1A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/8zdARAJo1p4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/8542980751375789465/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=8542980751375789465&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8542980751375789465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8542980751375789465?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/8zdARAJo1p4/advantage-training.html" title="Advantage Training" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/03/advantage-training.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NRH09eyp7ImA9Wx9aEUQ.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-1908305142783950590</id><published>2011-03-02T07:00:00.000-07:00</published><updated>2011-03-03T17:03:15.363-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T17:03:15.363-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Advantage 10" /><title>Advantage in the Real World</title><content type="html">&lt;p&gt;Cary Jensen wrote an article about how he has been using Advantage with one of his customers. He focuses on several server-side features including replication, triggers and notifications. It provides some examples on how these features can be used to enhance an existing application. You can read the article &lt;a title="Advantage Replication, Triggers and Notifications" href="http://www.delphifeeds.com/go/s/77385" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-1908305142783950590?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=Rjrs-90rX7Y:iZfE25TOT28:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=Rjrs-90rX7Y:iZfE25TOT28:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=Rjrs-90rX7Y:iZfE25TOT28:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=Rjrs-90rX7Y:iZfE25TOT28:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=Rjrs-90rX7Y:iZfE25TOT28:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=Rjrs-90rX7Y:iZfE25TOT28:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=Rjrs-90rX7Y:iZfE25TOT28:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/Rjrs-90rX7Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/1908305142783950590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=1908305142783950590&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/1908305142783950590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/1908305142783950590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/Rjrs-90rX7Y/advantage-in-real-world.html" title="Advantage in the Real World" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/03/advantage-in-real-world.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UAQ38-cCp7ImA9Wx9WE0o.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-2901750391828818405</id><published>2011-01-03T07:00:00.000-07:00</published><updated>2011-01-18T11:27:22.158-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T11:27:22.158-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FAQ" /><title>FAQs–December 2010</title><content type="html">&lt;h3&gt;Programmatically Getting the Type of Server&lt;/h3&gt;  &lt;p&gt;Several of the connection components ( i.e. tAdsConnection, AdsConnect ) have properties for server type and server version. However, there are times when you may need to know what type ( i.e. Windows, Linux ) of server you are connected to.&amp;#160; The easiest way to get this information is to use &lt;a title="Advantage SQL Engine - sp_mgGetServerType" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_mggetservertype.htm?zoom_highlightsub=sp_mgGetServerType" target="_blank"&gt;sp_mgGetServerType&lt;/a&gt; as it returns text description as well as an enum value which represents the type of server. Beginning with version 9 two new enums were added; Windows NT 64-Bit (7) and Linux 64-bit (8). An example of the output is shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pJ4HkzTKiOA/TTXbhFQgHDI/AAAAAAAAEAw/MAeuTPZLaL4/s1600-h/sp_GetServerType5.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="sp_GetServerType" border="0" alt="sp_GetServerType" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TTXbhcJpyvI/AAAAAAAAEA0/pTVa2nSX1yA/sp_GetServerType_thumb3.jpg?imgmax=800" width="640" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can also use the &lt;a title="Advantage Client Engine - AdsMgGetServerType" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/ace_adsmggetservertype.htm?zoom_highlightsub=adsmggetservertype" target="_blank"&gt;AdsMgGetServerType&lt;/a&gt; API call to retrieve the type of server you are connected to. &lt;/p&gt;  &lt;h3&gt;7209 Errors&lt;/h3&gt;  &lt;p&gt;The &lt;a title="Advantage Error Guide - 7209 SQL query aborted by user" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/error_7209_sql_query_aborted_by_user.htm" target="_blank"&gt;7209&lt;/a&gt; &amp;quot;SQL query aborted by user&amp;quot; error may become more common now that a SQL Timeout error has been added for all clients. This is typically seen if you give your users the ability to cancel a query through the use of a callback function. An SQL Timeout property has been a part of the OLE DB and .NET Data providers for some time. These properties are used automatically by the client to cancel a query. The default timeout is generally 30 seconds.&lt;/p&gt;  &lt;p&gt;The default SQL Timeout property for version 10.x clients is 0, meaning no timeout. If you specify a value, in seconds, the query will be canceled if the timeout expires and you will receive a 7209 error. &lt;/p&gt;  &lt;h3&gt;Windows Installer Errors&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pJ4HkzTKiOA/TTXbhyuopAI/AAAAAAAAEA4/wu9ziT6c3Bo/s1600-h/WinInstaller_Error4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WinInstaller_Error" border="0" alt="WinInstaller_Error" align="right" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TTXbiYpKfkI/AAAAAAAAEA8/PS0hwGl54cM/WinInstaller_Error_thumb2.jpg?imgmax=800" width="344" height="144" /&gt;&lt;/a&gt;The latest version of the Advantage .NET Data Provider requires version 4.5 of the Windows Installer. If you have an earlier version of Windows Installer you will get the error pictured. This error may occur on Windows XP machines. Windows Vista ships with version 4.0 and 4.5 is included in SP2. The latest Win7 and Windows Server 2008 R2 include version 5.0.&lt;/p&gt;  &lt;p&gt;You can check the version of Windows Installer by typing &amp;quot;msiexec /?&amp;quot; in the run dialog or from a command prompt. You can get&amp;#160; version 4.5 of the Windows Installer from &lt;a title="Windows Installer 4.5 is available" href="http://support.microsoft.com/kb/942288" target="_blank"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Which Clients work with Enhanced Encryption&lt;/h3&gt;  &lt;p&gt;With the 10.1 release of Advantage only the ACE API and Advantage Components for Delphi include support for enhanced encryption. Additional clients will be released as they are available. &lt;a title="Advantage Announcements" href="http://devzone.advantagedatabase.com/dz/content.aspx?key=49&amp;amp;Feed=http://devzone.advantagedatabase.com/adsannouncements.xml" target="_blank"&gt;Announcements&lt;/a&gt; will be made as additional clients are updated for enhanced security.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-2901750391828818405?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=eidkdQSg-DI:xvksKlm-4lc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=eidkdQSg-DI:xvksKlm-4lc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=eidkdQSg-DI:xvksKlm-4lc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=eidkdQSg-DI:xvksKlm-4lc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=eidkdQSg-DI:xvksKlm-4lc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=eidkdQSg-DI:xvksKlm-4lc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=eidkdQSg-DI:xvksKlm-4lc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/eidkdQSg-DI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/2901750391828818405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=2901750391828818405&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2901750391828818405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2901750391828818405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/eidkdQSg-DI/faqsdecember-2010.html" title="FAQs–December 2010" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_pJ4HkzTKiOA/TTXbhcJpyvI/AAAAAAAAEA0/pTVa2nSX1yA/s72-c/sp_GetServerType_thumb3.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2011/01/faqsdecember-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMESH07fCp7ImA9Wx9QEE8.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-2283947701234045066</id><published>2010-12-22T07:00:00.000-07:00</published><updated>2010-12-22T07:00:09.304-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-22T07:00:09.304-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="Advantage 10" /><title>Connection Options for Strong Encryption</title><content type="html">&lt;p&gt;Strong encryption is a new option available as an add-on that you can purchase for Advantage 10.1 and newer. This post will discuss the new connection options that are available for connecting to data that is encrypted with the strong encryption option.&lt;/p&gt;  &lt;p&gt;The new connection options are listed below, these options are only available when using the new &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/ace_adsconnect101.htm?zoom_highlightsub=adsconnect101"&gt;AdsConnect101&lt;/a&gt; connection API. Currently only the Advantage Delphi Client and the ACE API implement this new functionality. Additional clients will be updated to include this new functionality soon. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;FIPS &lt;/li&gt;    &lt;li&gt;EncryptionType &lt;/li&gt;    &lt;li&gt;DDPassword &lt;/li&gt;    &lt;li&gt;TLSCertificate &lt;/li&gt;    &lt;li&gt;TLSCiphers &lt;/li&gt;    &lt;li&gt;TLSCommonName &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;When &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_fips.htm"&gt;FIPS mode &lt;/a&gt;is specified the client will only open dictionary and tables that are encrypted using an approved FIPS 140-2 encryption mechanism (AES). TLS communication is also enforced when FIPS mode is specified. An error will be returned if either of these conditions is not met. FIPS mode must also be specified on the server using the FIPS configuration setting.&lt;/p&gt;  &lt;p&gt;The EncryptionType option is used to specify the type of encryption to use when encrypting tables. This option is ignored for any table that is already associated with a data dictionary. The TLS* options are used when using TLS communications and will be discussed in a separate post.&lt;/p&gt;  &lt;p&gt;The DDPassword is used to specify the AES encryption password when connecting to a dictionary encrypted with strong encryption. This password is required in addition to the dictionary user password. Note that the dictionary password does not allow access to the dictionary. Instead it is used to generate keys for working with the data dictionary. Access permissions are controlled by the dictionary username and password.&lt;/p&gt;  &lt;p&gt;Dictionary encryption passwords can also be stored on the server using the &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_se_passwords.htm"&gt;SE_PASSWORDS&lt;/a&gt; configuration option with the remote server. Using this option allows the Advantage server to generate and store the keys necessary for opening AES encrypted data dictionaries upon startup. A password must be specified for each dictionary, for example: c:\data\sampledb\sample.add=strongpassword. This option is more efficient since the keys for accessing the encrypted data only have to be generated once and will be stored until the server is restarted. If the DDPassword option is used the keys will be generated each time the application connects which will add some overhead to the connections. This will be most noticeable with an application which connects and disconnects frequently.&lt;/p&gt;  &lt;p&gt;The TLS* options are used to configure secure communication options. The TLSCertificate option specifies the full path to the name of the server public certificate. The TLSCiphers option specifies the allowed combination of TLS cipher suites. The TLSCommonName option specifies the “common name” of the server you are connecting to.&lt;/p&gt;  &lt;p&gt;In my next post I will be walking through creating a TLS connection to dictionary using strong encryption.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-2283947701234045066?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tCrKO7-uPCg:3yQTJCt7iTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tCrKO7-uPCg:3yQTJCt7iTM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tCrKO7-uPCg:3yQTJCt7iTM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tCrKO7-uPCg:3yQTJCt7iTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tCrKO7-uPCg:3yQTJCt7iTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=tCrKO7-uPCg:3yQTJCt7iTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=tCrKO7-uPCg:3yQTJCt7iTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/tCrKO7-uPCg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/2283947701234045066/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=2283947701234045066&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2283947701234045066?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2283947701234045066?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/tCrKO7-uPCg/connection-options-for-strong.html" title="Connection Options for Strong Encryption" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/connection-options-for-strong.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEFRXgzcSp7ImA9Wx9RGUo.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-4463464917095097317</id><published>2010-12-20T07:00:00.000-07:00</published><updated>2010-12-21T15:30:14.689-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T15:30:14.689-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="Advantage 10" /><title>Using Strong Encryption with Data Dictionaries</title><content type="html">&lt;p&gt;Strong encryption is a new option available as an add-on that you can purchase for Advantage 10.1 and newer. This post will walk through the steps of creating a new data dictionary using the strong encryption and then converting an existing data dictionary to use strong encryption. I would recommend that you read my previous post &lt;a href="http://blog.advantageevangelist.com/2010/12/advantage-strong-encryption-overview.html" target="_blank"&gt;Advantage Strong Encryption Overview&lt;/a&gt; or review the various encryption topics in the help file prior to reading through this post.&lt;/p&gt;  &lt;h3&gt;Creating a Strongly Encrypted Data Dictionary&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pJ4HkzTKiOA/TREqbXMdHDI/AAAAAAAAEAI/eX7OkefkI8w/s1600-h/StrongEncrypt_Error%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="StrongEncrypt_Error" border="0" alt="StrongEncrypt_Error" align="right" src="http://lh3.ggpht.com/_pJ4HkzTKiOA/TREqbz3CLfI/AAAAAAAAEAM/ogJARhzjDDk/StrongEncrypt_Error_thumb.jpg?imgmax=800" width="244" height="174" /&gt;&lt;/a&gt;When creating a data dictionary with strong encryption you must specify an additional password to encrypt the database. This password is in addition to any user passwords or a table encryption password. This password is also required when connecting to the dictionary. You also must specify the encryption type to be used. These two new options have been added to the &lt;a title="Advantage SQL Engine - CREATE DATABASE" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_create_database.htm" target="_blank"&gt;CREATE DATABASE&lt;/a&gt; statement and the new &lt;a title="Advantage Client Engine - AdsDDCreate101" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/ace_adsddcreate101.htm" target="_blank"&gt;AdsDDCreate101&lt;/a&gt; ACE function. These options are also available when using Advantage Data Architect (ARC). &lt;/p&gt;  &lt;p&gt;Encryption options for the dictionary and tables are located on the Security tab of the Create Database dialog in ARC. The default encryption type is the RC4 encryption which is included with Advantage. You can now also select AES128 or AES256, in order to use these encryption types you must have the OpenSSL libraries ( purchased separately ) in your search path or application directory. The OpenSSL libraries are required by both the client and the server when using strong encryption. A 7160 error will occur if the OpenSSL libraries cannot be found on the server. If the OpenSSL libraries are not found on the client a 6323 error will be returned. ARC provides a custom error message (see right) if the libraries cannot be located. Instructions for distributing the OpenSSL libraries are included with the strong encryption download. After selecting the encryption option you will need to enter an encryption password as shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pJ4HkzTKiOA/TREqcH7eFlI/AAAAAAAAEAQ/1ozao9ZTMfk/s1600-h/StrongEncrypt_DD1%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="StrongEncrypt_DD1" border="0" alt="StrongEncrypt_DD1" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TREqchVIcfI/AAAAAAAAEAU/Bajmfa6k5Hw/StrongEncrypt_DD1_thumb%5B1%5D.jpg?imgmax=800" width="474" height="477" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The encryption password can be supplied as the value for the DDPassword connection option. However, we do not recommend sending this password with every connection when using remote server. Once the server has generated the keys for accessing the encrypted database they are cached and do not need to be regenerated unless the encryption type is changed. Passwords for strongly encrypted dictionaries should be stored on the server using the SE_PASSWORDS configuration parameter. The keys for accessing the encrypted dictionary will be generated when the server starts up and therefore the client does not need to provide the DDPassword.&lt;/p&gt;  &lt;h3&gt;Changing Encryption Type of an Existing Data Dictionary&lt;/h3&gt;  &lt;p&gt;In previous versions of Advantage ( 10.0 and below ) you could only encrypt a data dictionary when it was created. There was no mechanism for encrypting the data dictionary files ( ADD, ADM, AI ) after they were created. With version 10.1 and later you can change the encryption type of the data dictionary files using the &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_setddencryptiontype.htm"&gt;sp_SetDDEncryptionType&lt;/a&gt; system procedure. This procedure can also decrypt the dictionary files.&lt;/p&gt;  &lt;p&gt;Setting the encryption type encrypts the data dictionary files and sets the encryption type for all of the tables associated with the data dictionary. Therefore, all of the tables associated with the dictionary must be decrypted before using the sp_SetDDEncryptionType procedure. After running the procedure tables can be encrypted using ARC or using the &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_encrypttable.htm"&gt;sp_EncryptTable&lt;/a&gt; system procedure. It is very important to note that all user passwords will be lost when you change an existing dictionary's encryption type. Data dictionaries do not store user passwords it only stores password verification, therefore passwords cannot be recovered.&lt;/p&gt;  &lt;p&gt;The procedure takes five parameters; Path to the dictionary, AdsSys password, DDPassword used to encrypt the files, Encryption type ( RC4, AES128 or AES256 ) and whether or not to encrypt the dictionary. This procedure requires exclusive access to the data dictionary so you cannot have any active connections to the data. It is probably easiest to make a connection to the directory containing the dictionary and then running the procedure. An example of this procedure is shown below.&lt;/p&gt;  &lt;pre class="brush: adssql"&gt;// Encrypt the data dictionary files with 256-bit AES encryption
EXECUTE PROCEDURE sp_SetDDEncryptionType('Sample.add', 'password', 
                                         'StrongPassword', 'AES256', TRUE)

// Remove encryption from the data dictionary
EXECUTE PROCEDURE sp_SetDDEncryptionType('Sample.add', 'password', 
                                         'StrongPassword', 'RC4', FALSE)&lt;/pre&gt;

&lt;p&gt;You can verify the type of encryption that the dictionary is using with the &lt;a title="Advantage SQL Engine - sp_GetSecurityInfo" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_getsecurityinfo.htm" target="_blank"&gt;sp_GetSecurityInfo&lt;/a&gt; system procedure. This procedure returns information about the various security options configured for the current connection. A screenshot of the security configuration for the example dictionary is shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pJ4HkzTKiOA/TREqdObF3LI/AAAAAAAAEAY/kdOUiFrqjVs/s1600-h/SP_GetSecurityInfo1%5B9%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="SP_GetSecurityInfo1" border="0" alt="SP_GetSecurityInfo1" src="http://lh3.ggpht.com/_pJ4HkzTKiOA/TREqdSggeOI/AAAAAAAAEAc/7WSd01dzzc0/SP_GetSecurityInfo1_thumb%5B7%5D.jpg?imgmax=800" width="604" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my next post I will discuss the new connection options related to strong encryption.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-4463464917095097317?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=a-WwIH402I4:bx3-MlFjKv8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=a-WwIH402I4:bx3-MlFjKv8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=a-WwIH402I4:bx3-MlFjKv8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=a-WwIH402I4:bx3-MlFjKv8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=a-WwIH402I4:bx3-MlFjKv8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=a-WwIH402I4:bx3-MlFjKv8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=a-WwIH402I4:bx3-MlFjKv8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/a-WwIH402I4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/4463464917095097317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=4463464917095097317&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4463464917095097317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4463464917095097317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/a-WwIH402I4/using-strong-encryption-with-data.html" title="Using Strong Encryption with Data Dictionaries" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_pJ4HkzTKiOA/TREqbz3CLfI/AAAAAAAAEAM/ogJARhzjDDk/s72-c/StrongEncrypt_Error_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/using-strong-encryption-with-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMHSX0yeip7ImA9Wx9RGUg.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-8837754365313893531</id><published>2010-12-10T07:00:00.001-07:00</published><updated>2010-12-21T11:33:58.392-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T11:33:58.392-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Advantage 10" /><title>Lazarus Support</title><content type="html">&lt;p&gt;Lazarus is the open source IDE for the FreePascal compiler, which can use many Delphi components. Below is the official description from the &lt;a href="http://www.lazarus.freepascal.org/index.php" target="_blank"&gt;Free Pascal Lazarus Project&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Lazarus is the class libraries for Free Pascal that emulate Delphi. Free Pascal is a GPL'ed compiler that runs on Linux, Win32, OS/2, 68K and more. Free Pascal is designed to be able to understand and compile Delphi syntax, which is of course OOP. Lazarus is the part of the missing puzzle that will allow you to develop Delphi like programs in all of the above platforms. Unlike Java which strives to be a write once run anywhere, Lazarus and Free Pascal strives for write once compile anywhere. Since the exact same compiler is available on all of the above platforms it means you don't need to do any recoding to produce identical products for different platforms.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;With the release of &lt;a title="Products for Release 10.1" href="http://devzone.advantagedatabase.com/dz/content.aspx?key=20&amp;amp;Release=16" target="_blank"&gt;Advantage 10.1&lt;/a&gt; support for Lazarus has been added to the Advantage Delphi Components. You will need to have Lazarus version 0.9.28.2 or later to use the components. The Lazarus components are not installed by default so you must choose a Custom Install and make sure you select the Lazarus Free Pascal option.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="DelphiComponents_10_1" border="0" alt="DelphiComponents_10_1" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TQqbEtFL8FI/AAAAAAAAD_0/gisEeuLY58Q/DelphiComponents_10_1%5B5%5D.jpg?imgmax=800" width="514" height="392" /&gt;&lt;/p&gt;  &lt;p&gt;The TDataSet installer will not automatically add the Advantage components to Lazarus you must follow these steps to use the Advantage Components.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the Lazarus IDE. &lt;/li&gt;    &lt;li&gt;Click on &amp;quot;Package&amp;quot;, then &amp;quot;Open Package File (.lpk) ...&amp;quot; and browse to the adsl.lpk file in the TDataSet installation directory. &lt;/li&gt;    &lt;li&gt;In the package window (shown below), click the &amp;quot;Compile&amp;quot; button. &lt;/li&gt;    &lt;li&gt;When compilation is complete, click the &amp;quot;Install&amp;quot; button.&amp;#160; When asked if you wish to rebuild Lazarus, select &amp;quot;Yes&amp;quot;. &lt;/li&gt;    &lt;li&gt;Lazarus should build a new version of the Lazarus executable and automatically start the new version of the executable. &lt;/li&gt;    &lt;li&gt;The component palette should now contain the Advantage tab. &lt;/li&gt;    &lt;li&gt;The Advantage components can now be used in Lazarus to access Advantage data from your application. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Lazarus_Install" border="0" alt="Lazarus_Install" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TQqbFF3aRhI/AAAAAAAAD_4/vlYTG60rh4s/Lazarus_Install%5B5%5D.jpg?imgmax=800" width="566" height="488" /&gt;&lt;/p&gt;  &lt;p&gt;Once the components have been installed they can be used in an application. The components work just like they do in Delphi and are very easy to configure. Lazarus includes many of the same components as Delphi. Below is a screenshot of a simple application which displays the contents of the Customer.adt table from the example data supplied with the Advantage Delphi Components.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pJ4HkzTKiOA/TQqbFl1-ONI/AAAAAAAAD_8/s0E5MZcFAZM/s1600-h/Lazarus_One%5B11%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Lazarus_One" border="0" alt="Lazarus_One" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TQqbGEGJXxI/AAAAAAAAEAA/M39gd_OF20g/Lazarus_One_thumb%5B7%5D.jpg?imgmax=800" width="640" height="333" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For additional information about using Advantage with Lazarus refer to the Advantage &lt;a title="Getting Started with the TDataSet Descendant for Lazarus" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/ade_getting_started_with_tdataset_for_lazarus.htm" target="_blank"&gt;Help File&lt;/a&gt; or the Lazarus and Advantage Database Server &lt;a title="Lazarus Database Tutorial" href="http://wiki.lazarus.freepascal.org/Lazarus_Database_Tutorial#Lazarus_and_Advantage_Database_Server" target="_blank"&gt;entry&lt;/a&gt; in the Lazarus Wiki.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-8837754365313893531?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=NOi3cXsQInQ:ArJQ9bpXdMs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=NOi3cXsQInQ:ArJQ9bpXdMs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=NOi3cXsQInQ:ArJQ9bpXdMs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=NOi3cXsQInQ:ArJQ9bpXdMs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=NOi3cXsQInQ:ArJQ9bpXdMs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=NOi3cXsQInQ:ArJQ9bpXdMs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=NOi3cXsQInQ:ArJQ9bpXdMs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/NOi3cXsQInQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/8837754365313893531/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=8837754365313893531&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8837754365313893531?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8837754365313893531?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/NOi3cXsQInQ/lazarus-support.html" title="Lazarus Support" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_pJ4HkzTKiOA/TQqbEtFL8FI/AAAAAAAAD_0/gisEeuLY58Q/s72-c/DelphiComponents_10_1%5B5%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/lazarus-support.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ER3o8fSp7ImA9Wx9RGUs.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-9008561840870075370</id><published>2010-12-08T07:00:00.003-07:00</published><updated>2010-12-21T14:43:26.475-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T14:43:26.475-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Advantage 10" /><title>Advantage Strong Encryption Overview</title><content type="html">With the release of 10.1 a new FIPS 140-2 encryption option has been added to Advantage. You must purchase the strong encryption libraries separately, for more information contact your sales representative or visit our &lt;a href="http://www.sybase.com/products/databasemanagement/advantagedatabaseserver/encryption" target="_blank"&gt;encryption page&lt;/a&gt;. You can also view the strong encryption &lt;a href="http://www.sybase.com/files/Data_Sheets/Sybase_ADSEncryption_ds.pdf" target="_blank"&gt;datasheet&lt;/a&gt;.&lt;br /&gt;
The default encryption mechanism is a 160-bit RC4 encryption mechanism. This includes encrypting of all files ( tables, memos and indexes ) as well as encryption of communications. The strong encryption add-on provides a FIPS 140.2 compatible encryption mechanism. This implements both 128-bit and 256-bit AES encryption for files and Transport Layer Security (TLS) for communication.&lt;br /&gt;
Here is a quick summary of the new features and benefits of strong encryption.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;TLS v1.0 operating over TCP/IP using RSA for key exchange with either 128-bit or 256-bit AES encryption with SHA-1 for message authentication &lt;/li&gt;
&lt;li&gt;Tables can be encrypted using 128-bit or 256-bit AES &lt;/li&gt;
&lt;li&gt;Improved key strength by salting and hashing keys &lt;/li&gt;
&lt;li&gt;Ability to encrypt a data dictionary with an external password. This also allows you to change the type of encryption of an existing dictionary. &lt;/li&gt;
&lt;li&gt;Added a FIPS mode for Advantage clients and server. This ensures that all encryption meets the FIPS 140-2 standard. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Several new stored procedures have been added to make working with encryption easier. These include functions for encrypting and decrypting tables, setting encryption types and retrieving information about the type of encryption being used. A list of these new system procedures are listed below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_encrypttable.htm" target="_blank" title="Advantage SQL Engine - sp_EncryptTable"&gt;sp_EncryptTable&lt;/a&gt; encrypts a table. When AES Encryption is specified on dictionary bound tables this procedure converts the table to strong encryption.
&lt;li&gt;&lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_decrypttable.htm" target="_blank" title="Advantage SQL Engine - sp_DecryptTable"&gt;sp_DecryptTable&lt;/a&gt; decrypts tables. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_setddencryptiontype.htm" target="_blank" title="Advantage SQL Engine - sp_SetDDEncryptionType"&gt;sp_SetDDEncryptionType&lt;/a&gt; converts the type of encryption used by a data dictionary &lt;/li&gt;
&lt;li&gt;&lt;a href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/master_sp_getsecurityinfo.htm" target="_blank" title="Advantage SQL Engine - sp_GetSecurityInfo"&gt;sp_GetSecurityInfo&lt;/a&gt; returns information about the type of encryption being used on the connection &lt;/li&gt;
&lt;/ul&gt;
Next week I'll be walking through using the new strong encryption with Advantage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-9008561840870075370?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=7qMVoZTsS-4:Wl4qlkJdTEY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=7qMVoZTsS-4:Wl4qlkJdTEY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=7qMVoZTsS-4:Wl4qlkJdTEY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=7qMVoZTsS-4:Wl4qlkJdTEY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=7qMVoZTsS-4:Wl4qlkJdTEY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=7qMVoZTsS-4:Wl4qlkJdTEY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=7qMVoZTsS-4:Wl4qlkJdTEY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/7qMVoZTsS-4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/9008561840870075370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=9008561840870075370&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/9008561840870075370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/9008561840870075370?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/7qMVoZTsS-4/advantage-strong-encryption-overview.html" title="Advantage Strong Encryption Overview" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/advantage-strong-encryption-overview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcEQnk_eyp7ImA9Wx9SF0g.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-1921105260307258915</id><published>2010-12-06T07:00:00.000-07:00</published><updated>2010-12-07T14:23:23.743-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-07T14:23:23.743-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Announcements" /><title>Advantage 10.1 Now Available</title><content type="html">&lt;p&gt;Advantage version 10.1 is now available for download on the &lt;a title="Advantage Developer Zone" href="http://Devzone.AdvantageDatabase.com" target="_blank"&gt;DevZone&lt;/a&gt;. Here are the highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support for Delphi XE &lt;/li&gt;    &lt;li&gt;Support for &lt;a title="Free Pascal Lazarus Project" href="http://www.lazarus.freepascal.org/" target="_blank"&gt;Lazarus&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Unicode Full Text Search Support &lt;/li&gt;    &lt;li&gt;Support for Copy/Paste of rows in ARC &lt;/li&gt;    &lt;li&gt;Strong Encryption and &lt;a title="Wikipedia - FIPS 140-2" href="http://en.wikipedia.org/wiki/FIPS_140-2" target="_blank"&gt;FIPS 140-2&lt;/a&gt; compliance &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For a complete list of supported platforms and IDEs refer to the &lt;a title="Advantage Database Server detailed platform support matrix" href="http://www.sybase.com/files/Data_Sheets/advantage_supported_platforms_ds.pdf" target="_blank"&gt;Advantage Supported Platforms&lt;/a&gt; document. Details on the new encryption options is available &lt;a title="Advantage FIPS Encryption Security Option Add-on" href="http://www.sybase.com/products/databasemanagement/advantagedatabaseserver/encryption" target="_blank"&gt;here&lt;/a&gt;. For additional details on the new features refer to the &lt;a href="http://www.sybase.com/files/White_Papers/Advantage_WhatsNewADS10_WP.pdf" target="_blank"&gt;What's New in Advantage 10 and 10.1&lt;/a&gt; document.&lt;/p&gt;  &lt;p&gt;I'll have a couple of articles on the new encryption support later this week. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-1921105260307258915?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=vudMRdHQnsQ:0ZqxJe5qBBY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=vudMRdHQnsQ:0ZqxJe5qBBY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=vudMRdHQnsQ:0ZqxJe5qBBY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=vudMRdHQnsQ:0ZqxJe5qBBY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=vudMRdHQnsQ:0ZqxJe5qBBY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=vudMRdHQnsQ:0ZqxJe5qBBY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=vudMRdHQnsQ:0ZqxJe5qBBY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/vudMRdHQnsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/1921105260307258915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=1921105260307258915&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/1921105260307258915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/1921105260307258915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/vudMRdHQnsQ/advantage-101-now-available.html" title="Advantage 10.1 Now Available" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/advantage-101-now-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YNQ3w8cCp7ImA9Wx9RGEs.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-3193505534471542684</id><published>2010-12-03T07:00:00.000-07:00</published><updated>2010-12-20T11:19:52.278-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-20T11:19:52.278-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Gadgets" /><title>Geek Christmas List - 2010</title><content type="html">It's the most wonderful time of the year and many sites are publishing gift guides. Of course many of these sites are doing it for purely capitalistic reasons, which I fully support. I just like to take this opportunity to talk about some of the cool gifts that&amp;nbsp; I have been keeping my eye on this year.&lt;br /&gt;
&lt;img align="right" alt="AppleTV" border="0" height="189" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TQKczINiP8I/AAAAAAAAD_M/eNkwxMqa1Zg/AppleTV.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="AppleTV" width="240" /&gt;I have been a &lt;a href="http://blog.advantageevangelist.com/2009/06/best-cell-phone-ever.html" target="_blank" title="The Best Cell Phone Ever?"&gt;fan of Apple&lt;/a&gt; products for several years, I have always liked the quality and usability they provide. So this year I have looked into getting the latest generation &lt;a href="http://www.apple.com/appletv/" target="_blank"&gt;AppleTV&lt;/a&gt;. It allows access to your iTunes library, rentals and Netflix. It has HDMI output and both wired and wireless network adapters. We gave away a couple of these at the Southwest Fox show a couple of months ago. I am also very excited about this device due to the new airplay support which allows users to send content from other iOS devices directly to the AppleTV via a wireless network.&lt;br /&gt;
&lt;img align="left" alt="MacBookAir" border="0" height="138" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TQKc0X5FAxI/AAAAAAAAD_Q/YTzISxkon-w/MacBookAir%5B1%5D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="MacBookAir" width="240" /&gt;Another great Apple product is the new MacBook Air, no offense to the iPad which I also think is awesome. The new MacBook Air brings all of the great things about the iPad to a full computer. It is equipped with a Solid State Drive (SSD) which provides nearly instant on just like the iOS device. It has exceptional battery life and a full keyboard. Unlike other iOS devices it includes support for Flash providing for a full web browsing experience. &lt;br /&gt;
&lt;img align="right" alt="CrucialSSD" border="0" height="130" src="http://lh6.ggpht.com/_pJ4HkzTKiOA/TQKc1ENPeSI/AAAAAAAAD_Y/fxGXqxMs2U0/CrucialSSD%5B1%5D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="CrucialSSD" width="175" /&gt;If your looking for something for your current PC I would recommend a SSD. Prices have come down significantly over last year with drives starting at under $100. Many of the reviews I have read recommend the &lt;a href="http://www.crucial.com/support/ssd/ssd_buying_guide.aspx" target="_blank"&gt;Crucial RealSSD C300 series&lt;/a&gt; of drives. They have good durability and very fast data transfer rates ( reads up to 355MB/s ). The 128GB model costs about $300 and is a good size for a laptop especially if you take your current HDD and put it into an expansion bay that fits where the DVD drive resides.&lt;br /&gt;
&lt;img align="left" alt="EVGA_UV16" border="0" height="200" src="http://lh3.ggpht.com/_pJ4HkzTKiOA/TQKc2HMcHVI/AAAAAAAAD_c/7QjyvAIYkJM/EVGA_UV16%5B1%5D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="EVGA_UV16" width="170" /&gt;I use a laptop with a docking station at work which allows me to run two external monitors. However, there are a few times when I would like to have just a bit more space. Since you cannot add an additional video card to a laptop I have been researching a USB Display Adapter. After seeing a few in action and reading several reviews I have settled on the UV Plus from EVGA. It is available online for about $50 and supports resolutions up to 1600 X 1200 at 60hz. &lt;br /&gt;
&lt;img align="right" alt="love-my-geek-regT" border="0" height="240" src="http://lh6.ggpht.com/_pJ4HkzTKiOA/TQKc2xsY-tI/AAAAAAAAD_g/3k08QtUlqCI/love-my-geek-regT%5B4%5D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="love-my-geek-regT" width="186" /&gt;There are many other less practical gifts out there. For example I have wanted to get a &lt;a href="http://www.thinkgeek.com/geektoys/warfare/8a0f/" target="_blank"&gt;USB Rocket Launcher&lt;/a&gt; for years, we have also discussed marshmallow guns. A friend of mine bought a pair of the &lt;a href="http://www.thinkgeek.com/tshirts-apparel/interactive/a090/" target="_blank"&gt;eight bit dynamic lif&lt;/a&gt;e t-shirts for him and his wife. These shirts have hearts on them that light up as the shirts get closer together. Maybe I'll just get my wife the I &amp;lt;heart&amp;gt; my geek shirt this year.&lt;br /&gt;
If your looking for some more gift guides I would recommend the &lt;a href="http://gizmodo.com/5694699/gizmodos-gift-guides-updated" target="_blank"&gt;gift guides&lt;/a&gt; available on Gizmodo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-3193505534471542684?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=BVWtRWu5P3g:tcHXBJ6KT8A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=BVWtRWu5P3g:tcHXBJ6KT8A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=BVWtRWu5P3g:tcHXBJ6KT8A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=BVWtRWu5P3g:tcHXBJ6KT8A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=BVWtRWu5P3g:tcHXBJ6KT8A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=BVWtRWu5P3g:tcHXBJ6KT8A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=BVWtRWu5P3g:tcHXBJ6KT8A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/BVWtRWu5P3g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/3193505534471542684/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=3193505534471542684&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/3193505534471542684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/3193505534471542684?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/BVWtRWu5P3g/geek-christmas-list-2010.html" title="Geek Christmas List - 2010" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_pJ4HkzTKiOA/TQKczINiP8I/AAAAAAAAD_M/eNkwxMqa1Zg/s72-c/AppleTV.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/geek-christmas-list-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACSXY7eyp7ImA9Wx9SE04.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-7169205169327990766</id><published>2010-12-01T07:00:00.000-07:00</published><updated>2010-12-02T16:49:28.803-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-02T16:49:28.803-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FAQ" /><title>FAQs – November 2010</title><content type="html">&lt;h3&gt;Advantage ADO.NET Designers Don't Work with Delphi Prism&lt;/h3&gt;  &lt;p&gt;The Advantage .NET Data Provider includes several wizards which enable functionality such as creating a connection using the Server Explorer, Drag and Drop onto a DataSet object and generating typed DataSets. Addins like these for Visual Studio require the full version of Visual Studio. They will not work in the Express versions or Shell versions of Visual Studio. Since Delphi Prism uses the Visual Studio shell these designers are not available to Prism users.&lt;/p&gt;  &lt;h3&gt;Delphi XE Support&lt;/h3&gt;  &lt;p&gt;The latest version of Delphi, Delphi XE, is not yet supported by the Advantage Components for Delphi. Support for Delphi XE is planned for Advantage 10.1 which is scheduled for release in December.&amp;#160; Delphi XE support will also be included in a maintenance release of the Advantage Components for Delphi version 9.1 shortly.&lt;/p&gt;  &lt;p&gt;For the latest information on all supported platforms and IDEs refer to the &lt;a title="http://www.sybase.com/files/Data_Sheets/advantage_supported_platforms_ds.pdf" href="http://www.sybase.com/files/Data_Sheets/advantage_supported_platforms_ds.pdf" target="_blank"&gt;Advantage Supported Platforms&lt;/a&gt; document.&lt;/p&gt;  &lt;h3&gt;7075 Error with Local Server&lt;/h3&gt;  &lt;p&gt;The Advantage Local Server (ALS) is limited to 5 concurrent users and will return a 7075 error when a sixth user attempts to connect. Another user cannot connect until one of the current users disconnects. A user is each machine that is connected to ALS.&lt;/p&gt;  &lt;p&gt;If a client is ended abnormally, i.e. CTRL-ALT-DEL, the table(s) may not be closed correctly. In this case a new user may receive the 7075 error even if fewer than five users are currently connected. You can resolve this problem by opening and closing the table from the workstation where the application abnormally terminated. This will &amp;quot;free&amp;quot; up the connection for a new user.&lt;/p&gt;  &lt;h3&gt;ARC Slow to Open a Table with Many Fields&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pJ4HkzTKiOA/TPgwhIgslqI/AAAAAAAAD-c/76uWMuUGInM/s1600-h/ARC_UI_Settings2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ARC_UI_Settings" border="0" alt="ARC_UI_Settings" align="right" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TPgwh-BIjuI/AAAAAAAAD-g/EZeIR5XMMCo/ARC_UI_Settings_thumb.jpg?imgmax=800" width="244" height="242" /&gt;&lt;/a&gt;When opening a table with many fields ARC may freeze or hang for several seconds. By default ARC uses the size of each field to provide an optimal display in the grid when the table is displayed. The more fields in the table the longer this process can take. &lt;/p&gt;  &lt;p&gt;You can avoid this problem by changing the default settings in ARC. Choose Tools –&amp;gt; ARC Settings and go to the User Interface tab. From here you can limit the size of the columns using the &amp;quot;Limit amount of data displayed…&amp;quot; and &amp;quot;Minimum Column Width' settings. More information is available in this &lt;a title="Advantage Data Architect (ARC) Slow Performance When Opening a Table With a Large Number of Fields" href="http://devzone.advantagedatabase.com/dz/content.aspx?Key=17&amp;amp;RefNo=090911-2205" target="_blank"&gt;knowledge base article&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-7169205169327990766?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=mUJko0wETuo:LyV6yOiobes:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=mUJko0wETuo:LyV6yOiobes:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=mUJko0wETuo:LyV6yOiobes:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=mUJko0wETuo:LyV6yOiobes:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=mUJko0wETuo:LyV6yOiobes:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=mUJko0wETuo:LyV6yOiobes:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=mUJko0wETuo:LyV6yOiobes:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/mUJko0wETuo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/7169205169327990766/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=7169205169327990766&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7169205169327990766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7169205169327990766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/mUJko0wETuo/faqs-november-2010.html" title="FAQs – November 2010" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_pJ4HkzTKiOA/TPgwh-BIjuI/AAAAAAAAD-g/EZeIR5XMMCo/s72-c/ARC_UI_Settings_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/12/faqs-november-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AARXk6eip7ImA9Wx5aE04.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-8990702787092701143</id><published>2010-11-01T08:00:00.000-06:00</published><updated>2010-11-09T13:49:04.712-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-09T13:49:04.712-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FAQ" /><title>FAQs – October 2010</title><content type="html">&lt;h3&gt;Distributing Advantage Client DLLs&lt;/h3&gt;  &lt;p&gt;The Advantage client engine is required by nearly every client and must be distributed with your application. You must include the ACE32.dll with all Windows 32-bit applications with the exception of Java clients. The Advantage JDBC driver includes all of the necessary client code within the driver itself. Windows 64-bit applications require the 64-bit version of ACE which is available for both version 9 and 10. In version 10 this dll has been renamed to ACE64.dll, with version 9 it is still named ACE32.dll. The 64-bit version of the Advantage client dlls are included with the &lt;a title="Advantage Client Engine - version 10" href="http://devzone.advantagedatabase.com/dz/content.aspx?key=20&amp;amp;Release=15&amp;amp;Product=5" target="_blank"&gt;ACESDK&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You must also include the Advantage Local Server files or Advantage Communication dll for remote server applications. The Advantage Local Server dll is named ADSLOC32.dll, version 10 includes a 64-bit version ADSLOC64.dll. You can also optionally include a configuration file ADSLocal.cfg. When using the remote server you will need to include the Advantage Communication Layer AXCWS32.dll or AXCWS64.dll for 64-bit in version 10.&lt;/p&gt;  &lt;p&gt;For information about distributing specific clients see the &lt;a title="Advantage Client Engine - Distributing/Deploying an Advantage Client Engine-Enabled Application" href="http://devzone.advantagedatabase.com/dz/webhelp/Advantage10/ace_distributing_an_advantage_client_engine_enabled_application.htm" target="_blank"&gt;help file&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Triggers on DBF Tables&lt;/h3&gt;  &lt;p&gt;You can assign triggers to DBFs when they are added to an Advantage Data Dictionary. These triggers will be executed as long as the table is opened through a data dictionary connection. DBFs that are associated with a data dictionary can still be opened as a free table. When the DBF is opened as a free table any associated triggers will not be fired.&lt;/p&gt;  &lt;p&gt;Additionally triggers may not fire on a DBF opened through a data dictionary if the table is currently opened as a free table. More information can be found in this &lt;a title="Trigger on DBF Fail to Fire if Table Opened as Free Table" href="http://devzone.advantagedatabase.com/dz/Content.aspx?Key=17&amp;amp;RefNo=101011-2369" target="_blank"&gt;knowledge base article&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;10038 Errors On Startup&lt;/h3&gt;  &lt;p&gt;When Advantage starts up it binds to two ports, one for LAN communication and one for Internet communication. The default port for LAN use is 6262 and the Internet port is disabled by default. If Advantage cannot bind to the specified ports it may cause 10038, Attempt to send a message through a socket failed, error. This can be caused if the LAN and Internet ports are set to the same value or by a corrupt protocol stack. It can also be caused by virtual sockets created by anti-virus programs. See this &lt;a title="Thousands of 10038 Errors Logged to Error Logs Upon Startup" href="http://devzone.advantagedatabase.com/dz/Content.aspx?Key=17&amp;amp;RefNo=101012-2371" target="_blank"&gt;Knowledge Base&lt;/a&gt; article for additional information. &lt;/p&gt;  &lt;h3&gt;Getting Date/Time Values from the Server&lt;/h3&gt;  &lt;p&gt;There are several ways to get current date/time values from the Advantage server. There are several date/time functions available in the SQL engine. For the current timestamp use the NOW() function, CURDATE() or CURRENT_DATE() for the current date and CURTIME or CURRENT_TIME for the current time. Many of these can also be used as default values for data dictionary bound tables. &lt;/p&gt;  &lt;p&gt;Additionally the AdsConnection object in .NET has a ServerTime property which contains the timestamp of the server. The TAdsConnection component in Delphi has a GetServerTime method which returns a tDateTime value.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-8990702787092701143?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=hLnf8md0rmo:yN0mHdeI3As:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=hLnf8md0rmo:yN0mHdeI3As:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=hLnf8md0rmo:yN0mHdeI3As:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=hLnf8md0rmo:yN0mHdeI3As:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=hLnf8md0rmo:yN0mHdeI3As:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=hLnf8md0rmo:yN0mHdeI3As:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=hLnf8md0rmo:yN0mHdeI3As:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/hLnf8md0rmo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/8990702787092701143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=8990702787092701143&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8990702787092701143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/8990702787092701143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/hLnf8md0rmo/faqs-october-2010.html" title="FAQs – October 2010" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/11/faqs-october-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRX44fCp7ImA9Wx9WE0o.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-7139084693615868144</id><published>2010-10-29T07:00:00.001-06:00</published><updated>2011-01-18T11:31:54.034-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T11:31:54.034-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Advantage Web API" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobility" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Advantage Web API with Windows Phone 7</title><content type="html">&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMrwFmGowUI/AAAAAAAAD-Q/v3T-IW-MB7I/s1600-h/AdsWeb_WP7_Example4.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="AdsWeb_WP7_Example" border="0" alt="AdsWeb_WP7_Example" align="right" src="http://lh6.ggpht.com/_pJ4HkzTKiOA/TMrwGbLWi9I/AAAAAAAAD-U/tcG9JtKJ3PE/AdsWeb_WP7_Example_thumb2.jpg?imgmax=800" width="129" height="240" /&gt;&lt;/a&gt; Earlier in the week I discussed using the Advantage Web API with Windows Mobile 6 (WM6) in this post I will be discussing using the API with Windows Phone 7 (WP7). The techniques are very similar for both platforms. However, there are several differences with Microsoft's latest mobile platform.&lt;/p&gt;  &lt;p&gt;Most notably WP7 applications are written in Silverlight or XNA which are both much different than the Windows Forms model used by WM6. The Silverlight libraries do not include any functions for creating a custom certificate handler, therefore you must use a valid certificate or register your self-signed certificate on the phone. I haven't found a good way of doing this yet so for now I am doing all my testing without SSL. However, you should always use SSL in a production environment.&lt;/p&gt;  &lt;p&gt;The mechanism for retrieving data from the Advantage Web API is quite similar to the mechanism used with WM6. For WP7 I will once again use a JSON serializer and a custom class/object to work with the data on the device. Creating the class for the deserializer to work with is very similar to the one I &lt;a title="Consuming Advantage Web API Results" href="http://blog.advantageevangelist.com/2010/10/consuming-json-results.html" target="_blank"&gt;discussed&lt;/a&gt; last week. The classes will use the System.Runtime.Serialization library I used an article by &lt;a title="Windows Phone 7 OData CTP, nope use REST and JSON" href="http://www.nickharris.net/2010/08/windows-phone-7-odata-ctp-nope-use-rest-and-json/" target="_blank"&gt;Nick Harris&lt;/a&gt; as my starting point. The class for the customer summary is below.&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;[DataContract]
public partial class CustomerSummary : BaseMyContent
{
  [DataMember]
  public string CustomerID { get; set; }
  [DataMember]
  public string CustomerName { get; set; }
  [DataMember]
  public string CustomerCompany { get; set; }
}&lt;/pre&gt;

&lt;p&gt;Web requests from WP7 are done in an asyncronous manner making the code a bit more complex than making a request with WM6. Additionally Microsoft provides a JSON serializer which is found in the System.Runtime.Serialization.Json library, which can be used to populate the data classes. I'll be using this serializer instead of the JSON.NET libraries.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;private void GetData(string URL)
{
  var request = WebRequest.Create(HttpUtility.HtmlEncode(URL)) as HttpWebRequest;
  request.Accept = &amp;quot;application/json&amp;quot;;
  request.Headers[&amp;quot;Authorization&amp;quot;] = &amp;quot;Basic &amp;quot; + 
          Convert.ToBase64String(Encoding.UTF8.GetBytes(settings.Credentials));
  request.BeginGetResponse(RequestCallback, request);
}

void RequestCallback(IAsyncResult response)
{
  var request = response.AsyncState as HttpWebRequest;
  resp = request.EndGetResponse(response);
            
  if (resp != null)
  {
    var jsonSerializer = new DataContractJsonSerializer(typeof(BaseJSONResult&lt;customersummary&gt;));

    using (var stream = resp.GetResponseStream())
    {
      customerList = jsonSerializer.ReadObject(stream) as BaseJSONResult&lt;customersummary&gt;;
    }

    if (invoiceList.Result != null)
    {
      nextInvoices = invoiceList.Result.NextLinkUri;
      this.Dispatcher.BeginInvoke(() =&amp;gt; DataRetrieved());
    }
    else
    this.Dispatcher.BeginInvoke(() =&amp;gt; HandleError(invoiceList.Error.ErrorMessage.Value));
  }
}

void DataRetrieved()
{
  PageTitle.Text = &amp;quot;Invoice List&amp;quot;;
  listboxCustomers.ItemsSource = customerList.Result.MyContents;
}

void HandleError(string errMessage)
{
  MessageBox.Show(errMessage);
  NavigationService.GoBack();
}&lt;/pre&gt;

&lt;p&gt;Since the request is processed asyncronously we need to use an Invoker to interact with the UI, hence the this.Dispatcher.BeginInvoke calls. Now that we have the results stored in our class we can now display the data. This is done by setting the ItemsSource property of the listbox and then binding the fields to the controls within the listbox. The xaml for the listboxCustomers is below. &lt;/p&gt;

&lt;pre class="brush: xaml"&gt;&amp;lt;grid grid.rowspan=&amp;quot;2&amp;quot; margin=&amp;quot;12,149,12,12&amp;quot; x:name=&amp;quot;ContentPanel&amp;quot;&amp;gt;
  &amp;lt;listbox margin=&amp;quot;0,0,-12,0&amp;quot; x:name=&amp;quot;MainListBox&amp;quot; height=&amp;quot;607&amp;quot;               selectionchanged=&amp;quot;MainListBox_SelectionChanged&amp;quot; itemssource=&amp;quot;{Binding Items}&amp;quot;&amp;gt;
  &amp;lt;listbox.itemtemplate&amp;gt;
    &amp;lt;datatemplate&amp;gt;
        &amp;lt;stackpanel margin=&amp;quot;0,0,0,17&amp;quot; width=&amp;quot;432&amp;quot;&amp;gt;
          &amp;lt;textblock textwrapping=&amp;quot;Wrap&amp;quot; text=&amp;quot;{Binding CustomerName}&amp;quot; /&amp;gt;
          &amp;lt;textblock margin=&amp;quot;12,-6,12,0&amp;quot; textwrapping=&amp;quot;Wrap&amp;quot; 
                        text=&amp;quot;{Binding CustomerCompany}&amp;quot; /&amp;gt;
        &amp;lt;/stackpanel&amp;gt;
      &amp;lt;/datatemplate&amp;gt;
    &amp;lt;/listbox.itemtemplate&amp;gt;
  &amp;lt;/listbox&amp;gt;
&amp;lt;/grid&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-7139084693615868144?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ZWzhKHUJZfQ:I2xVUbybi3E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ZWzhKHUJZfQ:I2xVUbybi3E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ZWzhKHUJZfQ:I2xVUbybi3E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ZWzhKHUJZfQ:I2xVUbybi3E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ZWzhKHUJZfQ:I2xVUbybi3E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ZWzhKHUJZfQ:I2xVUbybi3E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ZWzhKHUJZfQ:I2xVUbybi3E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/ZWzhKHUJZfQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/7139084693615868144/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=7139084693615868144&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7139084693615868144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7139084693615868144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/ZWzhKHUJZfQ/advantage-web-api-with-windows-phone-7.html" title="Advantage Web API with Windows Phone 7" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_pJ4HkzTKiOA/TMrwGbLWi9I/AAAAAAAAD-U/tcG9JtKJ3PE/s72-c/AdsWeb_WP7_Example_thumb2.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/advantage-web-api-with-windows-phone-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFSXw5cSp7ImA9Wx5bEko.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-4740145893520781584</id><published>2010-10-27T07:00:00.000-06:00</published><updated>2010-10-28T09:23:38.229-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T09:23:38.229-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mobility" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Advantage Data Class</title><content type="html">&lt;p&gt;As I mentioned in my &lt;a title="Advantage Web API with Windows Mobile" href="http://blog.advantageevangelist.com/2010/10/advantage-web-api-with-windows-mobile.html" target="_blank"&gt;first post&lt;/a&gt; about the Advantage Web API I talked about a class that I wrote which parsed a JSON result and created a DataTable object. This is an alternate to using &lt;a title="Consuming Advantage Web API Results" href="http://blog.advantageevangelist.com/2010/10/consuming-json-results.html" target="_blank"&gt;specific classes&lt;/a&gt; to work with the results from a Web API request. &lt;/p&gt;  &lt;p&gt;I like this method because it can generate a DataTable for any request so I don't have to create a specific class for each set of data I request. The generated DataTable is also very easy to bind to various .NET controls. Using specific classes provide a more strongly typed representation of the data and can be bound to controls with a little more effort. Defined objects can also be manipulated directly by a JSON serializer.&lt;/p&gt;  &lt;p&gt;In order to create a DataTable we will have to parse the JSON ourselves, we cannot rely on the serializer. This is done with the following method. Note that there is a mechanism for error checking in the method.&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;private bool ParseJSON( string stringJSON )
{
  string sValue = string.Empty;
  dataTable = new DataTable();

  using ( JsonTextReader reader = new JsonTextReader(new StringReader(stringJSON)))
  {             
    // Move to the array of objects
    do
    {
      if (reader.TokenType == JsonToken.PropertyName 
          &amp;amp;&amp;amp; reader.Value.ToString().Contains(&amp;quot;error&amp;quot;))
      {
        parseError(reader);
        return false;
      }
      reader.Read();
    } while (reader.TokenType != JsonToken.StartArray);


    // Get the dataTable
    PopulateDataTable(reader);
                
    // Get the rest of the Information
    while (reader.Read())
    {
      if (reader.TokenType == JsonToken.PropertyName)
      {
        if (reader.Value.ToString().Contains(&amp;quot;__next&amp;quot;))
        {
          reader.Read();
          nextURI = reader.Value.ToString();
        }

        if (reader.Value.ToString().Contains(&amp;quot;rows_affected&amp;quot;))
        {
          reader.Read();
          rowsAffected = Convert.ToInt32(reader.Value);
        }

        if (reader.Value.ToString().Contains(&amp;quot;last_autoinc&amp;quot;))
        {
          reader.Read();
          lastAutoinc = Convert.ToInt32(reader.Value);
        }
      }
    }
  }

  return true;
}&lt;/pre&gt;

&lt;p&gt;To create the DataTable object we examine the first object in the results array. The &lt;a href="http://json.codeplex.com/" target="_blank"&gt;JSON.NET Library&lt;/a&gt; has a mechanism for determining the data type which we will use to create the columns in the data table. We also need to store the information we retrieve since we can only move forward through the JSON string. We will do this with a simple helper class that will store the Column Name, Data Type and Value. &lt;/p&gt;

&lt;pre class="brush: csharp"&gt;private DataTable CreateDataTable(JsonReader reader)
{
  DataTable dt = new DataTable();
  string sItem = string.Empty;
  List&lt;datarowitem&gt; lItems = new List&lt;datarowitem&gt;();

  // Create a data row based on supplied table
  DataRow dr = dt.NewRow();

  // Put the values into the datarow
  while (reader.TokenType != JsonToken.EndObject)
  {
    try
    {
      if (reader.TokenType == JsonToken.PropertyName)
        sItem = reader.Value.ToString();
      else
      {
        switch (reader.TokenType)
        {
          case JsonToken.Boolean:
            dt.Columns.Add(sItem, Type.GetType(&amp;quot;System.Boolean&amp;quot;));
            break;
          case JsonToken.Date:
            dt.Columns.Add(sItem, Type.GetType(&amp;quot;System.DateTime&amp;quot;));
            break;
          case JsonToken.Float:
            dt.Columns.Add(sItem, Type.GetType(&amp;quot;System.Double&amp;quot;));
            break;
          case JsonToken.Integer:
            dt.Columns.Add(sItem, Type.GetType(&amp;quot;System.Int32&amp;quot;));
            break;
          case JsonToken.String:
          default:
            dt.Columns.Add(sItem, Type.GetType(&amp;quot;System.String&amp;quot;));
            break;
        }
        
        // Store the column value
        lItems.Add(new DataRowItem(sItem, reader.TokenType, reader.Value.ToString()));
      }
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }

    reader.Read();
  } 

  // add the row to the datatable
  AddDataRow(lItems, dt);

  return dt;
}&lt;/pre&gt;

&lt;p&gt;The AddDataRow function adds the values that we stored in the DataRowItem object into a new row in the newly created DataTable. &lt;/p&gt;

&lt;pre class="brush: csharp"&gt;private static bool AddDataRow(List&lt;datarowitem&gt; lDataItems, DataTable dt)
{
  // Create a data row based on supplied table
  DataRow dr = dt.NewRow();

  foreach (DataRowItem di in lDataItems)
  {
    switch (di.ColumnType)
    {
      case JsonToken.Boolean:
        dr[di.ColumnName] = Convert.ToBoolean(di.ColumnValue);
        break;
      case JsonToken.Date:
        dr[di.ColumnName] = Convert.ToDateTime(di.ColumnValue);
        break;
      case JsonToken.Float:
        dr[di.ColumnName] = Convert.ToDouble(di.ColumnValue);
        break;
      case JsonToken.Integer:
        dr[di.ColumnName] = Convert.ToInt32(di.ColumnValue);
        break;
      case JsonToken.Null:
        dr[di.ColumnName] = null;
        break;
      case JsonToken.String:
        dr[di.ColumnName] = di.ColumnValue;
        break;
    }
  }

  // add the row to the datatable
  dt.Rows.Add(dr);

  return true;
}&lt;/pre&gt;

&lt;p&gt;After the first record has been read and the table has been created the rest of the records can be added without having to create a DataItem object. Therefore, there is an overloaded version of AddRow&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;private static bool AddDataRow(JsonReader reader, DataTable dt)
{
  string sItem = string.Empty;

  // Create a data row based on supplied table
  DataRow dr = dt.NewRow();

  // Put the values into the datarow
  while (reader.TokenType != JsonToken.EndObject)
  {
      try
      {
        if (reader.TokenType == JsonToken.PropertyName)
          sItem = reader.Value.ToString();
        else
        {
          switch (reader.TokenType)
          {
            case JsonToken.Boolean:
              dr[sItem] = Convert.ToBoolean(reader.Value);
              break;
            case JsonToken.Date:
              dr[sItem] = Convert.ToDateTime(reader.Value);
              break;
            case JsonToken.Float:
              dr[sItem] = Convert.ToDouble(reader.Value);
              break;
            case JsonToken.Integer:
              dr[sItem] = Convert.ToInt32(reader.Value);
              break;
            case JsonToken.Null:
              dr[sItem] = null;
              break;
            case JsonToken.String:
              dr[sItem] = reader.Value.ToString();
              break;
          }
        }
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
      }

      reader.Read();
  }
  // add the row to the datatable
  dt.Rows.Add(dr);

  return true;
}&lt;/pre&gt;

&lt;p&gt;As I said in the beginning this is a bit more difficult than using pre-defined objects/classes with a JSON serializer/deserializer. However, DataTables are very easy to bind to many of the controls available in the .NET Compact Framework. The downside is that the data types may not always be correct depending on the serializer you are using.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-4740145893520781584?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=uV5t4cP9Ikc:xQ9e_sQvJb0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=uV5t4cP9Ikc:xQ9e_sQvJb0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=uV5t4cP9Ikc:xQ9e_sQvJb0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=uV5t4cP9Ikc:xQ9e_sQvJb0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=uV5t4cP9Ikc:xQ9e_sQvJb0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=uV5t4cP9Ikc:xQ9e_sQvJb0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=uV5t4cP9Ikc:xQ9e_sQvJb0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/uV5t4cP9Ikc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/4740145893520781584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=4740145893520781584&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4740145893520781584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/4740145893520781584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/uV5t4cP9Ikc/advantage-data-class.html" title="Advantage Data Class" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/advantage-data-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EEQ3w4fyp7ImA9Wx5bEEw.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-7974854871430095520</id><published>2010-10-25T07:00:00.000-06:00</published><updated>2010-10-25T07:00:02.237-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-25T07:00:02.237-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>Book Review – Database in Depth</title><content type="html">&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596100124?ie=UTF8&amp;amp;tag=viewfromanadv-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596100124"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="DatabaseInDepth-Date[3]" border="0" alt="DatabaseInDepth-Date[3]" align="right" src="http://lh3.ggpht.com/_pJ4HkzTKiOA/TMHmjRNYtRI/AAAAAAAAD-M/LE3qgOg5Nmo/DatabaseInDepthDate36.jpg?imgmax=800" width="124" height="162" /&gt;&lt;/a&gt;&lt;img style="border-bottom-style: none !important; border-right-style: none !important; margin: 0px; border-top-style: none !important; border-left-style: none !important" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=viewfromanadv-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596100124" width="1" height="1" /&gt;In keeping with my &amp;quot;Back to Basics&amp;quot; theme for this year I picked up a copy of Database In Depth by C.J. Date. This book includes a basic introduction into the relational database model and how it is different than many of the many implementations currently available. This book discusses the relational theory as developed by E.F. Codd and how this theory has become the basis for how data is manipulated today.&lt;/p&gt;  &lt;p&gt;C.J. Date covers this very complex topic using many examples and discussions. I found it very enlightening and useful although it took some effort to get through the book. The material is explained and examples are given, however, sometimes I had to do the provided exercises in order to really get a firm grasp on the information. This is definitely a book that requires some effort by the reader.&lt;/p&gt;  &lt;p&gt;The first chapter of the book is a quick introduction into the terminology used in relational theory and how some of it is different than the SQL model which gets more attention. The following four chapters go into these various types and relationships in much more detail. The next two chapters focus more on how the relational theory is applied with respect to constraints and database design. The final chapter defines the relational model and compares it to other data models.&lt;/p&gt;  &lt;p&gt;Terminology is a major factor in this book. I tend to think of databases in a SQL sense which is slightly different than the relational sense. SQL is based on rowsets or resultsets whereas relational theory uses relvars and tuples to define data. Once I was comfortable with the differences the information was easier to digest.&lt;/p&gt;  &lt;p&gt;Of particular note is the fact that Mr. Date does not support the implementation of nulls in databases. He makes some convincing arguments in chapter three. Essentially, it boils down to the complexity of three value logic. Because a boolean result can now return three values ( true, false or unknown ) instead of just two. I agree with his point, however, in the real world I see practical uses for allowing null.&lt;/p&gt;  &lt;p&gt;The final chapter does a good job of wrapping up the information presented in the book as well as provides a definition of the relational model. Below are the five components of the relational model ( from chapter eight page 164 ):&lt;/p&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;An open-ended collection of scalar types, including the particular type BOOLEAN (truth values) &lt;/li&gt;      &lt;li&gt;A relation type generator and an intended interpretation for relations of types generated thereby &lt;/li&gt;      &lt;li&gt;Facilities for defining relation variables of such generated relation types &lt;/li&gt;      &lt;li&gt;A relational assignment operator for assigning relation values to such relation variables &lt;/li&gt;      &lt;li&gt;An open-ended collection of generic relational operators for deriving relation values from other relation values. &lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;The bottom line: this book contains a lot of useful information on the foundations of modern database systems. It is highly technical and covers the topics in a very textbook manner.&amp;#160; Although the book is not an &amp;quot;easy read&amp;quot; there is a ton of good information in the 200 pages. This isn't the kind of book you read straight through. It takes time to get through the material and it even includes many exercises used to reinforce the information. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-7974854871430095520?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=cSM3boW6VFk:kLsQX_P2wOw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=cSM3boW6VFk:kLsQX_P2wOw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=cSM3boW6VFk:kLsQX_P2wOw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=cSM3boW6VFk:kLsQX_P2wOw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=cSM3boW6VFk:kLsQX_P2wOw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=cSM3boW6VFk:kLsQX_P2wOw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=cSM3boW6VFk:kLsQX_P2wOw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/cSM3boW6VFk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/7974854871430095520/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=7974854871430095520&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7974854871430095520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7974854871430095520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/cSM3boW6VFk/book-review-database-in-depth.html" title="Book Review – Database in Depth" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_pJ4HkzTKiOA/TMHmjRNYtRI/AAAAAAAAD-M/LE3qgOg5Nmo/s72-c/DatabaseInDepthDate36.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/book-review-database-in-depth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEFQ3s7cCp7ImA9Wx5UF0U.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-987477902412335260</id><published>2010-10-22T07:00:00.000-06:00</published><updated>2010-10-22T15:56:52.508-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T15:56:52.508-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mobility" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Handling Errors with the Advantage Web API</title><content type="html">&lt;p&gt;The one thing that I didn't discuss in my &lt;a title="Comsuming Advantage Web API Results" href="http://blog.advantageevangelist.com/2010/10/consuming-json-results.html" target="_blank"&gt;previous post&lt;/a&gt; was how to handle errors returned from an Advantage Web API request. If an error occurs when making a request the error information is packaged up as a JSON response just like a successful data request. Therefore, errors can be handled using classes just like we did with data results.&lt;/p&gt;  &lt;p&gt;Below is a sample error response received from a request to the Web API:&lt;/p&gt;  &lt;pre class="brush:plain"&gt;{
  &amp;quot;error&amp;quot;: {
    &amp;quot;code&amp;quot;: &amp;quot;7200&amp;quot;,
    &amp;quot;message&amp;quot;: {
      &amp;quot;lang&amp;quot;: &amp;quot;en-US&amp;quot;,
      &amp;quot;value&amp;quot;: &amp;quot;Error 7200:  AQE Error:  State = HY000;   NativeError = 5004;  [iAnywhere Solutions][Advantage SQL][ASA] Error 5004:  Either ACE could not find the specified file, or you do not have sufficient rights to access the file. Table name: SomeTable&amp;quot;
    }
  }
}&lt;/pre&gt;

&lt;p&gt;Instead of the results array we received with a successful request we are now getting error information. So we need to create classes for the serializer to load the information into. The error object defined in the JSON includes a code and a message object. Therefore we will need two classes to handle an error.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;// processes the error tag
public class oError
{
  public string code;
  public oErrorMessage message;
}

// processes the message tag
public class oErrorMessage
{
  public string lang;
  public string value;
}&lt;/pre&gt;

&lt;p&gt;Finally we will need to add this new error object to the oDataResult class so it can be processed. This allows us to process the JSON once checking for either results or an error. You will need to set the MissingMemberHandling property to ignore otherwise an error would occur during deserialization. So our oDataResult class contains three items.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;public class oDataResults&lt;t&gt;  // T needs to be a list of objects
{
  public DInfo&lt;t&gt; d;
  public oError error;
  public oQueryMeta __metadata;
}&lt;/pre&gt;

&lt;p&gt;Now when we make a request we can check for an error before using the list of results.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  using (Stream dataStream = response.GetResponseStream())
  {
    using (StreamReader reader = new StreamReader(dataStream))
    {
      JsonSerializer serializer = new JsonSerializer();
      serializer.MissingMemberHandling = MissingMemberHandling.Ignore;

      oDataResults&lt;SomeTableRows&gt; olist;
      olist = (oDataResults&lt;SomeTableRows&gt;)serializer.Deserialize(
               new JsonTextReader(reader),
               typeof(oDataResults&lt;SomeTableRows&gt;));

      // Check for any errors
      if (olist.error == null)
        dgTable.DataSource = olist.d.results;
      else
        MessageBox.Show(olist.error.message.value);
    }
  }
}&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-987477902412335260?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ukGBBb7DWhI:SupMAb49nKo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ukGBBb7DWhI:SupMAb49nKo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ukGBBb7DWhI:SupMAb49nKo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ukGBBb7DWhI:SupMAb49nKo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ukGBBb7DWhI:SupMAb49nKo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=ukGBBb7DWhI:SupMAb49nKo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=ukGBBb7DWhI:SupMAb49nKo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/ukGBBb7DWhI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/987477902412335260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=987477902412335260&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/987477902412335260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/987477902412335260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/ukGBBb7DWhI/handling-errors-with-advantage-web-api.html" title="Handling Errors with the Advantage Web API" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/handling-errors-with-advantage-web-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMQnszeip7ImA9Wx5UF0U.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-2911010652858664059</id><published>2010-10-20T07:00:00.000-06:00</published><updated>2010-10-22T15:19:43.582-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T15:19:43.582-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mobility" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Consuming Advantage Web API Results</title><content type="html">&lt;p&gt;As I discussed in my last post the Advantage Web API returns data using JSON in a format based on the oDATA Protocol Standard. In order to use this data it needs to be transformed into an object that the client can work with. Let's begin by looking at a sample of the data returned from the Advantage Web API. I Included only a single record in the sample and I included the additional information ( rows_affected and last_autoinc ) which will be returned with each request.&lt;/p&gt;  &lt;pre class="brush: plain"&gt;{
  &amp;quot;d&amp;quot;: {
    &amp;quot;results&amp;quot;: [
      {
        &amp;quot;__metadata&amp;quot;: {
          &amp;quot;uri&amp;quot;: &amp;quot;https://Server.localdomain:6282/adsweb/example/v1/query/select * FROM customer&amp;quot;
        },
        &amp;quot;CustID&amp;quot;: &amp;quot;c50585b4-b039-4843-a092-ef00da72bb90&amp;quot;,
        &amp;quot;CustNum&amp;quot;: 10000,
        &amp;quot;LastName&amp;quot;: &amp;quot;Martin&amp;quot;,
        &amp;quot;FirstName&amp;quot;: &amp;quot;Denise&amp;quot;,
        &amp;quot;Gender&amp;quot;: &amp;quot;F&amp;quot;,
        &amp;quot;CompanyID&amp;quot;: 446,
        &amp;quot;CustomerSince&amp;quot;: &amp;quot;1953-10-08&amp;quot;,
        &amp;quot;Address1&amp;quot;: &amp;quot;16907 HERITAGE COURT&amp;quot;,
        &amp;quot;Address2&amp;quot;: null,
        &amp;quot;City&amp;quot;: &amp;quot;Wolf Point&amp;quot;,
        &amp;quot;State&amp;quot;: &amp;quot;MT&amp;quot;,
        &amp;quot;ZipCode&amp;quot;: &amp;quot;59201&amp;quot;,
        &amp;quot;CellPhone&amp;quot;: &amp;quot;(555) 555-4289&amp;quot;,
        &amp;quot;WorkPhone&amp;quot;: &amp;quot;(555) 555-9415&amp;quot;
      },
    ],
    &amp;quot;__next&amp;quot;: &amp;quot;https://Server.localdomain:6282/adsweb/example/v1/query/select%20*%20FROM%20customer?$skiptoken=21&amp;quot;
  },
  &amp;quot;__metadata&amp;quot;: {
    &amp;quot;rows_affected&amp;quot;: -1,
    &amp;quot;last_autoinc&amp;quot;: 0
  }
}&lt;/pre&gt;

&lt;p&gt;The curly braces ( {} ) are used to distinguish objects within the string. The brackets ( [] ) are used to indicate arrays. Therefore the rows are defined within the results array. JSON serializers can be used to deserialize this into an object as long as the object conforms to the data provided in the string. Additionally we need to have a list of the object since the results object is an array of the rows. The object and list are defined below:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;// definition of Customer fields
public class Customer
{
   public string CustID;
   public int CustNum;
   public string LastName;
   public string FirstName;
   public string Gender;
   public int CompanyID;
   public DateTime CustomerSince;
   public string Address1;
   public string Address2;
   public string City;
   public string State;
   public string ZipCode;
   public string CellPhone;
   public string WorkPhone;
}

// List of customers 
public class CustomerRows : List&lt;customer&gt; { }&lt;/pre&gt;

&lt;p&gt;The serializer will copy the information from the results array into the two objects defined above. The values will be assigned based on the names defined in the JSON so the types defined in the class must have exactally the same names. These classes must be defined for each table or query that you want to receive.&lt;/p&gt;

&lt;p&gt;There are a few more classes that we need to define to handle the rest of the JSON string. We will still need classes to handle the d and the final metadata information. Unlike the classes mentioned above these classes can be reused for any JSON object. These objects are shown below:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;// Processes the __metadata tag
public class oDataResults&lt;t&gt;  // T needs to be a list of objects
{
   public DInfo&lt;t&gt; d;
   public oQueryMeta __metadata;
}

// processes the results tag
public class DInfo&lt;t&gt;
{
   public T results;
   public string __next;
}

// processes the final __metadata tag
public class oQueryMeta
{
   public int rows_affected;
   public int last_autoinc;
}&lt;/pre&gt;

&lt;p&gt;The first class ( oDataResults )determines the type that will be used when the results array is processed. The DInfo class allows the serializer to put the data into the specified type and gets the __next value. The oQueryMeta class gets the rows_affected and last_autoinc values.&lt;/p&gt;

&lt;p&gt;With all of our classes defined all we need to do is send our request and process the results. &lt;/p&gt;

&lt;pre class="brush: csharp"&gt;using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  using (Stream dataStream = response.GetResponseStream())
  {
     using (StreamReader reader = new StreamReader(dataStream))
     {
       JsonSerializer serializer = new JsonSerializer();
       
       oDataResults&lt;customerrows&gt; oList;
       olist = (oDataResults&lt;customerrows&gt;)serializer.Deserialize(
				new JsonTextReader(reader), 
				typeof(oDataResults&lt;customerrows&gt;));
       
       // Bind the list of customer objects to a datagrid control   
       dgCustomer.DataSource = olist.d.results;
     }
  }
}&lt;/pre&gt;

&lt;p&gt;We will have more sample code available with the release of the Advantage Web API.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-2911010652858664059?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3jgaRIuqakI:3rRSPhB-zdY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3jgaRIuqakI:3rRSPhB-zdY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3jgaRIuqakI:3rRSPhB-zdY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3jgaRIuqakI:3rRSPhB-zdY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3jgaRIuqakI:3rRSPhB-zdY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=3jgaRIuqakI:3rRSPhB-zdY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=3jgaRIuqakI:3rRSPhB-zdY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/3jgaRIuqakI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/2911010652858664059/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=2911010652858664059&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2911010652858664059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2911010652858664059?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/3jgaRIuqakI/consuming-json-results.html" title="Consuming Advantage Web API Results" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/consuming-json-results.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QESXY4eSp7ImA9Wx5UF0s.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-2812455811759847198</id><published>2010-10-18T07:00:00.002-06:00</published><updated>2010-10-22T11:41:48.831-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T11:41:48.831-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mobility" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Advantage Web API with Windows Mobile</title><content type="html">&lt;p&gt;The Advantage Web API is a framework for allowing developers to access their data from virtually anywhere on just about any device. It consists of a set of pre-built web services running on a lightweight version of Apache. The interface will provide both SQL and Table style access methods to Advantage data. Communication is secure over HTTPS using SSL and requires data dictionary authentication. The basic architecture is shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pJ4HkzTKiOA/TMHLu6Le-nI/AAAAAAAAD9o/W7MWQnZ8YSc/s1600-h/AdsWeb_Arcitecture%5B7%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="AdsWeb_Arcitecture" border="0" alt="AdsWeb_Arcitecture" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMHLvn6FZCI/AAAAAAAAD9w/pLscgSkqh6Q/AdsWeb_Arcitecture_thumb%5B4%5D.jpg?imgmax=800" width="606" height="345" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="AdsWeb_WM6_CustomerList" border="0" alt="AdsWeb_WM6_CustomerList" align="right" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMCbSdYf1nI/AAAAAAAAD9c/1NlwYVLokBk/AdsWeb_WM6_CustomerList%5B6%5D.jpg?imgmax=800" width="156" height="240" /&gt; Now that we have established the basic framework it is time to create a simple Windows Mobile 6 application that retrieves data from the Advantage Web API. In this case we are going to simply send a query to the server to retrieve a list of customers as shown. &lt;/p&gt;  &lt;p&gt;The first step is to create our web request with an appropriate URL. We then need to add some header information which includes the result type ( application/JSON ) and our authentication. Once the request has been created we then execute the request. The request is sent via HTTPS ensuring that the authentication and data are transferred securely. This means that the server is using some type of certificate to provide the secure communication. &lt;/p&gt;  &lt;pre class="brush: csharp"&gt;string sURI = &amp;quot;https://localhost:6282/adsweb/example/v1/query/&amp;quot;;
sURI += &amp;quot;SELECT%20*%20FROM%20CustomerList&amp;quot;;
HttpWebRequest request = WebRequest.Create(sURI) as HttpWebRequest;
request.Accept = &amp;quot;application/json&amp;quot;;
string auth = &amp;quot;Basic &amp;quot; + Convert.ToBase64String(Encoding.ASCII.GetBytes(&amp;quot;adssys:&amp;quot;));
request.Headers[&amp;quot;Authorization&amp;quot;] = auth;&lt;/pre&gt;

&lt;p&gt;In my case I am using a self-signed certificate which is not recognized by the device. Initially when I made the request i received a &amp;quot;Could not establish a trust relationship with remote server&amp;quot; error message. This is because there is no default mechanism for allowing users to accept an unknown certificate. In order to resolve this error by creating a custom certificate verification handler. You can get all the details from this &lt;a title="SSL with the .NET Compact Framework" href="http://msdn.microsoft.com/en-us/library/bb738067.aspx#SSLwiththe.NETCompactFramework" target="_blank"&gt;MSDN article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next step is to process the result returned by the request. The data is returned back as a JSON string that we can parse. In my case I used the &lt;a href="http://json.codeplex.com/" target="_blank"&gt;JSON.NET library&lt;/a&gt; from CodePlex to create my own parser. The AdsDataObject stores metadata contained in the request and dynamically builds a DataTable based on the returned data. I'll provide the details on this object in a future post.&lt;/p&gt;

&lt;p&gt;Here is the code that processes the response to the web request. Once the request has been processed the data can be shown in the data grid.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  using (Stream dataStream = response.GetResponseStream())
  {
    using (StreamReader reader = new StreamReader(dataStream))
    {
       string json = reader.ReadToEnd();

       oData = new AdsDataObject(json);
       dgCustomer.DataSource = oData.dataTable;
    }
  }
}&lt;/pre&gt;

&lt;p&gt;By default a maximum of 20 rows are returned with each request, you can change this by using the $top parameter ( i.e. …/query/select%20*%20from%20table?$top=10). The request includes an additional parameter, named __next, which contains a URL for getting the next records. The parser/deserializer that you use will need to capture this value.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-2812455811759847198?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=no9NRh36NF4:M917AkfjVAA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=no9NRh36NF4:M917AkfjVAA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=no9NRh36NF4:M917AkfjVAA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=no9NRh36NF4:M917AkfjVAA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=no9NRh36NF4:M917AkfjVAA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=no9NRh36NF4:M917AkfjVAA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=no9NRh36NF4:M917AkfjVAA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/no9NRh36NF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/2812455811759847198/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=2812455811759847198&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2812455811759847198?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/2812455811759847198?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/no9NRh36NF4/advantage-web-api-with-windows-mobile.html" title="Advantage Web API with Windows Mobile" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMHLvn6FZCI/AAAAAAAAD9w/pLscgSkqh6Q/s72-c/AdsWeb_Arcitecture_thumb%5B4%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/advantage-web-api-with-windows-mobile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MER347fyp7ImA9Wx5UFko.&quot;"><id>tag:blogger.com,1999:blog-6658257106003248170.post-7788508998461885317</id><published>2010-10-16T20:29:00.000-06:00</published><updated>2010-10-21T08:30:06.007-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-21T08:30:06.007-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><title>SWFox Conference 2010 Wrap-Up</title><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SWFox2010" border="0" alt="SWFox2010" align="right" src="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMBOaVanLKI/AAAAAAAAD9I/dy5VLiwnbVM/SWFox20107.jpg?imgmax=800" width="240" height="180" /&gt; We wrapped up our participation at SWFox on Saturday night. We gave away our &lt;a href="http://www.sybase.com"&gt;Sybase&lt;/a&gt; Developer's Rock t-shirts and some Advantage 10 pens. We also provided copies of the latest &lt;a title="Book Review - Advantage Database Server: A Developer&amp;#39;s Guide 2nd Edition" href="http://blog.advantageevangelist.com/2010/10/book-review-advantage-database-server.html" target="_blank"&gt;Advantage book&lt;/a&gt; to all of the FoxPro user groups who had representatives attending.&lt;/p&gt;  &lt;p&gt;We had a second opportunity to present our class on extending FoxPro data to mobile devices on Saturday morning. Once again we had several attendees and we were able to have a good discussion of the technology and the mobile landscape. Overall the technology was well received and I got some great feedback on how it could be used in the field.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMBOa_fFrtI/AAAAAAAAD9M/seWTvOAP0Lo/s1600-h/SWFox2010_Giveaway4.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="SWFox2010_Giveaway" border="0" alt="SWFox2010_Giveaway" align="left" src="http://lh4.ggpht.com/_pJ4HkzTKiOA/TMBObfJ2HTI/AAAAAAAAD9Q/9ufzGHK_cy4/SWFox2010_Giveaway_thumb2.jpg?imgmax=800" width="240" height="231" /&gt;&lt;/a&gt; This year we gave away two of the bran new AppleTV devices. We gave one away at the dinner reception on Friday night and the other was given away after lunch on Saturday. I would like to congratulate David Bernard and Ross Taylor and I hope they enjoy their new AppleTVs.&lt;/p&gt;  &lt;p&gt;Finally my thanks once again to all the conference organizers; &lt;a href="http://rickschummer.com/blog2/index.php" target="_blank"&gt;Rick Schummer&lt;/a&gt;, &lt;a href="http://doughennig.blogspot.com/" target="_blank"&gt;Doug Hennig&lt;/a&gt; and Tamar Granor who always make the conference run smoothly. See you all next year.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658257106003248170-7788508998461885317?l=blog.advantageevangelist.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=otrJ0RQ4zw8:mhaPo0rQ93s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=otrJ0RQ4zw8:mhaPo0rQ93s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=otrJ0RQ4zw8:mhaPo0rQ93s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=otrJ0RQ4zw8:mhaPo0rQ93s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=otrJ0RQ4zw8:mhaPo0rQ93s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?a=otrJ0RQ4zw8:mhaPo0rQ93s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ViewsFromAnAdvantageEvangelist?i=otrJ0RQ4zw8:mhaPo0rQ93s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ViewsFromAnAdvantageEvangelist/~4/otrJ0RQ4zw8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.advantageevangelist.com/feeds/7788508998461885317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6658257106003248170&amp;postID=7788508998461885317&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7788508998461885317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6658257106003248170/posts/default/7788508998461885317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ViewsFromAnAdvantageEvangelist/~3/otrJ0RQ4zw8/swfox-conference-2010-wrap-up.html" title="SWFox Conference 2010 Wrap-Up" /><author><name>Chris Franz</name><uri>http://www.blogger.com/profile/09097498077009855123</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_pJ4HkzTKiOA/TMBOaVanLKI/AAAAAAAAD9I/dy5VLiwnbVM/s72-c/SWFox20107.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.advantageevangelist.com/2010/10/swfox-conference-2010-wrap-up.html</feedburner:origLink></entry></feed>

